MySQL Performance-Schema(一) 配置篇

      performance-schema最先在MYSQL 5.5中出現,而如今5.6,5.7中performance-Schema又添加了更多的監控項,統計信息也更豐富,愈來愈有ORACLE-AWR統計信息的趕腳,真乃DBA童鞋進行性能診斷分析的福音。本文主要講Performance-Schema中的配置表,經過配置表能大概瞭解performance-schema的全貌,爲後續使用和深刻理解作準備。mysql

配置表sql

Performance-Schema中主要有5個配置表,具體以下:服務器

root@performance_schema 06:03:09>show tables like '%setup%';
+----------------------------------------+
| Tables_in_performance_schema (%setup%) |
+----------------------------------------+
| setup_actors |
| setup_consumers |
| setup_instruments |
| setup_objects |
| setup_timers |
+----------------------------------------+
socket

1.setup_actors用於配置user維度的監控,默認狀況下監控全部用戶線程。
root@performance_schema 05:47:27>select * from setup_actors;
+------+------+------+
| HOST | USER | ROLE |
+------+------+------+
| % | % | % |
+------+------+------+性能

2.setup_consumers表用於配置事件的消費者類型,即收集的事件最終會寫入到哪些統計表中。
root@performance_schema 05:48:16>select * from setup_consumers;
+--------------------------------+---------+
| NAME | ENABLED |
+--------------------------------+---------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
| events_statements_current | YES |
| events_statements_history | NO |
| events_statements_history_long | NO |
| events_waits_current | NO |
| events_waits_history | NO |
| events_waits_history_long | NO |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+--------------------------------+---------+
能夠看到有12個consumer,若是不想關注某些consumer,能夠將ENABLED設置爲NO,好比events_statements_history_long設置爲NO,
則收集事件不會寫入到對應的表events_statements_history_long中。12個consumer不是平級的,存在多級層次關係。具體以下表:
global_instrumentation
 |– thread_instrumentation
   |– events_waits_current
     |– events_waits_history
     |– events_waits_history_long
   |– events_stages_current
     |– events_stages_history
     |– events_stages_history_long
   |– events_statements_current
     |– events_statements_history
     |– events_statements_history_long
 |– statements_digestspa

多層次的consumer聽從一個基本原則,只有上一層次的爲YES,纔會繼續檢查該本層爲YES or NO。global_instrumentation是最高級別consumer,若是它設置爲NO,則全部的consumer都會忽略。若是隻打開global_instrumentation,而關閉全部其它子consumer(設置爲NO),則只收集全局維度的統計信息,好比xxx_instance表,而不會收集用戶維度,語句維度的信息。第二層次的是thread_instrumentation,用戶線程維度的統計信息,好比xxx_by_thread表,另一個是statements_digest,這個用於全局統計SQL-digest的信息。第三層次是語句維度,包括events_waits_current,events_stages_current和events_statements_current,分別用於統計wait,stages和statement信息,第四層次是歷史表信息,主要包括xxx_history和xxx_history_long。線程

3.setup_instruments表用於配置一條條具體的instrument,主要包含4大類:idle,stage/xxx,statement/xxx,wait/xxx.
root@performance_schema 06:25:50>select name,count(*) from setup_instruments group by LEFT(name,5);
+---------------------------------+----------+
| name | count(*) |
+---------------------------------+----------+
| idle | 1 |
| stage/sql/After create | 111 |
| statement/sql/select | 170 |
| wait/synch/mutex/sql/PAGE::lock | 296 |
+---------------------------------+----------+
idle表示socket空閒的時間,stage類表示語句的每一個執行階段的統計,statement類統計語句維度的信息,wait類統計各類等待事件,好比IO,mutux,spin_lock,condition等。從上表統計結果來看,能夠基本看到每類的instrument數目,stage包含111個,statement包含170個,wait包含296個。orm

4.setup_objects表用於配置監控對象,默認狀況下全部mysql,performance_schema和information_schema中的表都不監控。而其它DB的全部表都監控。對象

root@performance_schema 06:25:55>select * from setup_objects;
+-------------+--------------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA | OBJECT_NAME | ENABLED | TIMED |
+-------------+--------------------+-------------+---------+-------+
| TABLE | mysql | % | NO | NO |
| TABLE | performance_schema | % | NO | NO |
| TABLE | information_schema | % | NO | NO |
| TABLE | % | % | YES | YES |
+-------------+--------------------+-------------+---------+-------+事件

5.setup_timers表用於配置每種類型指令的統計時間單位。MICROSECOND表示統計單位是微妙,CYCLE表示統計單位是時鐘週期,時間度量與CPU的主頻有關,NANOSECOND表示統計單位是納秒,關於每種類型的具體含義,能夠參考performance_timer這個表。因爲wait類包含的都是等待事件,單個SQL調用次數比較多,所以選擇代價最小的度量單位cycle。但不管採用哪一種度量單位,最終統計表中統計的時間都會裝換到皮秒。

root@performance_schema 06:29:50>select * from setup_timers;
+-----------+-------------+
| NAME | TIMER_NAME |
+-----------+-------------+
| idle | MICROSECOND |
| wait | CYCLE |
| stage | NANOSECOND |
| statement | NANOSECOND |
+-----------+-------------+

配置方式

      默認狀況下,setup_instruments表只打開了statement和wait/io部分的指令,setup_consumer表中不少consumer也沒有打開。爲了打開須要的選項,能夠經過update語句直接修改配置表,而且修改後能夠當即生效,但這種方式必需得啓動服務器後才能夠修改,而且沒法持久化,重啓後,又得從新設置一遍。從5.6.4開始提供了my.cnf的配置方式,格式以下:

1.設置採集的instrument
performance_schema_instrument='instrument_name=value'
(1)打開wait類型的指令
performance_schema_instrument='wait/%'
(2)打開全部指令
performance_schema_instrument='%=on'

2.設置consumer
performance_schema_consumer_xxx=value
(1)打開 events_waits_history consumer

performance_schema_consumer_events_waits_current=on

performance_schema_consumer_events_waits_history=on

這裏要注意consumer的層次關係, events_waits_history處於第4層,所以設置它時,要確保events_statements_current,thread_instrumentation和global_instrumentation的ENABLED狀態都爲YES,才能生效。因爲默認thread_instrumentation和global_instrumentation都是YES,所以只須要顯示設置events_waits_current和events_waits_current便可。

3.設置統計表大小
全部的performance_schema表均採用PERFORMANCE_SCHEMA存儲引擎,表中的全部數據只存在內存,表的大小在系統初始化時已經
固定好,所以佔用的內存是必定的。能夠經過配置來定製具體每一個表的記錄數。
performance_schema_events_waits_history_size=20
performance_schema_events_waits_history_long_size=15000

相關文章
相關標籤/搜索