文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.4.1 events_waits_current 資料表

events_waits_current 資料表包含目前的等待事件。此資料表針對每個執行緒儲存一列,顯示執行緒最近一次監控的等待事件的目前狀態,因此沒有用於設定資料表大小的系統變數。

在包含等待事件列的資料表中,events_waits_current 是最基本的。其他包含等待事件列的資料表都是從目前的事件邏輯衍生而來。例如,events_waits_historyevents_waits_history_long 資料表分別是已結束的最近等待事件的集合,每個執行緒和全域所有執行緒都有最大列數限制。

如需有關三個等待事件資料表之間關係的更多資訊,請參閱章節 29.9,「Performance Schema 目前和歷史事件資料表」

如需有關設定是否收集等待事件的資訊,請參閱章節 29.12.4,「Performance Schema 等待事件資料表」

events_waits_current 表格包含以下欄位:

  • THREAD_IDEVENT_ID

    與事件關聯的執行緒,以及事件開始時該執行緒的目前事件編號。 THREAD_IDEVENT_ID 值組合在一起可唯一識別該列。沒有任何兩列具有相同的值對。

  • END_EVENT_ID

    此欄位在事件開始時設定為 NULL,並在事件結束時更新為執行緒的目前事件編號。

  • EVENT_NAME

    產生事件的儀器名稱。這是來自 setup_instruments 表格的 NAME 值。儀器名稱可能包含多個部分,並形成一個階層,如 第 29.6 節,〈效能綱要儀器命名慣例〉 中所述。

  • SOURCE

    包含產生事件的檢測程式碼的來源檔案名稱,以及檔案中發生檢測的行號。這可讓您檢查來源以確定確切涉及的程式碼。例如,如果某個互斥鎖或鎖定被封鎖,您可以檢查此情況發生的上下文。

  • TIMER_STARTTIMER_ENDTIMER_WAIT

    事件的計時資訊。這些值的單位是皮秒(一秒的兆分之一)。TIMER_STARTTIMER_END 值表示事件計時開始和結束的時間。TIMER_WAIT 是事件經過的時間(持續時間)。

    如果事件尚未完成,則 TIMER_END 是目前的計時器值,而 TIMER_WAIT 是目前為止經過的時間(TIMER_ENDTIMER_START)。

    如果事件是由具有 TIMED = NO 的儀器產生,則不會收集計時資訊,而且 TIMER_STARTTIMER_ENDTIMER_WAIT 全都是 NULL

    如需關於將皮秒作為事件時間單位以及影響時間值的因素的討論,請參閱第 29.4.1 節,〈效能綱要事件計時〉

  • SPINS

    對於互斥鎖,這是旋轉輪次的數量。如果該值為 NULL,則程式碼不會使用旋轉輪次,或未檢測旋轉。

  • OBJECT_SCHEMAOBJECT_NAMEOBJECT_TYPEOBJECT_INSTANCE_BEGIN

    這些欄位識別 正在被作用的物件。其意義取決於物件類型。

    對於同步物件(condmutexrwlock

    • OBJECT_SCHEMAOBJECT_NAMEOBJECT_TYPENULL

    • OBJECT_INSTANCE_BEGIN 是記憶體中同步物件的位址。

    對於檔案 I/O 物件

    • OBJECT_SCHEMANULL

    • OBJECT_NAME 是檔案名稱。

    • OBJECT_TYPEFILE

    • OBJECT_INSTANCE_BEGIN 是記憶體中的位址。

    對於通訊端物件

    • OBJECT_NAME 是通訊端的 IP:PORT 值。

    • OBJECT_INSTANCE_BEGIN 是記憶體中的位址。

    對於資料表 I/O 物件

    • OBJECT_SCHEMA 是包含資料表的綱要名稱。

    • OBJECT_NAME 是資料表名稱。

    • OBJECT_TYPE 對於永久基底資料表是 TABLE,對於暫時資料表是 TEMPORARY TABLE

    • OBJECT_INSTANCE_BEGIN 是記憶體中的位址。

    OBJECT_INSTANCE_BEGIN 值本身沒有任何意義,除非不同的值表示不同的物件。 OBJECT_INSTANCE_BEGIN 可用於偵錯。例如,它可以與 GROUP BY OBJECT_INSTANCE_BEGIN 搭配使用,以查看 1,000 個互斥鎖(例如,保護 1,000 個資料頁面或區塊)的負載是否平均分散,還是只集中在少數幾個瓶頸。如果您在記錄檔或其他偵錯或效能工具中看到相同的物件位址,這可以幫助您與其他資訊來源建立關聯。

  • INDEX_NAME

    所使用索引的名稱。PRIMARY 表示資料表主索引。NULL 表示未使用任何索引。

  • NESTING_EVENT_ID

    此事件所巢狀於其中的事件的 EVENT_ID 值。

  • NESTING_EVENT_TYPE

    巢狀事件類型。值為 TRANSACTIONSTATEMENTSTAGEWAIT

  • OPERATION

    執行的操作類型,例如 lockreadwrite

  • NUMBER_OF_BYTES

    操作讀取或寫入的位元組數。對於資料表 I/O 等候(wait/io/table/sql/handler 儀器的事件),NUMBER_OF_BYTES 表示資料列數。如果該值大於 1,則事件為批次 I/O 操作。以下討論描述了獨有的單列報告與反映批次 I/O 的報告之間的差異。

    MySQL 使用巢狀迴圈實作來執行聯結。效能綱要儀器的任務是提供聯結中每個資料表的資料列計數和累積執行時間。假設聯結查詢採用以下形式,並使用 t1t2t3 的資料表聯結順序來執行

    SELECT ... FROM t1 JOIN t2 ON ... JOIN t3 ON ...

    資料表扇出是在聯結處理期間,新增資料表時資料列數的增加或減少。如果資料表 t3 的扇出大於 1,則大多數資料列提取操作都是針對該資料表。假設聯結從 t1 存取 10 列,從 t2 存取每一列 t1 20 列,以及從 t3 存取每一列資料表 t2 30 列。使用單列報告,檢測操作的總數為

    10 + (10 * 20) + (10 * 20 * 30) = 6210

    如果按掃描彙總檢測的操作(也就是按 t1t2 資料列的唯一組合),則檢測操作的數量可以大幅減少。使用批次 I/O 報告,效能綱要會為最內層資料表 t3 的每次掃描產生一個事件,而不是為每個資料列產生一個事件,而檢測的資料列操作次數會減少為

    10 + (10 * 20) + (10 * 20) = 410

    減少了 93%,這說明了批次報告策略如何透過減少報告呼叫次數,大幅降低效能綱要針對資料表 I/O 的額外負荷。其缺點是事件計時的精確度降低。相較於每個資料列報告中個別資料列操作的時間,批次 I/O 的計時包含用於聯結緩衝、彙總以及將資料列返回給用戶端等操作所花費的時間。

    若要發生批次 I/O 報告,必須符合以下條件

    • 查詢執行會存取查詢區塊的最內層資料表(對於單資料表查詢,該資料表會計為最內層資料表)

    • 查詢執行不會從資料表請求單一資料列(因此,例如,eq_ref 存取會防止使用批次報告)

    • 查詢執行不會評估包含資料表存取之資料表的子查詢

  • FLAGS

    保留供未來使用。

events_waits_current 資料表具有以下索引

  • 在 (THREAD_ID, EVENT_ID) 上的主鍵

允許針對 events_waits_current 資料表使用 TRUNCATE TABLE。這會移除資料列。