当客户端连接到MySQL服务器时,它以特定的用户名和特定的主机进行连接。性能架构使用以下表提供有关这些连接的统计信息,并根据帐户(用户和主机组合)以及每个用户名和主机名分别跟踪它们:
- accounts:每个客户帐户的连接统计信息
- hosts:每个客户端主机名的连接统计信息
- users:每个客户端用户名的连接统计信息
连接表中“帐户”的含义类似于mysql系统数据库中MySQL授权表中的含义,从某种意义上来说,该术语是指用户和主机值的组合。它们的区别在于,对于授权表,帐户的主机部分可以是模式,而对于性能架构表,主机值始终是特定的非模式主机名。
每个连接表都有CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列,用于跟踪其统计信息所基于的每个“跟踪值”的当前和总数。这些表的不同之处在于它们用于跟踪值。该accounts表具有USER和HOST列,用于跟踪每个用户和主机组合的连接。所述users和hosts表具有一个USER和HOST柱,分别,以跟踪每个用户名和主机名的连接。
性能架构还使用的行值USER和的HOST列值,对内部线程和未通过身份验证的用户会话的线程进行计数NULL。
假设客户端命名为,user1并且user2每个客户端从hosta和连接一次hostb。性能架构跟踪连接,如下所示:
- 该accounts表有四行,分别用于user1/hosta,user1/hostb,user2/hosta和user2/hostb帐户值,每一行计算每个帐户一个连接。
- 该hosts表有两行,分别是forhosta和hostb,每行计算每个主机名两个连接。
- 该users表有两行,分别是foruser1和user2,每行每个用户名计算两个连接。
客户端连接时,性能模式将使用适合每个表的跟踪值来确定每个连接表中的哪一行适用。如果没有这样的行,则添加一行。然后,性能架构将在该行中的CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列中增加一。
当客户端断开连接时,性能模式CURRENT_CONNECTIONS将行中的列减一,而使该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	|
+------------------------------------------------------	+
有关各个连接摘要表的详细信息,请参阅描述表中有关摘要事件类型的部分:
- 等待事件摘要:“等待事件摘要表”
- 舞台事件摘要:“舞台摘要表”
- 语句事件摘要:“语句摘要表”
- 事务事件摘要:“事务摘要表”
- 内存事件摘要:“内存摘要表”
- 错误事件摘要:“错误摘要表”
TRUNCATE TABLE允许用于连接摘要表。它将删除没有连接的帐户,主机或用户的行,并将其余行的摘要列重置为零。此外,由帐户,主机,用户或线程聚合的每个汇总表都将被其依赖的连接表截断而被隐式截断。下表描述了连接表截断表和隐式截断表之间的关系。
连接表截断的隐式影响
| 截断的连接表 | 隐式截断的摘要表 | 
|---|---|
| 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隐式截断由帐户,主机,用户或线程聚合的等待事件摘要表。
