Documentation Home

27.12.8 性能模式连接表

当客户端连接到 MySQL 服务器时,它会使用特定的用户名和特定的主机进行连接。Performance Schema 提供有关这些连接的统计信息,使用这些表按帐户(用户和主机组合)以及按用户名和主机名单独跟踪它们:

  • accounts:每个客户帐户的连接统计

  • hosts:每个客户端主机名的连接统计

  • users:每个客户端用户名的连接统计

连接表中“帐户 的含义类似于 mysql系统数据库中 MySQL 授权表中的含义,在这个意义上,该术语指的是用户和主机值的组合。它们的不同之处在于,对于授权表,帐户的主机部分可以是模式,而对于性能模式表,主机值始终是特定的非模式主机名。

每个连接表都有CURRENT_CONNECTIONS 和列来跟踪每个跟踪值TOTAL_CONNECTIONS的当前连接数和总连接数,其统计信息基于此。这些表的不同之处在于它们用于跟踪值的内容。该 表有 和列来跟踪每个用户和主机组合的连接。和 表分别有一个 和 列,用于跟踪每个用户名和主机名的连接。 accountsUSERHOSTusershostsUSERHOST

Performance Schema 还计算内部线程和未通过身份验证的用户会话的线程, USER使用HOST具有NULL.

假设名为user1和 的客户端分别从和user2连接一次 。性能模式跟踪连接如下: hostahostb

  • accounts表有四行,用于 user1/ hostauser1/ hostbuser2/hostauser2/hostb帐户值,每行计算每个帐户一个连接。

  • hosts表有两行,分别为hostahostb,每行为每个主机名计算两个连接。

  • users表有两行,分别为user1user2,每行为每个用户名计算两个连接。

当客户端连接时,性能模式使用适合每个表的跟踪值来确定每个连接表中的哪一行适用。如果没有这样的行,则添加一个。然后 Performance Schema 在该行中增加一个 CURRENT_CONNECTIONSTOTAL_CONNECTIONS列。

当客户端断开连接时,Performance SchemaCURRENT_CONNECTIONS将行中的列递减一个并保持该TOTAL_CONNECTIONS列不变。

TRUNCATE TABLE允许用于连接表。它具有以下效果:

  • 对于没有当前连接的帐户、主机或用户(带有 的行CURRENT_CONNECTIONS = 0),行已删除。

  • 未删除的行被重置为仅计算当前连接:对于带有 的行CURRENT_CONNECTIONS > 0TOTAL_CONNECTIONS重置为 CURRENT_CONNECTIONS

  • 依赖于连接表的汇总表被隐式截断,如本节后面所述。

性能模式维护汇总表,按帐户、主机或用户聚合各种事件类型的连接统计信息。这些表的名称中包含 _summary_by_account_summary_by_host_summary_by_user。要识别它们,请使用此查询:

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
       WHERE TABLE_SCHEMA = 'performance_schema'
       AND TABLE_NAME REGEXP '_summary_by_(account|host|user)'
       ORDER BY TABLE_NAME;
+------------------------------------------------------+
| TABLE_NAME                                           |
+------------------------------------------------------+
| events_errors_summary_by_account_by_error            |
| events_errors_summary_by_host_by_error               |
| events_errors_summary_by_user_by_error               |
| events_stages_summary_by_account_by_event_name       |
| events_stages_summary_by_host_by_event_name          |
| events_stages_summary_by_user_by_event_name          |
| events_statements_summary_by_account_by_event_name   |
| events_statements_summary_by_host_by_event_name      |
| events_statements_summary_by_user_by_event_name      |
| events_transactions_summary_by_account_by_event_name |
| events_transactions_summary_by_host_by_event_name    |
| events_transactions_summary_by_user_by_event_name    |
| events_waits_summary_by_account_by_event_name        |
| events_waits_summary_by_host_by_event_name           |
| events_waits_summary_by_user_by_event_name           |
| memory_summary_by_account_by_event_name              |
| memory_summary_by_host_by_event_name                 |
| memory_summary_by_user_by_event_name                 |
+------------------------------------------------------+

有关各个连接摘要表的详细信息,请参阅描述摘要事件类型表的部分:

TRUNCATE TABLE允许用于连接汇总表。它删除没有连接的帐户、主机或用户的行,并将剩余行的摘要列重置为零。此外,每个按帐户、主机、用户或线程聚合的汇总表都会被它所依赖的连接表的截断隐式截断。下表描述了连接表截断和隐式截断表之间的关系。

表 27.2 连接表截断的隐式影响

截断连接表 隐式截断的汇总表
accounts 名称包含_summary_by_account, _summary_by_thread
hosts 名称包含_summary_by_account, _summary_by_host, _summary_by_thread
users 名称包含_summary_by_account, _summary_by_user, _summary_by_thread

截断_summary_global汇总表也会隐式截断其对应的连接和线程汇总表。例如,截断 events_waits_summary_global_by_event_name 会隐式截断按帐户、主机、用户或线程聚合的等待事件摘要表。