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 隐式地截断了根据帐户、主机、用户或线程聚合的等待事件总结表。