MySQL 8.3 Release Notes
对于表I/O事件,通常在 events_waits_current
中有两个行,而不是一个。例如,行fetch可能会导致类似这样的行:
Row# EVENT_NAME TIMER_START TIMER_END
---- ---------- ----------- ---------
1 wait/io/file/myisam/dfile 10001 10002
2 wait/io/table/sql/handler 10000 NULL
行fetch引起文件读取。在示例中,表I/O fetch事件在文件I/O事件之前开始,但尚未完成(其 TIMER_END
值为 NULL
)。文件I/O事件位于表I/O事件内部。
这是因为,与其他 “原子” 等待事件(例如互斥锁或文件I/O)不同,表I/O事件是 “分子” 的,包括(重叠)其他事件。在 events_waits_current
中,表I/O事件通常有两个行:
-
一个行用于最新的表I/O等待事件
-
一个行用于最新的任何类型的等待事件
通常,但不总是, “任何类型” 等待事件不同于表I/O事件。随着每个子事件完成,它从 events_waits_current
中消失。在此点上,直到下一个子事件开始,表I/O等待也是最新的任何类型的等待。