#### 27.12.4.1 事件\_等待\_当前表

[](<>)[](<>)

这[`events_waits_current`](performance-schema-events-waits-current-table.html)表包含当前等待事件。该表为每个线程存储一行，显示线程最近监控的等待事件的当前状态，因此没有用于配置表大小的系统变量。

在包含等待事件行的表中，[`events_waits_current`](performance-schema-events-waits-current-table.html)是最根本的。包含等待事件行的其他表在逻辑上是从当前事件派生的。例如，[`events_waits_history`](performance-schema-events-waits-history-table.html)和[`events_waits_history_long`](performance-schema-events-waits-history-long-table.html)表是最近结束的等待事件的集合，分别达到每个线程和全局所有线程的最大行数。

有关三个等待事件表之间关系的更多信息，请参阅[第 27.9 节，“当前和历史事件的性能模式表”](performance-schema-event-tables.html).

有关配置是否收集等待事件的信息，请参阅[第 27.12.4 节，“性能模式等待事件表”](performance-schema-wait-tables.html).

这[`events_waits_current`](performance-schema-events-waits-current-table.html)表有这些列：

-   `THREAD_ID`,`EVENT_ID`

    事件启动时与事件关联的线程和线程当前事件编号。这`THREAD_ID`和`EVENT_ID`加在一起的值唯一地标识该行。没有两行具有相同的一对值。

-   `END_EVENT_ID`

    此列设置为`空值`当事件开始并更新为事件结束时的线程当前事件号。

-   `EVENT_NAME`

    产生事件的工具的名称。这是一个`姓名`从价值[`setup_instruments`](performance-schema-setup-instruments-table.html)桌子。仪器名称可能有多个部分并形成层次结构，如在[第 27.6 节，“性能模式仪器命名约定”](performance-schema-instrument-naming.html).

-   `资源`

    包含产生事件的检测代码的源文件的名称和检测发生的文件中的行号。这使您能够检查源代码以确定所涉及的确切代码。例如，如果互斥锁或锁被阻塞，您可以检查发生这种情况的上下文。

-   `TIMER_START`,`TIMER_END`,`TIMER_WAIT`

    事件的时间信息。这些值的单位是皮秒（万亿分之一秒）。这`TIMER_START`和`TIMER_END`值指示事件计时开始和结束的时间。`TIMER_WAIT`是事件经过的时间（持续时间）。

    如果活动还没有结束，`TIMER_END`是当前计时器值，并且`TIMER_WAIT`是到目前为止经过的时间（`TIMER_END`-`TIMER_START`）。

    如果事件是从具有`定时 = 否`，不收集计时信息，并且`TIMER_START`,`TIMER_END`， 和`TIMER_WAIT`都是`空值`.

    有关以皮秒为单位的事件时间和影响时间值的因素的讨论，请参阅[第 27.4.1 节，“性能模式事件时序”](performance-schema-timing.html).

-   `旋转`

    对于互斥体，旋转轮数。如果值为`空值`，代码不使用旋转轮或旋转未检测。

-   `OBJECT_SCHEMA`,`对象名称`,`对象类型`,`对象\u实例\u开始`

    这些列标识“被操作”的对象这意味着什么取决于对象类型。

    对于同步对象(`康德`,`互斥`,`rwlock`):

    -   `对象模式`,`对象名称`和`对象类型`是`无效的`.

    -   `对象\u实例\u开始`是内存中同步对象的地址。

        对于文件I/O对象：

    -   `对象模式`是`无效的`.

    -   `对象名称`是文件名。

    -   `对象类型`是`文件`.

    -   `对象\u实例\u开始`是内存中的地址。

        对于套接字对象：

    -   `对象名称`是吗`IP:端口`套接字的值。

    -   `对象\u实例\u开始`是内存中的地址。

        对于表I/O对象：

    -   `对象模式`是包含该表的架构的名称。

    -   `对象名称`是表名。

    -   `对象类型`是`桌子`对于持久基表或`临时桌`找张临时桌子。

    -   `对象\u实例\u开始`是内存中的地址。

        一`对象\u实例\u开始`值本身没有意义，只是不同的值表示不同的对象。`对象\u实例\u开始`可以用于调试。例如，它可以与`按对象分组\u实例\u开始`查看1000个互斥体（保护1000页或1000块数据）上的负载是均匀分布的，还是只是遇到了几个瓶颈。如果在日志文件或其他调试或性能工具中看到相同的对象地址，这可以帮助您与其他信息源关联。

-   `索引名称`

    使用的索引的名称。`主要的，重要的`指示表的主索引。`无效的`这意味着没有使用索引。

-   `嵌套事件ID`

    这个`事件ID`嵌套此事件的事件的值。

-   `嵌套事件类型`

    嵌套事件类型。价值是`交易`, `陈述`, `阶段`或`等待`.

-   `活动`

    执行的操作类型，例如`锁`, `阅读`或`写`.

-   `字节数`

    操作读取或写入的字节数。对于表I/O等待（用于`wait/io/table/sql/handler`仪器），`字节数`指示行数。如果该值大于1，则该事件适用于批处理I/O操作。下面的讨论描述了独占单行报告和反映批处理I/O的报告之间的区别。

    MySQL使用嵌套循环实现执行连接。性能模式检测的任务是提供联接中每个表的行计数和累计执行时间。假设使用表联接顺序执行以下形式的联接查询：`t1`, `t2`, `t3`:

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

    表“fanout”是在连接处理期间添加表所增加或减少的行数。如果扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形扇形`t3`大于1时，大多数行提取操作都是针对该表的。假设join从中访问10行`t1`，距`t2`每行从`t1`，距`t3`每排桌子`t2`.对于单行报告，仪表化操作的总数为：

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

    通过每次扫描（即，每次扫描中的行的唯一组合）将指令化操作的数量进行聚合，可以显著减少指令化操作的数量`t1`和`t2`)。对于批处理I/O报告，性能模式会为最内层表的每次扫描生成一个事件`t3`而不是针对每一行，并且插入指令的行操作的数量减少到：

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

    这减少了93%，说明了批处理报告策略如何通过减少报告调用的数量来显著降低表I/O的性能模式开销。折衷是事件计时的准确性较低。与按行报告中的单个行操作时间不同，批处理I/O的计时包括连接缓冲、聚合和将行返回到客户端等操作所花费的时间。

    要进行批量I/O报告，必须满足以下条件：

    -   查询执行访问查询块的最里面的表（对于单个表查询，该表算作最里面的表）

    -   查询执行不会从表中请求一行（例如，[`eq_ref`](explain-output.html#jointype_eq_ref)访问阻止使用批处理报告）

    -   查询执行不会计算包含表访问权限的子查询

-   `旗帜`

    留作将来使用。

    这个[`事件_等待_当前`](performance-schema-events-waits-current-table.html)表中有以下索引：

-   主键打开(`线程ID`, `事件ID`)

[`截断表`](truncate-table.html)是允许的[`事件_等待_当前`](performance-schema-events-waits-current-table.html)桌子它会删除行。
