29.12.8 性能模式连接表
当客户端连接到MySQL服务器时,它会以特定的用户名和主机名进行连接。性能模式提供关于这些连接的统计信息,按账户(用户和主机组合)跟踪,以及分别按用户名和主机名单独跟踪,使用以下表格:
在连接表中,“账户”一词的含义与MySQL授予权限表中的相同,指的是用户和主机值的组合。它们之间的区别在于,对于性能模式表格,主机值始终是一个具体的非模式主机名,而对于授予权限表,主机部分可以是模式。
每个连接表都有CURRENT_CONNECTIONS
和TOTAL_ CONNECTIONS
列来跟踪基于其统计信息的当前和总连接数。表格之间在使用跟踪值方面有所不同。账户
表使用USER
和HOST
列来跟踪每个用户和主机组合的连接。用户
和主机
表分别使用USER
和HOST
列来跟踪每个用户名和主机名的连接。
性能模式还计算内部线程以及用户会话未能认证时的线程数,使用USER
和HOST
列值为NULL
的行。
假设客户端user1
和user2
各自从主机hosta
和hostb
连接一次。性能模式将连接跟踪如下:
-
账户表有四行,分别为
user1/hosta
、user1/hostb
、user2/hosta
和user2/hostb
的账户值,每行计数一次连接。 -
主机表有两行,分别为
hosta
和hostb
,每行计数两次连接。 -
用户表也有两行,分别为
user1
和user2
,每行计数两次连接。
当客户端连接时,性能模式会确定哪个行在每个连接表中适用,使用适合各自表的跟踪值。如果没有这样的行,一行将被添加。然后性能模式将CURRENT_ CONNECTIONS
和TOTAL_ CONNECTIONS
列中的一个增加到该行。
当客户端断开连接时,性能模式会减少CURRENT_ CONNECTIONS
列中的一个,并且将TOTAL_ CONNECTIONS
列保持不变。
TRUNCATE TABLE
对于连接表是允许的。它具有以下效果:
-
移除没有当前连接的帐户、主机或用户的行(即
CURRENT_CONNECTIONS = 0
的行)。 -
未被移除的行将重置为仅计算当前连接:对于
CURRENT_CONNECTIONS > 0
的行,TOTAL_CONNECTIONS
将被重置为CURRENT_CONNECTIONS
。 -
依赖于连接表的总结表将会隐式地被截断,如后续部分所述。
性能_schema 维护了一个聚合连接统计信息的总结表,它们根据帐户、主机或用户进行分类。这些表名中包含 _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 Implicit Effects of Connection Table Truncation
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
隐式地截断了根据帐户、主机、用户或线程聚合的等待事件总结表。