Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Performance Schema Connection Tables

29.12.8 性能模式连接表

当客户端连接到 MySQL 服务器时,它会以特定的用户名和主机名连接。性能模式提供了这些连接的统计信息,追踪每个账户(用户名和主机名组合)以及单独的用户名和主机名,使用这些表:

  • accounts:每个客户端账户的连接统计信息

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

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

在连接表中的“账户”概念与 MySQL 授权表中的概念相似,都是指用户名和主机名的组合。但是,授权表中的主机部分可以是一个模式,而性能模式表中的主机值总是一个特定的非模式主机名。

每个连接表都有 CURRENT_CONNECTIONSTOTAL_CONNECTIONS 列,以追踪当前和总连接数,每个表的统计信息基于不同的跟踪值。 accounts 表有 USERHOST 列,以追踪每个用户名和主机名组合的连接。 usershosts 表分别有 USERHOST 列,以追踪每个用户名和主机名的连接。

性能模式还统计内部线程和未经身份验证的用户会话,使用 USERHOST 列值为 NULL 的行。

假设客户端 user1user2 各连接一次来自 hostahostb。性能模式将连接追踪如下:

  • accounts 表有四行,分别对应 user1/hostauser1/hostbuser2/hostauser2/hostb 账户值,每行统计一个账户的连接。

  • hosts 表有两行,分别对应 hostahostb,每行统计两个主机名的连接。

  • users 表有两行,分别对应 user1user2,每行统计两个用户名的连接。

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

当客户端断开连接时,性能模式将 CURRENT_CONNECTIONS 列的值减一,并保持 TOTAL_CONNECTIONS 列的值不变。

TRUNCATE TABLE 在连接表中是允许的。它具有以下效果:

  • 删除没有当前连接(行 CURRENT_CONNECTIONS = 0)的账户、主机或用户的行。

  • 未删除的行将重置为仅计数当前连接:TOTAL_CONNECTIONS 将被重置为 CURRENT_CONNECTIONS,对于行 CURRENT_CONNECTIONS > 0

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

性能模式维护着汇总表,以聚合连接统计信息,按账户、主机或用户分类。这些表的名称中包含 _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 在连接汇总表中是允许的。它删除没有连接的账户、主机或用户的行,并将汇总列重置为零,剩余的行。

表 29.2 连接表截断的隐式效果

Truncated Connection Table Implicitly Truncated Summary Tables
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 将隐式截断按账户、主机、用户或线程分类的等待事件汇总表。