当客户端连接到 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
。依赖于连接表的汇总表将被隐式截断,如本节稍后所述。
Performance 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 |
+------------------------------------------------------+
有关单个连接汇总表的详细信息,请参阅描述汇总事件类型的表格的部分。
等待事件汇总:第 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 连接表截断的隐式影响
被截断的连接表 | 隐式截断的汇总表 |
---|---|
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
会隐式截断按账户、主机、用户或线程汇总的等待事件汇总表。