23 MySQL Performance Schema 23 MySQL Performance Schema.. 1 23.1 性能框架快速啟動... 3 23.2 性能框架配置... 5 23.2.1 性能框架編譯時配置... 5 23.2.2 性能框架啟動配置... 6 23.2.3 啟動時性 ...
23 MySQL Performance Schema
23.9.4.1 events_waits_current表
23.9.4.2 Events_waits_history表
23.9.4.3 events_waits_history_long 表
23.9.5.1 events_stages_current表
23.9.5.2 events_stage_history表
23.9.5.3 events_stage_history_long表
23.9.11.1 replication_connection_configure表
23.9.11.2 replication_connection_status
23.9.11.3 replication_applier_configure
23.9.11.4 replication_applier_status
23.9.11.5 replication_applier_status_by_coordinator
23.9.11.6 replication_applier_statys_by_worker
23.9.11.7 replication_group_members
23.9.11.8 replication_group_member_status
MySQL Performance Schema用來監控MySQL Server的運行運行在底層。性能框架有這些特性:
· 性能框架提供了一種方法檢查內部的服務運行。通過PERFORMANCE_SCHEMA存儲引擎和performance_schema實現。性能框架主要關註於數據性能。和INFORMANCE_SCHEMA不同,INFORMACE_SCHEMA主要檢查元數據。
· 性能框架監控服務事件,事件是服務需要花時間的任何東西,並且已經被記錄這樣時間信息可以被收集。通常一個事件可以是一個函數調用,一個操作系統等待,SQL語句執行的階段比如解析或者排序,或者整個語句或者一組語句。時間收集提供。時間收集提供了同步調用文件和表IO,表鎖等信息。
· 性能框架事件的事件和binlog的事件,事件調度的事件不同。
· 性能框架事件被指定到某個MySQL服務。性能框架表別人我是本地服務,他們的修改不會被寫入到binary log,也不會被覆制。
· 當前事件,歷史事件和事件總結是可用的,那麼就可以確定記錄被啟動了多少次,用了多少時間。事件信息可以查看指定線程的活動或者指定對象的活動,比如文件和信號量。
· PERFORMANCE_SCHEMA存儲引擎使用代碼中的記錄點來收集信息。
· 收集的信息被保存在performance_schema資料庫中。可以用select查詢。
· 性能框架配置可以動態的被修改,通過修改performance_schema資料庫配置數據收集。
· Performance_schema上的表是視圖或者臨時表,不會保存到磁碟中。
· MySQL支持所有平臺的監控。
· 通過在源代碼中加入記錄點實現數據收集。沒有特定線程使用相關的性能框架。
23.1 性能框架快速啟動
對於性能框架要啟用,必須要在MySQL編譯的時候配置好。可以通過mysqld的幫助驗證。如果性能框架可用輸出就會帶—performance_schema參數。
如果這些參數沒有出現,那麼代碼在編譯時就不支持性能框架。
假設性能框架可用,預設是可用的。可以通過配置文件配置:
[mysqld]
performance_schema=ON
當服務啟動,發現performance_schema就會試圖初始化性能框架,可以查看performance_schema變數檢查初始化是否成功。
mysql> SHOW VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| performance_schema | ON |
+--------------------+-------+
這個值表示,性能框架已經可用,如果為off表示發生錯誤,檢查錯誤日誌。
性能框架實現和存儲引擎類似。如果引擎可用可以在show engine查看是否支持PERFORMANCE_SCHEMA存儲引擎。
Performance_schema中的資料庫可以被劃分為幾塊,當前時間,歷史事件,總結,對象實例和安裝信息。
原本,其實並不是所有的記錄點和收集器都是可用。所以性能框架不會收集所有的數據。可以通過以下語句打開所有的積累點和收集器:
mysql> UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
Query OK, 560 rows affected (0.04 sec)
mysql> UPDATE setup_consumers SET ENABLED = 'YES';
Query OK, 10 rows affected (0.00 sec)
當前事件表,可以通過events_waits_current查看當前服務在做什麼。每個線程都有一行。
歷史表,表結構和當前事件一樣,event_waits_history和event_waits_history_long表包含了每個線程最近10個event和每個線程最近10000個events。
一個新的事件被加入,老的事件就會刪除。
總結表提供了所有事件的聚合的信息。這個表通過分組一不同方式計算事件數據。為了查看那個記錄點唄執行的次數最多或者等待事件最長,通過對錶上的count_star或者sum_timer_wait列進行排序:
mysql> SELECT EVENT_NAME, COUNT_STAR
-> FROM events_waits_summary_global_by_event_name
-> ORDER BY COUNT_STAR DESC LIMIT 10;
+---------------------------------------------------+------------+
| EVENT_NAME | COUNT_STAR |
+---------------------------------------------------+------------+
| wait/synch/mutex/mysys/THR_LOCK_malloc | 6419 |
| wait/io/file/sql/FRM | 452 |
| wait/synch/mutex/sql/LOCK_plugin | 337 |
| wait/synch/mutex/mysys/THR_LOCK_open | 187 |
| wait/synch/mutex/mysys/LOCK_alarm | 147 |
| wait/synch/mutex/sql/THD::LOCK_thd_data | 115 |
| wait/io/file/myisam/kfile | 102 |
| wait/synch/mutex/sql/LOCK_global_system_variables | 89 |
| wait/synch/mutex/mysys/THR_LOCK::mutex | 89 |
| wait/synch/mutex/sql/LOCK_open | 88 |
+---------------------------------------------------+------------+
mysql> SELECT EVENT_NAME, SUM_TIMER_WAIT
-> FROM events_waits_summary_global_by_event_name
-> ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
+----------------------------------------+----------------+
| EVENT_NAME | SUM_TIMER_WAIT |
+----------------------------------------+----------------+
| wait/io/file/sql/MYSQL_LOG | 1599816582 |
| wait/synch/mutex/mysys/THR_LOCK_malloc | 1530083250 |
| wait/io/file/sql/binlog_index | 1385291934 |
| wait/io/file/sql/FRM | 1292823243 |
| wait/io/file/myisam/kfile | 411193611 |
| wait/io/file/myisam/dfile | 322401645 |
| wait/synch/mutex/mysys/LOCK_alarm | 145126935 |
| wait/io/file/sql/casetest | 104324715 |
| wait/synch/mutex/sql/LOCK_plugin | 86027823 |
| wait/io/file/sql/pid | 72591750 |
+----------------------------------------+----------------+
如,上面結果THR_LOCK信號量是熱點,2個語句分別表示執行的熱度和等待事件長度。
實例表,記錄了對象類型被記錄了。當服務使用了一個記錄對象,那麼會產生一個事件。這些表提供了事件名,解釋性的註釋或者狀態。比如file_instances表,記錄了文件io操作和他們對應的文件。
mysql> SELECT * FROM file_instances\G
*************************** 1. row ***************************
FILE_NAME: /opt/mysql-log/60500/binlog.000007
EVENT_NAME: wait/io/file/sql/binlog
OPEN_COUNT: 0
*************************** 2. row ***************************
FILE_NAME: /opt/mysql/60500/data/mysql/tables_priv.MYI
EVENT_NAME: wait/io/file/myisam/kfile
OPEN_COUNT: 1
*************************** 3. row ***************************
FILE_NAME: /opt/mysql/60500/data/mysql/columns_priv.MYI
EVENT_NAME: wait/io/file/myisam/kfile
OPEN_COUNT: 1
...
Setup表用來配置和監控特點的,比如setup_timers表:
mysql> SELECT * FROM setup_timers;
+-------------+-------------+
| NAME | TIMER_NAME |
+-------------+-------------+
| idle | MICROSECOND |
| wait | CYCLE |
| stage | NANOSECOND |
| statement | NANOSECOND |
| transaction | NANOSECOND |
+-------------+-------------+
Setup_instruments列了哪些可以被記錄的事件。然後通過修改這個表開控制是否啟動這個記錄。
mysql> UPDATE setup_instruments SET ENABLED = 'NO'
-> WHERE NAME = 'wait/synch/mutex/sql/LOCK_mysql_create_db';
性能框架使用,收集來的事件來更新到performance_schema資料庫,資料庫作為事件信息的消費者。Setup_consumers表列出了可用的消費者。
控制是否性能框架維護一個消費者作為事件信息的目標。可以設置為enabled值。
23.2 性能框架配置
23.2.1 性能框架編譯時配置
為了讓性能框架啟用必須在編譯時被配置,由官方提供的MySQL是支持性能框架的,如果是其他發佈方發佈的,那麼要先檢查是否支持。
如果是從源代碼發佈的,那麼在發佈的時候要先設置:
shell> cmake . -DWITH_PERFSCHEMA_STORAGE_ENGINE=1
在MySQL 5.7.3之後,也可以支持啟動性能框架,但是不包含所有的記錄點,比如:
shell> cmake . -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DDISABLE_PSI_STAGE=1 \
-DDISABLE_PSI_STATEMENT=1
如果你安裝MySQL到一個老的安裝上,並且沒有配置過性能框架,當確保performance_schema資料庫包含了所有的當前表後,可以使用mysql_upgrade啟動服務。然後重啟,有個跡象要特別留意:
[ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure
[ERROR] Native table 'performance_schema'.'events_waits_history_long'has the
wrong structure
...
通過以下查看mysql是否支持性能框架:
shell> mysqld --verbose --help
...
--performance_schema
Enable the performance schema.
--performance_schema_events_waits_history_long_size=#
Number of rows in events_waits_history_long.
...
也可以通過連接到服務之後使用show engine查看是否存在PERFORMANCE_SCHEMA存儲引擎。如果在build的時候沒有被配置那麼show engines不會顯示PERFORMANCE_SCHEMA存儲引擎。
23.2.2 性能框架啟動配置
假設性能框架是可用的,那麼預設是啟動的也可以在