Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  MySQL Performance Schema  /  Performance Schema Tables for Current and Historical Events

29.9 性能方案表格用于当前和历史事件

对于等待、阶段、语句和事务事件,性能方案可以监控并存储当前事件。此外,当事件结束时,性能方案也可以将它们存储在历史表中。对于每种事件类型,性能方案使用三个表来存储当前和历史事件。这些表的名称采用以下形式,其中 xxx 表示事件类型(waitsstagesstatementstransactions):

  • events_xxx_current: 当前事件表格存储当前监控的事件对于每个线程(每个线程一行)。

  • events_xxx_history: 历史最近事件表格存储每个线程结束的最 recent 事件(每个线程至多有一个最大行数)。

  • events_xxx_history_长: 历史长事件表格存储所有线程结束的最 recent 事件(跨越所有线程,至多有一个最大行数)。

每种事件类型的 _current 表格中都有一行对应于每个线程,因此没有系统变量用于配置其最大大小。性能方案会自动调整历史表的大小,或者可以在服务器启动时使用特定于表的系统变量来显式配置它们的大小,如各个历史表的描述部分所述。典型的自动调整值为每个 _history 表格 10 行对应于每个线程,以及 _history_长 表格总共 10,000 行。

对于每种事件类型,_current_history_history_长 表格都有相同的列。_current_history 表格具有相同的索引。_history_长 表格没有索引。

_current 表格显示服务器当前正在发生的事情。当一个当前事件结束时,它会从其 _current 表格中被移除。

_history_history_长 表格显示了过去近期发生的事情。当历史表格满时,旧事件会被丢弃以便添加新事件。行从 _history_history_长 表格中以不同的方式过期,因为这两个表格具有不同的目的:

  • _history 用于独立于全局服务器负载来调查每个线程。

  • _history_长 用于全球性调查,不是针对每个线程。

这两个历史表格类型之间的差异与数据保留策略有关。两种表格在事件首次出现时包含相同的数据。然而,随着时间的推移,每种表格中的数据会以不同的方式过期,因此每种表格中可能保留数据的时间长度不同:

  • 对于 _history,当表格为给定线程的最大行数时,最老的线程行在添加新行时被丢弃。

  • 对于 _history_长,当表格满时,无论哪个线程生成了新行或旧行,都会丢弃最老的一行。

当一个线程结束时,它的所有行都会从 _history 表格中被移除,但不会从 _history_长 表格中移除。

以下是一个说明这两个类型历史表格如何添加和丢弃事件的例子。这些原则适用于所有事件类型。这个例子基于以下假设:

  • 性能方案配置为在 _history 表格中保留每个线程 10 行,在 _history_长 表格中保留总共 10,000 行。

  • 线程 A 每秒生成 1 个事件。

    线程 B 每秒生成 100 个事件。

  • 没有其他线程正在运行。

执行了 5 秒后:

  • A 和 B 分别生成了 5 和 500 个事件。

  • _history 包含 A 的 5 行和 B 的 10 行。由于每个线程的存储量限制为 10 行,对于 A 没有行被丢弃,而对于 B 则丢弃了 490 行。

  • _history_长 包含 A 的 5 行和 B 的 500 行。由于表格的最大大小为 10,000 行,对于任何线程都没有行被丢弃。

执行了 5 分钟(300 秒)后:

  • A 和 B 分别生成了 300 和 30,000 个事件。

  • _history表中对于A和B各有10行记录。由于每个线程的存储空间有限,只能保留10行,因此对于A有290行记录被丢弃,而对于B有29,990行记录被丢弃。A的记录包含了10秒以内的数据,而B的记录只包含了0.1秒以内的数据。

  • _history_long表中共有10,000行记录。由于A和B总共每秒产生101个事件,这个表中的数据最多保留到大约99秒前,记录中大约有100:1的比例是B相对于A。