MySQL--performance schema學習

啓用performance schemahtml

在MySQL 5.6.6版本後,performance schema被默認打開
一般MySQL的二進制版本都默認支持PS,
若是使用編譯源碼安裝,在cmake時須要使用參數DWITH_PERFSCHEMA_STORAGE_ENGINE=1來支持PS

performance schema 是以存儲引擎的方式實現的,所以可使用如下兩種方式肯定PS是否可用
## 檢查方式1
SELECT *
FROM INFORMATION_SCHEMA.ENGINES
WHERE ENGINE='PERFORMANCE_SCHEMA'\G

## 檢查方式2
show engines \G

在MySQL配置文件中,可使用performance_schema=ON來設置自動啓用並初始化performance schema
performance schema初始化完成後,能夠像訪問正常數據庫同樣使用performance_schema庫。

 

配置performance schemamysql

##=============================================================================##
performance_schema庫中以setup爲前綴的表存放相關配置信息:
setup_actors:配置用戶緯度的監控,默認監控全部用戶。
setup_consumers:配置events的消費者類型,即收集的events寫入到哪些統計表中。
setup_instruments:配置具體的instrument,主要包含4大類:idle、stage/xxx、statement/xxx、wait/xxx:
setup_objects:配置監控對象,默認對mysql,performance_schema和information_schema中的表都不監控,而其它DB的全部表都監控。
setup_timers:配置每種類型指令的統計時間單位。MICROSECOND表示統計單位是微妙,CYCLE表示統計單位是時鐘週期,時間度量與CPU的主頻有關,NANOSECOND表示統計單位是納秒。但不管採用哪一種度量單位,最終統計表中統計的時間都會裝換到皮秒。(1秒=1000000000000皮秒)

##=============================================================================##
更新表setup_consumers中數據後會當即生效,但不會持久化保存,
所以若是須要永久生效,須要在配置文件中進行配置,如:
[mysqld]
#performance_schema
performance_schema_consumer_events_waits_current=on
performance_schema_consumer_events_stages_current=on
performance_schema_consumer_events_statements_current=on
performance_schema_consumer_events_waits_history=on
performance_schema_consumer_events_stages_history=on
performance_schema_consumer_events_statements_history=on

performance_schema_consumer_XX存在層級關係,當上層被禁用後,即便下層開啓,仍沒法生效。
表setup_consumers裏面的值有個層級關係:
LEVEL1: global_instrumentation 
LEVEL2:    thread_instrumentation,statements_digest
LEVEL3:    events_stages_current,events_statements_current,events_waits_current
LEVEL4: events_stages_history,events_statements_history,events_waits_history
LEVEL5: events_stages_history_long,events_statements_history_long,events_waits_history_long
以_current後綴的存放當前事件信息,
以_history和_history_long爲後綴的表存放的是_current錶的歷史記錄,
_history表默認存放最近等待的10個事件,而_history_long默認存放最近1000個等待事件

_history表存放等待事件的數量能夠經過參數來控制:
SHOW VARIABLES LIKE 'performance_schema%history%size';

##=============================================================================##
當PS啓用後,並非全部事件都會收集,能夠查看setup_instruments表來查看那些事件被收集。
SELECT * 
FROM setup_instruments;

參考:https://dev.mysql.com/doc/refman/5.6/en/setup-instruments-table.html

對於setup_instruments表中記錄,只有當ENABLED和ENABLED同時被激活狀態下,纔會收集事件

setup_instruments表中包含4大類數據:idle、stage/xxx、statement/xxx、wait/xxx.
idle表示socket空閒的時間,
stage類表示語句的每一個執行階段的統計,
statement類統計語句維度的信息,
wait類統計各類等待事件,好比IO,mutux,spin_lock,condition等。
##=============================================================================##

參考鏈接:
http://www.cnblogs.com/zhoujinyi/p/5236705.html
http://keithlan.github.io/2015/07/17/22_performance_schema/

 

performance schema對象git

##=============================================================================##
cond_instances:條件等待對象實例
表中記錄了系統中使用的條件變量的對象,OBJECT_INSTANCE_BEGIN爲對象的內存地址。


##=============================================================================##
file_instances:文件實例
表中記錄了系統中打開了文件的對象,包括ibdata文件,redo文件,binlog文件,用戶的表文件等,open_count顯示當前文件打開的數目,若是重來沒有打開過,不會出如今表中。

## 查看打開次數較高的文件
SELECT * 
FROM file_instances 
ORDER BY OPEN_COUNT DESC 
LIMIT 10\G


