MySQL 如何獲取執行中的Queries資訊?

張衝andy發表於2023-09-15

適用於:MySQL伺服器-版本5.6及更高版本

目的: 瞭解MySQL中執行了哪些查詢,並獲得它們的統計資料。

查詢資訊的主要來源是 performance_schema.events_statements_summary_by_digest 。此表根據規範化查詢的 前1024個字元 以及執行這些查詢的預設模式來聚集資料。它包括諸如查詢執行了多少次、總/平均/最小/最大執行次數、是否使用了索引等資訊。 events_statements_summary_by_digest 一行資料示例:

select  *  from performance_schema.events_statements_summary_by_digest limit 1\G ;              
*************************** 1. row ***************************
                SCHEMA_NAME: NULL
                     DIGEST: NULL
                DIGEST_TEXT: NULL
                 COUNT_STAR: 15874319033
             SUM_TIMER_WAIT: 1187054378614800688
             MIN_TIMER_WAIT: 7544000
             AVG_TIMER_WAIT: 8209124000
             MAX_TIMER_WAIT: 3613526422741000
              SUM_LOCK_TIME: 1501434543795000000
                 SUM_ERRORS: 19634001
               SUM_WARNINGS: 104128780
          SUM_ROWS_AFFECTED: 7586098231
              SUM_ROWS_SENT: 793508469051
          SUM_ROWS_EXAMINED: 73964574771009
SUM_CREATED_TMP_DISK_TABLES: 29299
     SUM_CREATED_TMP_TABLES: 1626394519
       SUM_SELECT_FULL_JOIN: 391188771
 SUM_SELECT_FULL_RANGE_JOIN: 1396714
           SUM_SELECT_RANGE: 363623329
     SUM_SELECT_RANGE_CHECK: 18
            SUM_SELECT_SCAN: 2403956125
      SUM_SORT_MERGE_PASSES: 4072044
             SUM_SORT_RANGE: 0
              SUM_SORT_ROWS: 205672901636
              SUM_SORT_SCAN: 2416156953
          SUM_NO_INDEX_USED: 2258897285
     SUM_NO_GOOD_INDEX_USED: 24
                 FIRST_SEEN: 2021-11-23 00:45:19.866135
                  LAST_SEEN: 2023-09-15 22:18:11.186681
                QUANTILE_95: 5011872336
                QUANTILE_99: 125892541179
               QUANTILE_999: 1513561248436
          QUERY_SAMPLE_TEXT: select a.* 
 ,b.REFUND_SIGN
    from t_orc_ve_bu_sale_order_to_c a
                  
                            QUERY_SAMPLE_SEEN: 2023-09-15 22:18:04.394621
    QUERY_SAMPLE_TIMER_WAIT: 4336854074000
1 row in set (0.00 sec)

一些注意事項:

  • 計時單位為皮秒( 10E-12 second)。在MySQL 8.0.16和更高版本中,您可以使用本機 FORMAT_PICO_TIME() 函式將時間轉換為人類可讀的格式:

  • 在MySQL 8.0.15和更低版本中,使用 sys.format_time() 函式代替。
  • 當MySQL重新啟動或表被截斷時,表中的資料會重置。
  • 如果您在指定預設模式和在指定表名時包含模式名時保持一致,則摘要效果最好。
  • 表中最多可以有 10000行(預設情況下)。如果您有更多的摘要(規範化查詢的雜湊)和預設模式的組合,那麼它們將被聚集在一行中 SCHEMA_NAME = NULL and DIGEST = NULL
  • 不包括使用伺服器端預準備語句執行的查詢。
  • 如果查詢被執行並且執行時間比當前樣本慢或者當前樣本超過60秒,則預設情況下查詢樣本(最後三列——在MySQL 8中可用)會更新。

events_statements_summary_by_digest 表不包括在哪個時間間隔內執行了哪些查詢的資訊。

如果你只想檢視當前或最近的查詢,這裡有三個表,你可以使用:

events_statements_current 和 events_statements_history 預設情況下,表是啟用的。對於這些表,當連線關閉時,這些行將被刪除。 events_statements_history_long 預設情況下不啟用。對於該表,不會刪除已關閉連線的行。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2983845/,如需轉載,請註明出處,否則將追究法律責任。

相關文章