[MySQL5.6]PerformanceSchema之PS配置項(1)
儘管Performance Schema(以下簡稱PS)在5.5中已經出現,但一直沒有使用過,並且相比5.6,5.5的PS表要少很多。 以下從一個初學者的角度,閱讀PS的官方文件,做一些簡單的筆記
目錄:
1.開啟PS
首先需要強調一點,開啟PS是有效能開銷的,在一個效能測試場景上,我對比了阿里內部版本的Percona Server 5.5.18與官方MySQL5.6.10,發現在同等壓力下,5.6版本有明顯的更高的CPU開銷(大約高了10~20%)
確認是否開啟:
編譯階段:-DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON
預設是ON,可以設為OFF來在編譯階段關閉Performance Schema
也可以在啟動mysqld時,關閉選項performance_schema
如果你在error log中看到類似錯誤的PS表結構或者PS表找不到之類的錯誤,在開啟例項後,可以執行一下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
2.配置PS
Performance Schema可以通過配置setup表來在執行時配置PS,包括以下幾個表:
mysql> show tables like ‘%setup%`;
+—————————————-+
| Tables_in_performance_schema (%setup%) |
+—————————————-+
| setup_actors |
| setup_consumers |
| setup_instruments |
| setup_objects |
| setup_timers |
+—————————————-+
5 rows in set (0.00 sec)
事件的計數設定有兩個相關的表:
performance_timers 列出了可用的時間計數器(timer)及其特徵
mysql> SELECT * FROM performance_timers;
+————-+—————–+——————+—————-+
| TIMER_NAME | TIMER_FREQUENCY | TIMER_RESOLUTION | TIMER_OVERHEAD |
+————-+—————–+——————+—————-+
| CYCLE | 2490706467 | 1 | 38 |
| NANOSECOND | 1000000000 | 1 | 128 |
| MICROSECOND | 1000000 | 1 | 135 |
| MILLISECOND | 1036 | 1 | 150 |
| TICK | 103 | 1 | 450 |
+————-+—————–+——————+—————-+
其中CYCLE由CPU cycle counter 來決定timer
TIMER_FREQUENCY表示每秒內的計數次數,對於CYCLE型別和CPU的速度相關。
TICK取決於不同的平臺,例如,在我的機器上,每秒103個tick,tick表示每發生一次timer interrupt的時間間隔,tick的一些概念可以參考網上找到的這篇文章:http://www.360doc.com/content/11/1201/09/1317564_168810003.shtml
TIMER_RESOLUTION表示每次增加計數的單元,如果為10的話,就表示每次值加10
TIMER_OVERHEAD:the minimal number of cycles of overhead to obtain one timing with the given timer
2.1 setup_timers表決定了不同的
instrument使用的timer型別
mysql> SELECT * FROM setup_timers;
+———–+————-+
| NAME | TIMER_NAME |
+———–+————-+
| idle | MICROSECOND |
| wait | CYCLE |
| stage | NANOSECOND |
| statement | NANOSECOND |
+———–+————-+
setup_timers 可以配置每種
instrument 使用哪種timer, timer必須是performance_timers表中的某一列,可以通過update語句來進行更新
對於wait型別,最重要的是減少OVERHEAD,所以選擇CYCLE型別,相應的代價是損失計時精度
statement或者stage的執行時間總的來說,相比wait要高一個數量級。為了給statement計時,最重要的是原則是要有一個精確的衡量,並且不受處理器頻率影響,因此預設的為NANOSECOND,其額外的‘OVERHEAD’相比CYCLE TIMER並不明顯,因為呼叫一個timer兩次的開銷(一次是statement開始,一次是statement結束)相比statement執行本身的CPU時間要小很多個數量級。如果使用CYCLE,只有壞處,沒有好處。
cycle計數器的精度依賴於CPU的速度,使用CYCLE 計數器實際上比使用標準gettimeofday的開銷要小,後者的一次呼叫可能產生上百次cycle。
修改
setup_timers 表會立刻生效,所以可能一個事件的開頭和結束使用了兩個不同的timer
2.2setup_instruments
setup_instruments 表中包含了上述四種型別(idle,wait, stage,statement)對應的的
instrument,物件可以通過更新ENABLED和TIMED列來決定是否收集對應事件的資訊
mysql> select count(*) from setup_instruments;
+———-+
| count(*) |
+———-+
| 545 |
+———-+
1 row in set (0.00 sec)
mysql> desc setup_instruments;
+———+——————+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+——————+——+—–+———+——-+
| NAME | varchar(128) | NO | | NULL | |
| ENABLED | enum(‘YES’,’NO’) | NO | | NULL | |
| TIMED | enum(‘YES’,’NO’) | NO | | NULL | |
+———+——————+——+—–+———+——-+
目前5.6.10的版本有545個instrument可以來做配置。其中ENABLED列表示是否為該instrument收集事件,TIMED列表示是否為該instrument計時;如果TIMED列的值被關閉,就不會去為對應的事件生成
TIMER_START
, TIMER_END
, 以及 TIMER_WAIT的值
事件的事件被轉換為納秒來統計,不管是使用哪種timer;這主要是為了使用一個統一的時間單位。
2.3
setup_consumers表 列出了事件資訊的消費者型別
mysql> SELECT * FROM setup_consumers;
+——————————–+———+
| NAME | ENABLED |
+——————————–+———+
| events_stages_current | YES |
| events_stages_history | YES |
| events_stages_history_long | YES |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | YES |
| events_waits_current | YES |
| events_waits_history | YES |
| events_waits_history_long | YES |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+——————————–+———+
12 rows in set (0.00 sec)
如果你不關注某個consumer,可以關閉掉,這樣伺服器就不會去花費時間來維護。例如,如果你不想使用歷史事件統計,就可以把幾個history事件關閉。主要包括以下幾種consumer:
Global and Thread Consumers
a.global_instrumentation是最高層次的consumer,如果將其設定為NO,就會關閉全域性instrumentation,其他的consumer都會被忽略掉,不管他們被設定成YSE或者NO。 當global_instrumentation被設定為YES時,就會去維護全域性狀態,同樣也會去檢查thread_instrumentation
如果只開啟了global_instrumentation而關閉其他consumer,維護的全域性狀態表包括:
-
table_lock_waits_summary_by_table
-
table_io_waits_summary_by_index_usage
-
table_io_waits_summary_by_table
b.只有global_instrumentation為YES時才會去檢查thread_instrumentation。 如果thread_instrumentation為NO,他會禁止執行緒級別或者獨立事件收集資訊。如果設定為YES,則會維護執行緒級別的資訊,同時也會檢查
events_xxx
_current
consumer
執行緒級別的資訊所對應的表包括:
Statement Digest Consumer
需要將global_instrumentation設定為YES,否則statements_digest會被忽略掉。它不依賴於 Statement Event consumer,這意味著你可以在每個digest中獲得統計資訊而無需在
events_statements_current中收集資訊,這有利於減少開銷
Wait Event Consumers
這些consumer需要global_instrumentation和thread_instrumentation同時設定為YES.包括以下幾個:
a.events_waits_current,如果設定為NO,則不為
events_waits_current表收集獨立的等待事件。如果為YES,就會開啟
events_waits_current表的資訊收集,同時檢查
events_waits_history和events_waits_history_long這兩個consumer。b.events_waits_history,前提是開啟events_waits_current,該consumer用於控制表
events_waits_history中是否收集資訊。
c.
events_waits_history_long,前提是開啟events_waits_current,該consumer用於控制表events_waits_history_long中是否收集資訊。
Stage Event Consumers
這些consumer需要global_instrumentation和thread_instrumentation同時設定為YES.包括以下幾個:
層次關係和Wait Event Consumer類似
events_stages_current , 對應
events_stages_current表
events_stages_history, 對應
events_stages_history表
events_stages_history_long,對應
events_stages_history_long表
Statement Event Consumers
events_statements_current,對應
events_statements_current等
events_statements_history, 對應
events_statements_history
events_statements_history_long,對應
events_statements_history_long
綜上,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_digest
其中高階別的consumer決定是否去檢查低階別的consumer
2.4.setup_objects
setup_objects用於決定哪些物件可以被監控,當前只能控制表物件,該表預設最大可以插入100行記錄,但可以通過引數
performance_schema_setup_objects_size來調整其大小
預設狀態下,該表的資料包括:
mysql> 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 |
+————-+——————–+————-+———+——-+
預設情況下,監控的表物件排除mysql/PS/IS庫下的表,其中IS庫下的表,不管是否開啟,都不會去監控。PS會根據
setup_objects 和
setup_instruments來決定是否開啟一個
instrument併為其計時。對於在setup_objects中的表物件,必須在兩個表中都ENABLED才會收集事件資訊,如果需要計時,則兩者的TIEMD列都必須為YES。
2.5.setup_actors
setup_actors 用於決定新的前臺執行緒的初始監控狀態,預設情況下包括所有使用者:
mysql> select * from setup_actors;
+——+——+——+
| HOST | USER | ROLE |
+——+——+——+
| % | % | % |
+——+——+——+
1 row in set (0.00 sec)
該表中的記錄可以決定需要對哪些使用者執行緒進行監控,在
threads 表中記錄了所有的前臺/後臺執行緒狀態(有點跟PROCESSLIST表類似),並記錄其是否被監控。
為了讓threads生效,需要開啟 setup_consumers表中的
thread_instrumentation。
相關文章
- [MySQL5.6]PerformanceSchema學習:命名規範、狀態變數及其他(2)MySqlORM變數
- React之配置元件的props(兩個例項)React元件
- Centos7 下配置mysql5.6主從複製例項(一主兩從)CentOSMySql
- 【安全系列】IPSECVPN配置例項
- SpringBoot最佳化之——1.Thymeleaf 配置等注意事項Spring Boot
- HTTPS基礎原理和配置 - 1HTTP
- [非專業翻譯] Mapster - 配置例項
- nginx學習筆記(1):配置項的解析Nginx筆記
- hadoop 配置項的調優(R1)Hadoop
- MySQL5.6之use_index_extensions優化MySqlIndex優化
- MySQL之——RPM方式安裝MySQL5.6MySql
- 【MySQL】MySQL5.6新特性之Batched Key AccessMySqlBAT
- 【MySQL】MySQL5.6新特性之crash-safeMySql
- LEMP環境搭建及配置(三)安裝MySQL5.6MySql
- Tomcat (1) —— Mac下配置Tomcat Https/SSLTomcatMacHTTP
- redis.conf之save配置項解讀Redis
- NserviceBus翻譯之FAQ:MsmqTransportConfig配置項MQQT
- MySQL5.6新特性之Multi-Range ReadMySql
- MapReduce程式設計例項之倒排索引 1程式設計索引
- 【MySQL】MySQL5.6新特性之Multi-Range ReadMySql
- linux mysql5.6版本的安裝配置過程LinuxMySql
- mysql5.6以上(適用5.7)免安裝版本 終極配置MySql
- 雜項 tips
- 天融信TopSAG堡壘機-下載更新配置失敗[1]
- HUAWEI防火牆同一例項場景下配置IPSec隧道防火牆
- Nginx專題(1):Nginx之反向代理及配置Nginx
- 解決Eclipse中配置中沒有server選項——tomcat配置中遇到的問題EclipseServerTomcat
- 【高可用HA】Nginx (1) —— Mac下配置Nginx Http負載均衡(Load Balancer)之101例項NginxMacHTTP負載
- 例項重啟 - ORA-27302: failure occurred at: sskgxpsnd1AI
- H3C和CISCO裝置之間的ipsec vpn 配置例項
- mongodb配置檔案常用配置項MongoDB
- PHPStorm 配置 FTPPHPORMFTP
- gogs配置httpsGoHTTP
- Nginx upstream 配置Nginx
- express 配置httpsExpressHTTP
- Nginx配置HTTPSNginxHTTP
- Eclipse配置MavenEclipseMaven
- AFN框架 之同時相容Http和Https通訊配置框架HTTP