global_status与session_status - xiaoboluo768/mysql-system-schema GitHub Wiki
-
MySQL server维护着许多状态变量,提供有关其内部相关操作的信息。如下一些performance_schema表中记录着状态变量信息:
- global_status:全局状态变量。如果只需要全局状态变量值的应用程序可以查询此表,中断的会话状态变量值会被聚合在此表中
- session_status:当前会话的状态变量。如果只希望查询自己会话的所有状态变量值的应用程序可以查询此表(注意:该表包含没有会话级别的全局状态变量),只记录活跃会话,不记录已中断的会话
- status_by_thread:按照线程ID作为标识符记录每个活跃会话的状态变量。如果需要在某个会话中查询其他会话的状态变量值可以查询此表(注意:该表不包含只具有全局级别的状态变量),只记录活跃会话,不记录中断的会话
- 状态变量汇总表,提供按帐户,主机名和用户名聚合的状态变量信息。详见后续章节
-
performance_schema执行状态变量收集时,对于全局级别的状态变量,如果threads表中INSTRUMENTED列值为“yes”则执行收集,否则不收集。但对于会话级别的状态变量,无论threads表的INSTRUMENTED字段值是否为yes,始终执行收集
-
performance_schema不会在状态变量表中收集Com_xxx状态变量的统计信息。要获取全局和每个会话语句的相关执行计数,请分别使用events_statements_summary_global_by_event_name和events_statements_summary_by_thread_by_event_name表进行查询。例如:SELECT EVENT_NAME, COUNT_STAR FROM events_statements_summary_global_by_event_name WHERE EVENT_NAME LIKE 'statement/sql/%';
-
global_status和session_status表字段含义如下:
- VARIABLE_NAME:状态变量名称
- VARIABLE_VALUE:状态变量值。对于global_status,此列包含全局状态变量值。对于session_status,此列包含当前会话的状态变量值(同时包含无会话级别的全局状态变量值,且只包含活跃会话的状态变量值)。
-
status_by_thread表包含每个活跃线程的状态。字段含义如下:
- THREAD_ID:与该状态变量相关联的线程ID
- VARIABLE_NAME:有会话级别的状态变量名称
- VARIABLE_VALUE:与线程ID相关的会话级别状态变量值
-
status_by_thread表仅包含前台线程的状态变量信息。该表记录数量自动计算,不建议手工指定系统变量perform_schema_max_thread_instances的值,如果手工指定,务必要大于后台线程数量*2,否则可能造成因为该变量的限制没有足够的intruments thread instances容量导致无法创建,进而无法监控前台线程的状态变量统计信息,如果无法监控前台线程的状态变量统计信息时,该表为空
-
performance_schema允许对这些状态变量信息统计表执行TRUNCATE TABLE语句:
- global_status:执行truncate会重置线程、帐户、主机、用户相关的全局状态变量值,但不会重置一些从不重置的全局状态变量值,同时会影响到status_by_account表中的状态变量值
- session_status:不支持执行truncate语句
- status_by_thread:将所有线程的状态变量值聚合到全局状态变量表(global_status)和帐户状态变量表(status_by_account),然后重置线程状态变量表。如果不收集帐户相关的统计信息,则会在status_by_user和status_by_host中单独收集主机和用户的状态变量值,是否收集host,user,account的状态变量值,可以使用系统变量performance_schema_accounts_size,performance_schema_hosts_size和performance_schema_users_size在server启动之前分别进行设置,设置为0,则表示不收集,大于0则表示要收集(注意,这些系统变量原本是用于控制accounts、hosts、users表中的行数,但是status_by_account,status_by_user,status_by_host中的account,user,host值是来自于accounts、hosts、users表,so...你懂的)
-
FLUSH STATUS语句会把所有活跃会话的状态变量值聚合到全局状态变量值中,然后重置所有活跃会话的状态变量值,并在account,host和user状态变量对应的统计表中重置已断开连接的状态变量聚合值
-
PS:show_compatibility_56系统变量的值会影响这些表中的信息记录,详见链接:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_show_compatibility_56
-
表记录内容示例
# global_status表
admin@localhost : performance_schema 11:01:51> select * from global_status limit 5;
+----------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+----------------------------+----------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use | 0 |
| Binlog_stmt_cache_disk_use | 0 |
+----------------------------+----------------+
5 rows in set (0.00 sec)
# session_status表
admin@localhost : performance_schema 11:02:21> select * from session_status limit 5;
+----------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+----------------------------+----------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use | 0 |
| Binlog_stmt_cache_disk_use | 0 |
+----------------------------+----------------+
5 rows in set (0.00 sec)
# status_by_thread 表
admin@localhost : performance_schema 11:02:49> select * from status_by_thread limit 5;
+-----------+-------------------------+----------------+
| THREAD_ID | VARIABLE_NAME | VARIABLE_VALUE |
+-----------+-------------------------+----------------+
| 45 | Bytes_received | 0 |
| 45 | Bytes_sent | 2901 |
| 45 | Com_stmt_reprepare | 0 |
| 45 | Compression | OFF |
| 45 | Created_tmp_disk_tables | 0 |
+-----------+-------------------------+----------------+
5 rows in set (0.00 sec)
- 表结构定义
# global_status表
CREATE TABLE `global_status` (
`VARIABLE_NAME` varchar(64) NOT NULL,
`VARIABLE_VALUE` varchar(1024) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
# session_status表
CREATE TABLE `session_status` (
`VARIABLE_NAME` varchar(64) NOT NULL,
`VARIABLE_VALUE` varchar(1024) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
# status_by_thread 表
CREATE TABLE `status_by_thread` (
`THREAD_ID` bigint(20) unsigned NOT NULL,
`VARIABLE_NAME` varchar(64) NOT NULL,
`VARIABLE_VALUE` varchar(1024) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
上一篇: global_variables与session_variables表 | 下一篇: summary tables