25.8 性能架构原子和分子事件

对于 tableI/O 事件,通常在events_waits_current中有两行,而不是一行。例如,行提取可能会导致如下所示的行:

Row# EVENT_NAME                 TIMER_START TIMER_END
---- ----------                 ----------- ---------
   1 wait/io/file/myisam/dfile        10001 10002
   2 wait/io/table/sql/handler        10000 NULL

行提取导致读取文件。在该示例中,tableI/O 提取事件在文件 I/O 事件之前开始,但尚未完成(其TIMER_END值为NULL)。文件 I/O 事件在 tableI/O 事件内“嵌套”。

发生这种情况的原因是,与其他“原子”await 事件(例如互斥锁或文件 I/O)不同,tableI/O 事件是“分子”事件,并且包括其他事件(与其他事件重叠)。在events_waits_current中,tableI/O 事件通常具有两行:

  • 一行用于最近的 tableI/Oawait 事件

  • 一行用于任何类型的最新 await 事件

通常,但并非总是如此,“任何类型”的 await 事件都与 tableI/O 事件不同。每个子事件完成后,该事件将从events_waits_current消失。此时,直到下一个子事件开始,tableI/Oawait 还是任何类型的最新 await。