Performance Schema 維護表格來收集目前和最近的語句事件,並在摘要表格中彙總該資訊。第 29.12.6 節, 「Performance Schema 語句事件表格」描述了語句摘要所依據的事件。請參閱該討論以瞭解語句事件的內容、目前和歷史語句事件表格,以及如何控制預設為部分停用的語句事件收集。
範例語句事件摘要資訊
mysql> SELECT *
FROM performance_schema.events_statements_summary_global_by_event_name\G
*************************** 1. row ***************************
EVENT_NAME: statement/sql/select
COUNT_STAR: 54
SUM_TIMER_WAIT: 38860400000
MIN_TIMER_WAIT: 52400000
AVG_TIMER_WAIT: 719600000
MAX_TIMER_WAIT: 12631800000
SUM_LOCK_TIME: 88000000
SUM_ERRORS: 0
SUM_WARNINGS: 0
SUM_ROWS_AFFECTED: 0
SUM_ROWS_SENT: 60
SUM_ROWS_EXAMINED: 120
SUM_CREATED_TMP_DISK_TABLES: 0
SUM_CREATED_TMP_TABLES: 21
SUM_SELECT_FULL_JOIN: 16
SUM_SELECT_FULL_RANGE_JOIN: 0
SUM_SELECT_RANGE: 0
SUM_SELECT_RANGE_CHECK: 0
SUM_SELECT_SCAN: 41
SUM_SORT_MERGE_PASSES: 0
SUM_SORT_RANGE: 0
SUM_SORT_ROWS: 0
SUM_SORT_SCAN: 0
SUM_NO_INDEX_USED: 22
SUM_NO_GOOD_INDEX_USED: 0
SUM_CPU_TIME: 0
MAX_CONTROLLED_MEMORY: 2028360
MAX_TOTAL_MEMORY: 2853429
COUNT_SECONDARY: 0
...
每個語句摘要表格都有一個或多個分組欄,以指示表格如何彙總事件。事件名稱指的是 setup_instruments
表格中事件工具的名稱
events_statements_summary_by_account_by_event_name
具有EVENT_NAME
、USER
和HOST
欄。每一列都會針對給定帳戶(使用者和主機組合)和事件名稱摘要事件。events_statements_summary_by_digest
具有SCHEMA_NAME
和DIGEST
欄。每一列都會針對每個結構描述和摘要值摘要事件。(DIGEST_TEXT
欄包含對應的標準化語句摘要文字,但既不是分組欄也不是摘要欄。QUERY_SAMPLE_TEXT
、QUERY_SAMPLE_SEEN
和QUERY_SAMPLE_TIMER_WAIT
欄也不是分組欄或摘要欄;它們支援語句取樣。)表格中的最大列數會在伺服器啟動時自動調整大小。若要明確設定此最大值,請在伺服器啟動時設定
performance_schema_digests_size
系統變數。events_statements_summary_by_host_by_event_name
具有EVENT_NAME
和HOST
欄。每一列都會針對給定主機和事件名稱摘要事件。events_statements_summary_by_program
具有OBJECT_TYPE
、OBJECT_SCHEMA
和OBJECT_NAME
欄。每一列都會針對給定儲存程式(儲存程序或函數、觸發程序或事件)摘要事件。events_statements_summary_by_thread_by_event_name
具有THREAD_ID
和EVENT_NAME
欄。每一列都會針對給定執行緒和事件名稱摘要事件。events_statements_summary_by_user_by_event_name
具有EVENT_NAME
和USER
欄。每一列都會針對給定使用者和事件名稱摘要事件。events_statements_summary_global_by_event_name
具有EVENT_NAME
欄。每一列都會針對給定事件名稱摘要事件。prepared_statements_instances
具有OBJECT_INSTANCE_BEGIN
欄。每一列都會針對給定預備語句摘要事件。
每個語句摘要表格都有以下包含彙總值的摘要欄(例外情況除外):
COUNT_STAR
、SUM_TIMER_WAIT
、MIN_TIMER_WAIT
、AVG_TIMER_WAIT
、MAX_TIMER_WAIT
這些欄位與等待事件摘要表格(請參閱第 29.12.20.1 節「等待事件摘要表格」)中相同名稱的欄位類似,但語句摘要表格是彙總來自
events_statements_current
而非events_waits_current
的事件。prepared_statements_instances
表格沒有這些欄位。SUM_
xxx
events_statements_current
表格中對應xxx
欄位的彙總。例如,語句摘要表格中的SUM_LOCK_TIME
和SUM_ERRORS
欄位是events_statements_current
表格中LOCK_TIME
和ERRORS
欄位的彙總。MAX_CONTROLLED_MEMORY
報告語句在執行期間使用的最大受控記憶體量。
MAX_TOTAL_MEMORY
報告語句在執行期間使用的最大記憶體量。
COUNT_SECONDARY
查詢在
SECONDARY
引擎上處理的次數。用於 HeatWave 服務和 HeatWave,其中PRIMARY
引擎是InnoDB
,而SECONDARY
引擎是 HeatWave (RAPID
)。對於 MySQL 社群版伺服器、MySQL 企業版伺服器(內部部署)以及沒有 HeatWave 的 HeatWave 服務,查詢一律在PRIMARY
引擎上處理,這表示在這些 MySQL 伺服器上的值一律為 0。
events_statements_summary_by_digest
表格具有這些額外的摘要欄位
FIRST_SEEN
、LAST_SEEN
時間戳記,表示首次看到及最近一次看到具有指定摘要值的語句的時間。
QUANTILE_95
:語句延遲的第 95 個百分位數,以皮秒為單位。此百分位數是根據收集的直方圖資料計算出的高估計值。換句話說,對於給定的摘要,95% 的測量語句的延遲低於QUANTILE_95
。若要存取直方圖資料,請使用第 29.12.20.4 節「語句直方圖摘要表格」中描述的表格。
QUANTILE_99
:與QUANTILE_95
類似,但用於第 99 個百分位數。QUANTILE_999
:與QUANTILE_95
類似,但用於第 99.9 個百分位數。
events_statements_summary_by_digest
表格包含下列欄位。這些既不是群組欄位也不是摘要欄位;它們支援語句取樣
QUERY_SAMPLE_TEXT
產生該列中摘要值的範例 SQL 語句。此欄位可讓應用程式存取產生該摘要值的伺服器實際看到的語句(針對給定的摘要值)。此欄位的一個用途可能是在語句上執行
EXPLAIN
,以檢查與經常發生的摘要相關聯的代表性語句的執行計畫。當
QUERY_SAMPLE_TEXT
欄位被指派值時,QUERY_SAMPLE_SEEN
和QUERY_SAMPLE_TIMER_WAIT
欄位也會被指派值。依預設,語句顯示可用的最大空間為 1024 個位元組。若要變更此值,請在伺服器啟動時設定
performance_schema_max_sql_text_length
系統變數。(變更此值也會影響其他 Performance Schema 表格中的欄位。請參閱第 29.10 節「Performance Schema 語句摘要和取樣」。)如需語句取樣的資訊,請參閱第 29.10 節「Performance Schema 語句摘要和取樣」。
QUERY_SAMPLE_SEEN
時間戳記,表示看到
QUERY_SAMPLE_TEXT
欄位中語句的時間。QUERY_SAMPLE_TIMER_WAIT
QUERY_SAMPLE_TEXT
欄位中範例語句的等待時間。
events_statements_summary_by_program
表格具有這些額外的摘要欄位
COUNT_STATEMENTS
、SUM_STATEMENTS_WAIT
、MIN_STATEMENTS_WAIT
、AVG_STATEMENTS_WAIT
、MAX_STATEMENTS_WAIT
關於在預存程式執行期間叫用的巢狀語句的統計資料。
prepared_statements_instances
表格具有這些額外的摘要欄位
COUNT_EXECUTE
、SUM_TIMER_EXECUTE
、MIN_TIMER_EXECUTE
、AVG_TIMER_EXECUTE
、MAX_TIMER_EXECUTE
預存語句執行的彙總統計資料。
語句摘要表格具有這些索引
events_transactions_summary_by_account_by_event_name
:主鍵位於 (
USER
、HOST
、EVENT_NAME
)
events_statements_summary_by_digest
:主鍵位於 (
SCHEMA_NAME
、DIGEST
)
events_transactions_summary_by_host_by_event_name
:主鍵位於 (
HOST
、EVENT_NAME
)
events_statements_summary_by_program
:主鍵位於 (
OBJECT_TYPE
、OBJECT_SCHEMA
、OBJECT_NAME
)
events_statements_summary_by_thread_by_event_name
:主鍵位於 (
THREAD_ID
、EVENT_NAME
)
events_transactions_summary_by_user_by_event_name
:主鍵位於 (
USER
、EVENT_NAME
)
events_statements_summary_global_by_event_name
:主鍵位於 (
EVENT_NAME
)
允許對語句摘要表格使用 TRUNCATE TABLE
。它有這些效果
對於
events_statements_summary_by_digest
,它會移除資料列。對於其他未依帳戶、主機或使用者彙總的摘要表格,截斷會將摘要欄位重設為零,而不是移除資料列。
對於其他依帳戶、主機或使用者彙總的摘要表格,截斷會移除沒有連線的帳戶、主機或使用者的資料列,並將其餘資料列的摘要欄位重設為零。
此外,每個依帳戶、主機、使用者或執行緒彙總的語句摘要表格,都會因截斷其所依賴的連線表格,或截斷 events_statements_summary_global_by_event_name
而隱含地截斷。如需詳細資訊,請參閱第 29.12.8 節「Performance Schema 連線表格」。
此外,截斷 events_statements_summary_by_digest
會隱含地截斷 events_statements_histogram_by_digest
,而截斷 events_statements_summary_global_by_event_name
會隱含地截斷 events_statements_histogram_global
。
如果已啟用 statements_digest
取用者,當語句完成時,會如下所述彙總到 events_statements_summary_by_digest
中。彙總是根據針對語句計算出的 DIGEST
值。
如果已存在一個具有剛完成語句之摘要值的
events_statements_summary_by_digest
資料列,則該語句的統計資料會彙總到該資料列。LAST_SEEN
欄位會更新為目前時間。如果沒有資料列具有剛完成語句的摘要值,且表格未滿,則會為該語句建立新的資料列。
FIRST_SEEN
和LAST_SEEN
欄位會以目前時間初始化。如果沒有資料列具有剛完成語句的語句摘要值,且表格已滿,則剛完成語句的統計資料會新增至具有
DIGEST
=NULL
的特殊「全包」資料列,如果必要,會建立此資料列。如果建立了資料列,則FIRST_SEEN
和LAST_SEEN
欄位會以目前時間初始化。否則,LAST_SEEN
欄位會以目前時間更新。
由於記憶體限制,Performance Schema 表格具有最大大小,因此會維護 DIGEST
= NULL
的資料列。DIGEST
= NULL
資料列允許即使摘要表格已滿,也能夠使用一般「其他」儲存區來計算不符合其他資料列的摘要。此資料列可協助您估計摘要是否具有代表性
具有
COUNT_STAR
值(表示所有摘要的 5%)的DIGEST
=NULL
資料列表示摘要摘要表格非常具有代表性;其他資料列涵蓋 95% 的已看見語句。具有
COUNT_STAR
值(表示所有摘要的 50%)的DIGEST
=NULL
資料列表示摘要摘要表格不具代表性;其他資料列僅涵蓋已看見語句的一半。DBA 很可能應該增加最大表格大小,以便使用更明確的資料列來計算DIGEST
=NULL
資料列中計算的更多資料列。依預設,表格會自動調整大小,但如果此大小太小,請在伺服器啟動時將performance_schema_digests_size
系統變數設定為較大的值。
對於已在 setup_objects
表格中啟用檢測的預存程式類型,events_statements_summary_by_program
會如下維護預存程式的統計資料
當物件首次在伺服器中使用時,會為該物件新增一列。
當物件被捨棄時,會移除該物件的列。
當物件執行時,統計資訊會彙總到該物件的列中。
另請參閱第 29.4.3 節,「事件預先篩選」。