当客户端连接到 MySQL 服务器时,它会以特定的用户名和主机名连接。性能模式提供了这些连接的统计信息,追踪每个账户(用户名和主机名组合)以及单独的用户名和主机名,使用这些表:
在连接表中的“账户”概念与 MySQL 授权表中的概念相似,都是指用户名和主机名的组合。但是,授权表中的主机部分可以是一个模式,而性能模式表中的主机值总是一个特定的非模式主机名。
每个连接表都有 CURRENT_CONNECTIONS
和 TOTAL_CONNECTIONS
列,以追踪当前和总连接数,每个表的统计信息基于不同的跟踪值。 accounts
表有 USER
和 HOST
列,以追踪每个用户名和主机名组合的连接。 users
和 hosts
表分别有 USER
和 HOST
列,以追踪每个用户名和主机名的连接。
性能模式还统计内部线程和未经身份验证的用户会话,使用 USER
和 HOST
列值为 NULL
的行。
假设客户端 user1
和 user2
各连接一次来自 hosta
和 hostb
。性能模式将连接追踪如下:
当客户端连接时,性能模式确定每个连接表中的哪一行适用,使用适合每个表的跟踪值。如果没有这样的行,则添加一个新的行。然后,性能模式将 CURRENT_CONNECTIONS
和 TOTAL_CONNECTIONS
列的值加一。
当客户端断开连接时,性能模式将 CURRENT_CONNECTIONS
列的值减一,并保持 TOTAL_CONNECTIONS
列的值不变。
TRUNCATE TABLE
在连接表中是允许的。它具有以下效果:
-
删除没有当前连接(行
CURRENT_CONNECTIONS = 0
)的账户、主机或用户的行。 -
未删除的行将重置为仅计数当前连接:
TOTAL_CONNECTIONS
将被重置为CURRENT_CONNECTIONS
,对于行CURRENT_CONNECTIONS > 0
。 -
依赖于连接表的汇总表将被隐式截断,如本节后面所述。
性能模式维护着汇总表,以聚合连接统计信息,按账户、主机或用户分类。这些表的名称中包含 _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 连接表截断的隐式效果
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
将隐式截断按账户、主机、用户或线程分类的等待事件汇总表。