25.12.8 性能架构连接 table
当 Client 端连接到 MySQL 服务器时,它以特定的用户名和特定的主机进行连接。性能架构使用以下 table 提供有关这些连接的统计信息,并按帐户(用户和主机组合)以及每个用户名和主机名分别跟踪它们:
连接 table 中“帐户”的含义类似于mysql
系统数据库中 MySQL 授权 table 中的含义,在某种意义上,该术语是指用户和主机值的组合。它们的不同之处在于,对于授权 table,帐户的主机部分可以是模式,而对于性能架构 table,主机值始终是特定的非模式主机名。
每个连接 table 都有CURRENT_CONNECTIONS
和TOTAL_CONNECTIONS
列,用于跟踪基于其统计信息的每个“跟踪值”的当前和总数。这些 table 的不同之处在于它们用于跟踪值。 accountstable 具有USER
和HOST
列,以跟踪每个用户和主机组合的连接。 users和hoststable 分别具有USER
和HOST
列,以跟踪每个用户名和主机名的连接。
性能架构还使用USER
和HOST
列值为NULL
的行来计算内部线程和未通过身份验证的用户会话的线程。
假设名为user1
和user2
的 Client 端分别从hosta
和hostb
连接一次。性能架构跟踪连接,如下所示:
-
accountstable 具有四行,分别用于
user1
/hosta
,user1
/hostb
,user2
/hosta
和user2
/hostb
帐户值,每一行计算每个帐户一个连接。 -
hoststable 有两行,分别用于
hosta
和hostb
,每行计算每个主机名两个连接。 -
userstable 有两行,分别用于
user1
和user2
,每一行计算每个用户名两个连接。
当 Client 端连接时,性能模式将使用适合每个 table 的跟踪值来确定每个连接 table 中的哪一行适用。如果没有这样的行,则添加一行。然后,性能模式在该行的CURRENT_CONNECTIONS
和TOTAL_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 中有关摘要事件类型的部分:
-
await 事件摘要:第 25.12.15.1 节,“await 事件摘要 table”
-
舞台活动摘要:第 25.12.15.2 节“阶段摘要 table”
-
声明事件摘要:第 25.12.15.3 节,“语句摘要 table”
-
Transaction 事件摘要:第 25.12.15.4 节“事务摘要 table”
-
内存事件摘要:第 25.12.15.9 节“内存摘要 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。