25.12.8 性能架构连接 table

当 Client 端连接到 MySQL 服务器时,它以特定的用户名和特定的主机进行连接。性能架构使用以下 table 提供有关这些连接的统计信息,并按帐户(用户和主机组合)以及每个用户名和主机名分别跟踪它们:

  • accounts:每个 Client 帐户的连接统计信息

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

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

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

每个连接 table 都有CURRENT_CONNECTIONSTOTAL_CONNECTIONS列,用于跟踪基于其统计信息的每个“跟踪值”的当前和总数。这些 table 的不同之处在于它们用于跟踪值。 accountstable 具有USERHOST列,以跟踪每个用户和主机组合的连接。 usershoststable 分别具有USERHOST列,以跟踪每个用户名和主机名的连接。

性能架构还使用USERHOST列值为NULL的行来计算内部线程和未通过身份验证的用户会话的线程。

假设名为user1user2的 Client 端分别从hostahostb连接一次。性能架构跟踪连接,如下所示:

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

  • hoststable 有两行,分别用于hostahostb,每行计算每个主机名两个连接。

  • userstable 有两行,分别用于user1user2,每一行计算每个用户名两个连接。

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

当 Client 端断开连接时,性能模式将行中的CURRENT_CONNECTIONS列减一,而使TOTAL_CONNECTIONS列保持不变。

连接 table 允许TRUNCATE TABLE。它具有以下效果:

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

  • 未移除的行将重置为仅计算当前连接:对于具有CURRENT_CONNECTIONS > 0的行,TOTAL_CONNECTIONS重置为CURRENT_CONNECTIONS

  • 如本节后面所述,依赖于连接 table 的摘要 table 被隐式截断。

性能架构维护摘要 table,这些摘要 table 按帐户,主机或用户聚合各种事件类型的连接统计信息。这些 table 的名称中包含_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_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                 |
+------------------------------------------------------+

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

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

table25.2 连接 table 截断的隐式效果

截断的连接 table隐式截断的摘要 table
accounts名称包含_summary_by_account_summary_by_thread的 table
hosts名称包含_summary_by_account_summary_by_host_summary_by_thread的 table
users名称包含_summary_by_account_summary_by_user_summary_by_thread的 table

截断_summary_global摘要 table 也会隐式截断其相应的连接和线程摘要 table。例如,截断events_waits_summary_global_by_event_name会隐式截断按帐户,主机,用户或线程聚合的 await 事件摘要 table。