mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解
概述
MySQL 5.5開始新增一個(gè)數(shù)據(jù)庫:PERFORMANCE_SCHEMA,主要用于收集數(shù)據(jù)庫服務(wù)器性能參數(shù)。并且?guī)炖锉淼拇鎯?chǔ)引擎均為PERFORMANCE_SCHEMA,而用戶是不能創(chuàng)建存儲(chǔ)引擎為PERFORMANCE_SCHEMA的表。performance_schema中事件統(tǒng)計(jì)表。統(tǒng)計(jì)事件表分為5個(gè)類別,分別為等待事件、階段事件、語句事件、事務(wù)事件、內(nèi)存事件。
1、performance_schema特點(diǎn)
它具有以下特點(diǎn):
1)提供了一種在數(shù)據(jù)庫運(yùn)行時(shí)實(shí)時(shí)檢查server的內(nèi)部執(zhí)行情況的方法。performance_schema 數(shù)據(jù)庫中的表使用performance_schema存儲(chǔ)引擎。該數(shù)據(jù)庫主要關(guān)注數(shù)據(jù)庫運(yùn)行過程中的性能相關(guān)的數(shù)據(jù),與information_schema不同,information_schema主要關(guān)注server運(yùn)行過程中的元數(shù)據(jù)信息
2)performance_schema通過監(jiān)視server的事件來實(shí)現(xiàn)監(jiān)視server內(nèi)部運(yùn)行情況, “事件”就是server內(nèi)部活動(dòng)中所做的任何事情以及對(duì)應(yīng)的時(shí)間消耗,利用這些信息來判斷server中的相關(guān)資源消耗在了哪里?一般來說,事件可以是函數(shù)調(diào)用、操作系統(tǒng)的等待、SQL語句執(zhí)行的階段(如sql語句執(zhí)行過程中的parsing 或 sorting階段)或者整個(gè)SQL語句與SQL語句集合。事件的采集可以方便的提供server中的相關(guān)存儲(chǔ)引擎對(duì)磁盤文件、表I/O、表鎖等資源的同步調(diào)用信息。
3)performance_schema中的事件與寫入二進(jìn)制日志中的事件(描述數(shù)據(jù)修改的events)、事件計(jì)劃調(diào)度程序(這是一種存儲(chǔ)程序)的事件不同。performance_schema中的事件記錄的是server執(zhí)行某些活動(dòng)對(duì)某些資源的消耗、耗時(shí)、這些活動(dòng)執(zhí)行的次數(shù)等情況。
4)performance_schema中的事件只記錄在本地server的performance_schema中,其下的這些表中數(shù)據(jù)發(fā)生變化時(shí)不會(huì)被寫入binlog中,也不會(huì)通過復(fù)制機(jī)制被復(fù)制到其他server中。
5)當(dāng)前活躍事件、歷史事件和事件摘要相關(guān)的表中記錄的信息。能提供某個(gè)事件的執(zhí)行次數(shù)、使用時(shí)長(zhǎng)。進(jìn)而可用于分析某個(gè)特定線程、特定對(duì)象(如mutex或file)相關(guān)聯(lián)的活動(dòng)。
6)PERFORMANCE_SCHEMA存儲(chǔ)引擎使用server源代碼中的“檢測(cè)點(diǎn)”來實(shí)現(xiàn)事件數(shù)據(jù)的收集。對(duì)于performance_schema實(shí)現(xiàn)機(jī)制本身的代碼沒有相關(guān)的單獨(dú)線程來檢測(cè),這與其他功能(如復(fù)制或事件計(jì)劃程序)不同
7)收集的事件數(shù)據(jù)存儲(chǔ)在performance_schema數(shù)據(jù)庫的表中。這些表可以使用SELECT語句查詢,也可以使用SQL語句更新performance_schema數(shù)據(jù)庫中的表記錄(如動(dòng)態(tài)修改performance_schema的setup_*開頭的幾個(gè)配置表,但要注意:配置表的更改會(huì)立即生效,這會(huì)影響數(shù)據(jù)收集)
8)performance_schema的表中的數(shù)據(jù)不會(huì)持久化存儲(chǔ)在磁盤中,而是保存在內(nèi)存中,一旦服務(wù)器重啟,這些數(shù)據(jù)會(huì)丟失(包括配置表在內(nèi)的整個(gè)performance_schema下的所有數(shù)據(jù))
9)MySQL支持的所有平臺(tái)中事件監(jiān)控功能都可用,但不同平臺(tái)中用于統(tǒng)計(jì)事件時(shí)間開銷的計(jì)時(shí)器類型可能會(huì)有所差異。
2、performance_schema實(shí)現(xiàn)機(jī)制
performance_schema遵循以下設(shè)計(jì)目標(biāo):
1)啟用performance_schema不會(huì)導(dǎo)致server的行為發(fā)生變化。例如,它不會(huì)改變線程調(diào)度機(jī)制,不會(huì)導(dǎo)致查詢執(zhí)行計(jì)劃(如EXPLAIN)發(fā)生變化
2)啟用performance_schema之后,server會(huì)持續(xù)不間斷地監(jiān)測(cè),開銷很小。不會(huì)導(dǎo)致server不可用
3)在該實(shí)現(xiàn)機(jī)制中沒有增加新的關(guān)鍵字或語句,解析器不會(huì)變化
4)即使performance_schema的監(jiān)測(cè)機(jī)制在內(nèi)部對(duì)某事件執(zhí)行監(jiān)測(cè)失敗,也不會(huì)影響server正常運(yùn)行
5)如果在開始收集事件數(shù)據(jù)時(shí)碰到有其他線程正在針對(duì)這些事件信息進(jìn)行查詢,那么查詢會(huì)優(yōu)先執(zhí)行事件數(shù)據(jù)的收集,因?yàn)槭录?shù)據(jù)的收集是一個(gè)持續(xù)不斷的過程,而檢索(查詢)這些事件數(shù)據(jù)僅僅只是在需要查看的時(shí)候才進(jìn)行檢索。也可能某些事件數(shù)據(jù)永遠(yuǎn)都不會(huì)去檢索
6)需要很容易地添加新的instruments監(jiān)測(cè)點(diǎn)
7)instruments(事件采集項(xiàng))代碼版本化:如果instruments的代碼發(fā)生了變更,舊的instruments代碼還可以繼續(xù)工作。
注意:MySQL sys schema是一組對(duì)象(包括相關(guān)的視圖、存儲(chǔ)過程和函數(shù)),可以方便地訪問performance_schema收集的數(shù)據(jù)。同時(shí)檢索的數(shù)據(jù)可讀性也更高(例如:performance_schema中的時(shí)間單位是皮秒,經(jīng)過sys schema查詢時(shí)會(huì)轉(zhuǎn)換為可讀的us,ms,s,min,hour,day等單位),sys schem在5.7.x版本默認(rèn)安裝
3、基本概念
instruments:生產(chǎn)者,用于采集MySQL 中各種各樣的操作產(chǎn)生的事件信息,對(duì)應(yīng)配置表中的配置項(xiàng)我們可以稱為監(jiān)控采集配置項(xiàng),以下提及生產(chǎn)者均統(tǒng)稱為instruments
consumers:消費(fèi)者,對(duì)應(yīng)的消費(fèi)者表用于存儲(chǔ)來自instruments采集的數(shù)據(jù),對(duì)應(yīng)配置表中的配置項(xiàng)我們可以稱為消費(fèi)存儲(chǔ)配置項(xiàng),以下提及消費(fèi)者均統(tǒng)稱為consumers
4、performance_schema表的分類
performance_schema庫下的表可以按照監(jiān)視不同的緯度進(jìn)行分組,例如:或按照不同數(shù)據(jù)庫對(duì)象進(jìn)行分組,或按照不同的事件類型進(jìn)行分組,或在按照事件類型分組之后,再進(jìn)一步按照帳號(hào)、主機(jī)、程序、線程、用戶等
5、performance_schema管理
5.1、打開performance_schema
performance_schema在5.7.x及其以上版本中默認(rèn)啟用(5.6.x及其以下版本默認(rèn)關(guān)閉),如果要顯式啟用或關(guān)閉時(shí),我們需要使用參數(shù)performance_schema=ON|OFF設(shè)置,并在my.cnf中進(jìn)行配置:
[mysqld]performance_schema = ON # 注意:該參數(shù)為只讀參數(shù),需要在實(shí)例啟動(dòng)之前設(shè)置才生效
5.2、performance_schema配置instruments
數(shù)據(jù)庫剛剛初始化并啟動(dòng)時(shí),并非所有instruments(事件采集項(xiàng),在采集項(xiàng)的配置表中每一項(xiàng)都有一個(gè)開關(guān)字段,或?yàn)閅ES,或?yàn)镹O)和consumers(與采集項(xiàng)類似,也有一個(gè)對(duì)應(yīng)的事件類型保存表配置項(xiàng),為YES就表示對(duì)應(yīng)的表保存性能數(shù)據(jù)。
5.2.1、setup_instruments表中頂級(jí)instruments 組件分類如下:
1)Idle 組件(1個(gè))
2)transaction 組件(1個(gè))
3)Memory 組件(377個(gè)),默認(rèn)情況下禁用了大多數(shù)memory instruments
4)Stage Instrument 組件(129個(gè))
5)Statement Instrument 組件(193個(gè))
6)Wait Instrument 組件(319個(gè)),包含如下幾個(gè)子類
wait/io:用于檢測(cè)I/O操作的instrumentswait/io/table/sql/handler:與表I/O操作相關(guān)的instrumentswait/lock:鎖操作相關(guān)的instruments wait/synch:磁盤同步對(duì)象相關(guān)的instruments
5.2.2、推薦配置
my.cnf參考如下配置:
#監(jiān)控performance_schema=onperformance-schema-instrument='wait/io/file/%=on'performance-schema-instrument='wait/io/table/%=on'performance-schema-instrument='statement/com/%=on'performance-schema-instrument='statement/sql/%=on'performance-schema-instrument='stage/sql/%=on'performance-schema-instrument='memory/%=on'# 注:只有current=on,performance_schema才會(huì)檢查是否需要填充到history和long history中,后兩者沒有關(guān)系,均依賴于current,因此current必須無條件啟用performance-schema-consumer-events_stages_current=on# performance-schema-consumer-events_stages_history=on# performance_schema_events_stages_history_size=30performance-schema-consumer-events_stages_history_long=onperformance_schema_events_statements_history_long_size=10000performance-schema-consumer-events_statements_current=on# performance-schema-consumer-events_statements_history=on# performance_schema_events_statements_history_size=30performance-schema-consumer-events_statements_history_long=onperformance_schema_events_statements_history_long_size=10000performance-schema-consumer-events_waits_current=on# performance-schema-consumer-events_waits_history=on# performance_schema_events_statements_history_size=30performance-schema-consumer-events_waits_history_long=onperformance_schema_events_waits_history_long_size=10000performance-schema-consumer-statements_digest=on
后面會(huì)分享更多devops和DBA方面內(nèi)容,感興趣的朋友可以關(guān)注下~
總結(jié)
以上是生活随笔為你收集整理的mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: A*寻路算法之解决目标点不可达问题
- 下一篇: docker-compose之环境配置以