MySQL Performance-Schema(二) 理論篇

     MySQL Performance-Schema中總共包含52個表,主要分爲幾類:Setup表,Instance表,Wait Event表,Stage Event表Statement Event表,Connection表和Summary表。上一篇文章已經着重講了Setup表,這篇文章將會分別就每種類型的表作詳細的描述。sql

Instance表
     instance中主要包含了5張表:cond_instances,file_instances,mutex_instances,rwlock_instances和socket_instances。
(1)cond_instances:條件等待對象實例
表中記錄了系統中使用的條件變量的對象,OBJECT_INSTANCE_BEGIN爲對象的內存地址。好比線程池的timer_cond實例的name爲:wait/synch/cond/threadpool/timer_cond數據庫

(2)file_instances:文件實例
表中記錄了系統中打開了文件的對象,包括ibdata文件,redo文件,binlog文件,用戶的表文件等,好比redo日誌文件:/u01/my3306/data/ib_logfile0。open_count顯示當前文件打開的數目,若是重來沒有打開過,不會出如今表中。socket

(3)mutex_instances:互斥同步對象實例
表中記錄了系統中使用互斥量對象的全部記錄,其中name爲:wait/synch/mutex/*。好比打開文件的互斥量:wait/synch/mutex/mysys/THR_LOCK_open。LOCKED_BY_THREAD_ID顯示哪一個線程正持有mutex,若沒有線程持有,則爲NULL。tcp

(4)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的缺陷是,只能記錄持有寫鎖的線程,對於讀鎖則無能爲力。函數

(5)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,客戶端socketspa

Wait Event表
      Wait表主要包含3個表,events_waits_current,events_waits_history和events_waits_history_long,經過thread_id+event_id能夠惟一肯定一條記錄。current表記錄了當前線程等待的事件,history表記錄了每一個線程最近等待的10個事件,而history_long表則記錄了最近全部線程產生的10000個事件,這裏的10和10000都是能夠配置的。這三個表表結構相同,history和history_long表數據都來源於current表。current表和history表中可能會有重複事件,而且history表中的事件都是完成了的,沒有結束的事件不會加入到history表中。
THREAD_ID:線程ID
EVENT_ID:當前線程的事件ID,和THREAD_ID組成一個Primary Key。
END_EVENT_ID:當事件開始時,這一列被設置爲NULL。當事件結束時,再更新爲當前的事件ID。
SOURCE:該事件產生時的源碼文件
TIMER_START, TIMER_END, TIMER_WAIT:事件開始/結束和等待的時間,單位爲皮秒(picoseconds)線程

OBJECT_SCHEMA, OBJECT_NAME, OBJECT_TYPE視狀況而定
對於同步對象(cond, mutex, rwlock),這個3個值均爲NULL
對於文件IO對象,OBJECT_SCHEMA爲NULL,OBJECT_NAME爲文件名,OBJECT_TYPE爲FILE
對於SOCKET對象,OBJECT_NAME爲該socket的IP:SOCK值
對於表I/O對象,OBJECT_SCHEMA是表的SCHEMA名,OBJECT_NAME是表名,OBJECT_TYPE爲TABLE或者TEMPORARY TABLE
NESTING_EVENT_ID:該事件對應的父事件ID
NESTING_EVENT_TYPE:父事件類型(STATEMENT, STAGE, WAIT)
OPERATION:操做類型(lock, read, write)unix

Stage Event表 日誌

       Stage表主要包含3個表,events_stages_current,events_stages_history和events_stages_history_long,經過thread_id+event_id能夠惟一肯定一條記錄。表中記錄了當前線程所處的執行階段,因爲能夠知道每一個階段的執行時間,所以經過stage表能夠獲得SQL在每一個階段消耗的時間。orm

THREAD_ID:線程ID
EVENT_ID:事件ID
END_EVENT_ID:剛結束的事件ID
SOURCE:源碼位置
TIMER_START, TIMER_END, TIMER_WAIT:事件開始/結束和等待的時間,單位爲皮秒(picoseconds)
NESTING_EVENT_ID:該事件對應的父事件ID
NESTING_EVENT_TYPE:父事件類型(STATEMENT, STAGE, WAIT)

Statement Event表
      Statement表主要包含3個表,events_statements_current,events_statements_history和events_statements_history_long。經過thread_id+event_id能夠惟一肯定一條記錄。Statments表只記錄最頂層的請求,SQL語句或是COMMAND,每條語句一行,對於嵌套的子查詢或者存儲過程不會單獨列出。event_name形式爲statement/sql/*,或statement/com/*
SQL_TEXT:記錄SQL語句
DIGEST:對SQL_TEXT作MD5產生的32位字符串。若是爲consumer表中沒有打開statement_digest選項,則爲NULL。
DIGEST_TEXT:將語句中值部分用問號代替,用於SQL語句歸類。若是爲consumer表中沒有打開statement_digest選項,則爲NULL。
CURRENT_SCHEMA:默認的數據庫名
OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE:保留字段,所有爲NULL
ROWS_AFFECTED:影響的數目
ROWS_SENT:返回的記錄數
ROWS_EXAMINED:讀取的記錄數目
CREATED_TMP_DISK_TABLES:建立物理臨時表數目
CREATED_TMP_TABLES:建立臨時表數目
SELECT_FULL_JOIN:join時,第一個表爲全表掃描的數目
SELECT_FULL_RANGE_JOIN:join時,引用表採用range方式掃描的數目
SELECT_RANGE:join時,第一個表採用range方式掃描的數目
SELECT_SCAN:join時,第一個表位全表掃描的數目
SORT_ROWS:排序的記錄數目
NESTING_EVENT_ID,NESTING_EVENT_TYPE,保留字段,爲NULL。

Connection表
     Connection表記錄了客戶端的信息,主要包括3張表:users,hosts和account表,accounts包含hosts和users的信息。
USER:用戶名
HOST:用戶的IP

Summary表
    Summary表彙集了各個維度的統計信息包括表維度,索引維度,會話維度,語句維度和鎖維度的統計信息。
(1).wait-summary表
events_waits_summary_global_by_event_name
場景:按等待事件類型聚合,每一個事件一條記錄。
events_waits_summary_by_instance
場景:按等待事件對象聚合,同一種等待事件,可能有多個實例,每一個實例有不一樣的內存地址,所以
event_name+object_instance_begin惟一肯定一條記錄。
events_waits_summary_by_thread_by_event_name
場景:按每一個線程和事件來統計,thread_id+event_name惟一肯定一條記錄。
COUNT_STAR:事件計數
SUM_TIMER_WAIT:總的等待時間
MIN_TIMER_WAIT:最小等待時間
MAX_TIMER_WAIT:最大等待時間
AVG_TIMER_WAIT:平均等待時間

(2).stage-summary表
events_stages_summary_by_thread_by_event_name
events_stages_summary_global_by_event_name
與前面相似

(3).statements-summary表
events_statements_summary_by_thread_by_event_name表和events_statements_summary_global_by_event_name表與前面相似。對於events_statements_summary_by_digest表,
FIRST_SEEN_TIMESTAMP:第一個語句執行的時間
LAST_SEEN_TIMESTAMP:最後一個語句執行的時間
場景:用於統計某一段時間內top SQL

(4).file I/O summary表
file_summary_by_event_name [按事件類型統計]
file_summary_by_instance [按具體文件統計]
場景:物理IO維度
FILE_NAME:具體文件名,好比:/u01/my3306/data/tcbuyer_0168/tc_biz_order_2695.ibd
EVENT_NAME:事件名,好比:wait/io/file/innodb/innodb_data_file
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT
統計IO操做
COUNT_READ,SUM_TIMER_READ,MIN_TIMER_READ,AVG_TIMER_READ,MAX_TIMER_READ, SUM_NUMBER_OF_BYTES_READ
統計讀
COUNT_WRITE,SUM_TIMER_WRITE,MIN_TIMER_WRITE,AVG_TIMER_WRITE,MAX_TIMER_WRITE, SUM_NUMBER_OF_BYTES_WRITE
統計寫
COUNT_MISC,SUM_TIMER_MISC,MIN_TIMER_MISC,AVG_TIMER_MISC,MAX_TIMER_MISC
統計其餘IO事件,好比create,delete,open,close等

(5).Table I/O and Lock Wait Summaries-表
table_io_waits_summary_by_table
根據wait/io/table/sql/handler,聚合每一個表的I/O操做,[邏輯IO]
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT
統計IO操做
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT
統計讀
COUNT_WRITE,SUM_TIMER_WRITE,MIN_TIMER_WRITE,AVG_TIMER_WRITE, MAX_TIMER_WRITE
統計寫
COUNT_FETCH,SUM_TIMER_FETCH,MIN_TIMER_FETCH,AVG_TIMER_FETCH, MAX_TIMER_FETCH
與讀相同
COUNT_INSERT,SUM_TIMER_INSERT,MIN_TIMER_INSERT,AVG_TIMER_INSERT,MAX_TIMER_INSERT
INSERT統計,相應的還有DELETE和UPDATE統計。

(6).table_io_waits_summary_by_index_usage
與table_io_waits_summary_by_table相似,按索引維度統計

(7).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

(8).Connection Summaries表
events_waits_summary_by_account_by_event_name
events_waits_summary_by_user_by_event_name
events_waits_summary_by_host_by_event_name
events_stages_summary_by_account_by_event_name
events_stages_summary_by_user_by_event_name
events_stages_summary_by_host_by_event_name
events_statements_summary_by_account_by_event_name
events_statements_summary_by_user_by_event_name
events_statements_summary_by_host_by_event_name

(9).socket-summaries表
socket_summary_by_instance
socket_summary_by_event_name

其它表
performance_timers: 系統支持的統計時間單位
threads: 監視服務端的當前運行的線程

相關文章
相關標籤/搜索