程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL Performance-Schema(二) 理論篇,performanceschema

MySQL Performance-Schema(二) 理論篇,performanceschema

編輯:MySQL綜合教程

MySQL Performance-Schema(二) 理論篇,performanceschema


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

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顯示當前文件打開的數目,如果重來沒有打開過,不會出現在表中。

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

(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,客戶端socket

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)

Stage Event表 

       Stage表主要包含3個表,events_stages_current,events_stages_history和events_stages_history_long,通過thread_id+event_id可以唯一確定一條記錄。表中記錄了當前線程所處的執行階段,由於可以知道每個階段的執行時間,因此通過stage表可以得到SQL在每個階段消耗的時間。

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: 監視服務端的當前運行的線程

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved