-
Notifications
You must be signed in to change notification settings - Fork 111
connection tables
-
当客户端连接到MySQL server时,它的用户名和主机名都是特定的。performance_schema按照帐号、主机、用户名对这些连接的统计信息进行分类并保存到各个分类的连接信息表中,如下:
- accounts:按照user@host的形式来对每个客户端的连接进行统计
- hosts:按照host名称对每个客户端连接进行统计
- users:按照用户名对每个客户端连接进行统计
-
连接信息表accounts中的user和host字段含义与mysql系统数据库中的MySQL grant表(user表)中的字段含义类似
-
每个连接信息表都有CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列,用于跟踪连接的当前连接数和总连接数。对于accounts表,每个连接在表中每行信息的唯一标识为USER+HOST,但是对于users表,只有一个user字段进行标识,而hosts表只有一个host字段用于标识
-
performance_schema还统计后台线程和无法验证用户的连接,对于这些连接统计行信息,USER和HOST列值为NULL
-
假设有user1和user2的用户从主机hosta和hostb分别连接一次。则performance_schema跟踪的统计信息在连接表中记录的内容如下:
- accounts表有会记录4行,分别为:user=user1,host=hosta、user=user1,host=hostb、user=user2,host=hosta、user=user2,host=hostb
- hosts表会记录2行,分别为:host=hosta、host=hostb
- users表会记录2行,分别为:user=user1、user=user2
-
当客户端与server端建立连接时,performance_schema使用适合每个表的唯一标识值来确定每个连接表中如何进行记录。如果缺少对应标识值的行,则新添加一行。然后,performance_schema会增加该行中的CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列值
-
当客户端断开连接时,performance_schema将减少对应连接的行中的CURRENT_CONNECTIONS列,保留TOTAL_CONNECTIONS列值
-
这些连接表都允许使用TRUNCATE TABLE语句
- 当行信息中CURRENT_CONNECTIONS 字段值为0时,执行truncate语句会删除这些行
- 当行信息中CURRENT_CONNECTIONS 字段值大于0时,执行truncate语句不会删除这些行,TOTAL_CONNECTIONS字段值被重置为CURRENT_CONNECTIONS字段值
- 依赖于连接表中信息的summary表在对这些连接表执行truncate时会同时被隐式地执行truncate
-
performance_schema维护着按照accounts,hosts或users聚合各种事件类型的连接统计信息汇总表。这些表在名称包括:_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_waits_summary_by_account_by_event_name |
| events_waits_summary_by_host_by_event_name |
| events_waits_summary_by_user_by_event_name |
+----------------------------------------------------+
9 rows in set (0.00 sec)
- 有关各个连接汇总表的详细信息,详见后续章节
- 连接汇总信息表允许使用TRUNCATE TABLE。它会同时删除汇总表中没有连接的帐户,主机或用户对应的行,重置有连接的帐户,主机或用户对应的行的并将其他行的CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列值
truncate连接表 | 隐式truncate汇总表 |
---|---|
accounts | Tables with names containing _summary_by_account, _summary_by_thread |
hosts | Tables with names containing _summary_by_account, _summary_by_host, _summary_by_thread |
users | Tables with names containing _summary_by_account, _summary_by_user, _summary_by_thread |
-
truncate *_summary_global汇总表也会隐式地truncate其对应的连接和线程汇总表中的信息。例如:truncate events_waits_summary_global_by_event_name会隐式地truncate按照帐户,主机,用户或线程聚合的等待事件汇总表
-
参考链接:https://dev.mysql.com/doc/refman/5.7/en/performance-schema-connection-tables.html
上一篇: events_transactions_history_long表 | 下一篇: accounts表
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!