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