当客户端连接到 MySQL 服务器时,它使用特定的用户名从特定的主机进行连接。性能模式提供有关这些连接的统计信息,使用以下表按帐户(用户和主机组合)以及分别按用户名和主机名跟踪它们:
连接表中的“帐户”的含义与 mysql
系统数据库中 MySQL 授权表中的含义相似,因为该术语指的是用户和主机值的组合。它们的不同之处在于,对于授权表,帐户的主机部分可以是模式,而对于性能模式表,主机值始终是特定的非模式主机名。
每个连接表都有 CURRENT_CONNECTIONS
和 TOTAL_CONNECTIONS
列,用于跟踪其统计信息所基于的每个“跟踪值”的当前连接数和总连接数。这些表的不同之处在于它们使用的跟踪值。 accounts
表具有 USER
和 HOST
列,用于跟踪每个用户和主机组合的连接。 users
和 hosts
表分别具有 USER
和 HOST
列,用于跟踪每个用户名和主机名的连接。
性能模式还使用 USER
和 HOST
列值为 NULL
的行来统计内部线程和身份验证失败的用户会话的线程。
假设名为 user1
和 user2
的客户端分别从 hosta
和 hostb
连接一次。性能模式按如下方式跟踪连接:
当客户端连接时,性能模式使用适用于每个表的跟踪值来确定每个连接表中应用哪一行。如果没有这样的行,则添加一行。然后,性能模式将该行中的 CURRENT_CONNECTIONS
和 TOTAL_CONNECTIONS
列加 1。
当客户端断开连接时,性能模式将该行中的 CURRENT_CONNECTIONS
列减 1,并保持 TOTAL_CONNECTIONS
列不变。
允许对连接表执行 TRUNCATE TABLE
操作。它具有以下效果:
对于没有当前连接的账户、主机或用户(
CURRENT_CONNECTIONS = 0
的行),将删除这些行。未删除的行将重置为仅统计当前连接数:对于
CURRENT_CONNECTIONS > 0
的行,TOTAL_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 |
+------------------------------------------------------+
有关各个连接汇总表的详细信息,请参阅描述汇总事件类型的表的章节
等待事件摘要:第 29.12.20.1 节,“等待事件汇总表”
阶段事件摘要:第 29.12.20.2 节,“阶段汇总表”
语句事件摘要:第 29.12.20.3 节,“语句汇总表”
事务事件摘要:第 29.12.20.5 节,“事务汇总表”
内存事件摘要:第 29.12.20.10 节,“内存汇总表”
错误事件摘要:第 29.12.20.11 节,“错误汇总表”
允许对连接汇总表执行 TRUNCATE TABLE
操作。它将删除没有连接的账户、主机或用户的行,并将剩余行的汇总列重置为零。此外,通过截断其依赖的连接表,将隐式截断按账户、主机、用户或线程聚合的每个汇总表。下表描述了连接表截断与隐式截断表之间的关系。
表 29.2 连接表截断的隐式影响
截断的连接表 | 隐式截断的汇总表 |
---|---|
账户 |
名称包含 _summary_by_account 、_summary_by_thread 的表 |
主机 |
名称包含 _summary_by_account 、_summary_by_host 、_summary_by_thread 的表 |
用户 |
名称包含 _summary_by_account 、_summary_by_user 、_summary_by_thread 的表 |
截断 _summary_global
汇总表还会隐式截断其对应的连接和线程汇总表。例如,截断 events_waits_summary_global_by_event_name
会隐式截断按账户、主机、用户或线程聚合的等待事件汇总表。