• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • events_waits_current表

    events_waits_current表包含当前的等待事件。该表为每个线程存储一行,以显示该线程最近监视的等待事件的当前状态,因此没有用于配置表大小的系统变量。

    在包含等待事件行的表中,这events_waits_current是最基本的。包含等待事件行的其他表在逻辑上是从当前事件派生的。例如,events_waits_historyevents_waits_history_long表是已结束的最近等待事件的集合,每个线程的最大行数分别是所有线程的最大行数。

    有关三个等待事件表之间的关系的更多信息,请参见“当前和历史事件的性能架构表”。

    有关配置是否收集等待事件的信息,请参见“性能架构等待事件表”。

    events_waits_current表包含以下列:

    • THREAD_IDEVENT_ID

      与事件关联的线程以及事件开始时的线程当前事件号。在THREAD_IDEVENT_ID一起值唯一标识行。没有两行具有相同的一对值。

    • END_EVENT_ID

      此列设置为NULL事件开始时的时间,并在事件结束时更新为线程的当前事件号。

    • EVENT_NAME

      产生事件的仪器的名称。这是表中的NAMEsetup_instruments。仪器名称可能具有多个部分,并形成一个层次结构,如“性能模式仪器命名约定”中所述。

    • SOURCE

      源文件的名称,其中包含产生事件的检测代码以及发生检测的文件中的行号。这使您可以检查源以确定确切涉及的代码。例如,如果某个互斥锁或锁被阻止,则可以检查发生这种情况的上下文。

    • TIMER_STARTTIMER_ENDTIMER_WAIT

      事件的时间信息。这些值的单位是皮秒(万亿分之一秒)。在TIMER_STARTTIMER_END当事件时间开始和结束的值表示。TIMER_WAIT是事件经过的时间(持续时间)。

      如果事件尚未结束,TIMER_END则为当前计时器值,并且TIMER_WAIT为到目前为止的时间(TIMER_END-TIMER_START)。

      如果事件是从具有产生仪器TIMED = NO,定时信息不是收集,并且TIMER_STARTTIMER_END以及TIMER_WAIT是所有NULL

      有关以皮秒为单位的事件时间和影响时间值的因素的讨论,请参见“性能模式事件时序”。

    • 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_NAMEIP:PORT套接字的值。
      • OBJECT_INSTANCE_BEGIN是内存中的地址。

      对于表I / O对象:

      • OBJECT_SCHEMA是包含表的模式的名称。
      • OBJECT_NAME是表名。
      • OBJECT_TYPETABLE用于持久性基表或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

      嵌套事件类型。值是TRANSACTIONSTATEMENTSTAGE,或WAIT

    • OPERATION

      该类型的操作进行的,例如lockread,或write

    • NUMBER_OF_BYTES

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

      MySQL使用嵌套循环实现执行联接。Performance Schema工具的工作是提供连接中每个表的行数和累积执行时间。假设一个连接正在使用一个表来执行以下形式的查询中的连接顺序t1t2t3

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

      表“扇出”是联接处理期间添加表导致的行数增加或减少。如果表的扇出t3大于1,则大多数行提取操作都针对该表。假设加入访问是从10行t1,20行从t2每行从t1,并从30行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访问阻止使用批处理报告)
      • 查询执行不评估包含对该表的表访问权的子查询
    • FLAGS

      保留以备将来使用。

    events_waits_current表具有以下索引:

    • THREAD_IDEVENT_ID)上的主键

    TRUNCATE TABLE允许用于events_waits_current表格。它删除行。