##=============================================================================##
mutex_instances:互斥同步對象實例
表中記錄了系統中使用互斥量對象的全部記錄,其中name爲:wait/synch/mutex/*。
LOCKED_BY_THREAD_ID顯示哪一個線程正持有mutex,若沒有線程持有,則爲NULL。


##=============================================================================##
rwlock_instances: 讀寫鎖同步對象實例
表中記錄了系統中使用讀寫鎖對象的全部記錄,其中name爲 wait/synch/rwlock/*。
WRITE_LOCKED_BY_THREAD_ID爲正在持有該對象的thread_id,若沒有線程持有,
則爲NULL。READ_LOCKED_BY_COUNT爲記錄了同時有多少個讀者持有讀鎖。
經過 events_waits_current 表能夠知道,哪一個線程在等待鎖;
經過rwlock_instances知道哪一個線程持有鎖。
rwlock_instances的缺陷是,只能記錄持有寫鎖的線程,對於讀鎖則無能爲力。


##=============================================================================##
socket_instances:活躍會話對象實例
表中記錄了thread_id,socket_id,ip和port,其它表能夠經過thread_id與socket_instance進行關聯,獲取IP-PORT信息,可以與應用對接起來。
event_name主要包含3類:
wait/io/socket/sql/server_unix_socket,服務端unix監聽socket
wait/io/socket/sql/server_tcpip_socket,服務端tcp監聽socket
wait/io/socket/sql/client_connection,客戶端socket

 

 performance schema表github

##=============================================================================##wait相關表
1.events_waits_current:記錄了當前線程等待的事件
2.events_waits_history:記錄了每一個線程最近等待的10個事件
3.events_waits_history_long:記錄了最近全部線程產生的10000個事件


##=============================================================================##stage相關表
1.events_stages_current:記錄了當前線程所處的執行階段
2.events_stages_history:記錄了當前線程所處的執行階段10條歷史記錄
3.events_stages_history_long:記錄了當前線程所處的執行階段10000條歷史記錄


##=============================================================================##
Statement相關表
1.events_statements_current:經過 thread_id+event_id能夠惟一肯定一條記錄。
Statments表只記錄最頂層的請求,SQL語句或是COMMAND,每條語句一行。
event_name形式爲statement/sql/*,或statement/com/*

2.events_statements_history
3.events_statements_history_long

##=============================================================================##
Connection相關表
1.users:記錄用戶鏈接數信息
2.hosts:記錄了主機鏈接數信息
3.accounts:記錄了用戶主機鏈接數信息


##=============================================================================##
Summary 表: Summary表彙集了各個維度的統計信息包括表維度,索引維度,會話維度,語句維度和鎖維度的統計信息
1,events_waits_summary_global_by_event_name:按等待事件類型聚合,每一個事件一條記錄
2,events_waits_summary_by_instance:按等待事件對象聚合,同一種等待事件,可能有多個實例,每一個實例有不一樣的內存地址,所以
event_name+object_instance_begin惟一肯定一條記錄。
3,events_waits_summary_by_thread_by_event_name:按每一個線程和事件來統計,thread_id+event_name惟一肯定一條記錄。
4,events_stages_summary_global_by_event_name:按事件階段類型聚合,每一個事件一條記錄,表結構同上。
5,events_stages_summary_by_thread_by_event_name:按每一個線程和事件來階段統計,表結構同上。
6,events_statements_summary_by_digest:按照事件的語句進行聚合。
7,events_statements_summary_global_by_event_name:按照事件的語句進行聚合。表結構同上。
8,events_statements_summary_by_thread_by_event_name:按照線程和事件的語句進行聚合,表結構同上。
9,file_summary_by_instance:按事件類型統計(物理IO維度)
10,file_summary_by_event_name:具體文件統計(物理IO維度)
11,table_io_waits_summary_by_table:根據wait/io/table/sql/handler,聚合每一個表的I/O操做(邏輯IO緯度)
12,table_io_waits_summary_by_index_usage:與table_io_waits_summary_by_table相似,按索引維度統計
13,table_lock_waits_summary_by_table:聚合了表鎖等待事件,包括internal lock 和 external lock
	internal lock經過SQL層函數thr_lock調用,OPERATION值爲:
	read normal、read with shared locks、read high priority、read no insert、write allow write、write concurrent insert、write delayed、write low priority、write normal
	external lock則經過接口函數handler::external_lock調用存儲引擎層,OPERATION列的值爲:read external、write external

14,Connection Summaries表:account、user、host
15,socket_summary_by_instance、socket_summary_by_event_name:socket聚合統計表。
相關文章
相關標籤/搜索