在《语句效率统计视图|全方位认识 sys 系统库》中,为大家介绍了利用sys 系统库查询语句执行效率的快捷视图,本期将为大家介绍一些不便归类的混杂视图,本篇也是该系列中最后一篇介绍视图的文章。
PS:由于本文中所提及的视图功能的特殊性(DBA日常工作中可能需要查询一些信息做一些数据分析使用),所以下文中会列出部分视图中的select语句文本,以便大家更直观地学习。
01
metrics
server的计数指标,包含innodb内部的一些度量、全局状态变量、当前系统时间,默认按照变量类型和名称进行排序,数据来源:performance_schema的global_status、memory_summary_global_by_event_name,information_schema.innodb_metrics、NOW()和UNIX_TIMESTAMP()函数
该视图包含以下几个部分的信息
* 来自performance_schema.global_status表中的全局状态变量名称及其统计值
* 来自information_schema.innodb_metrics表中的innodb指标变量和统计值
* 来自performance_schema内存监控中的当前分配的和总的历史分配内存统计值
* 来自系统当前时间(使用可读格式的unix时间戳)
* PS:global_status表和innodb_metrics表之间存在一些重复的统计值,在metrics视图中去进行去重该视图在MySQL 5.7.9中新增
下面我们看看使用该视图查询返回的结果
admin@localhost : sys 10:49:59> select * from metrics where type='global status' limit 5;
+----------------------------+----------------+---------------+---------+
| Variable_name | Variable_value | Type | Enabled |
+----------------------------+----------------+---------------+---------+
| aborted_clients | 0 | Global Status | YES |
| aborted_connects | 0 | Global Status | YES |
| binlog_cache_disk_use | 0 | Global Status | YES |
| binlog_cache_use | 1159 | Global Status | YES |
| binlog_stmt_cache_disk_use | 0 | Global Status | YES |
+----------------------------+----------------+---------------+---------+
5 rows in set (0.17 sec)
admin@localhost : sys 11:04:01> select * from metrics where type='InnoDB Metrics - transaction' limit 5;
+---------------------------+----------------+------------------------------+---------+
| Variable_name | Variable_value | Type | Enabled |
+---------------------------+----------------+------------------------------+---------+
| trx_active_transactions | 0 | InnoDB Metrics - transaction | NO |
| trx_commits_insert_update | 0 | InnoDB Metrics - transaction | NO |
| trx_nl_ro_commits | 0 | InnoDB Metrics - transaction | NO |
| trx_rollbacks | 0 | InnoDB Metrics - transaction | NO |
| trx_rollbacks_savepoint | 0 | InnoDB Metrics - transaction | NO |
+---------------------------+----------------+------------------------------+---------+
5 rows in set (0.02 sec)
视图字段含义如下:
Variable_name:度量变量名称,度量变量的类型决定了该数据的来源
* 对于全局状态变量,该字段值对应performance_schema.global_status表的 VARIABLE_NAME列
* 对于innodb指标变量,该字段值对应information_schema.innodb_metrics表的NAME列
* 对于来自performance_schema中的内存监控指标,使用metrics视图提供的memory_current_allocated代表当前内存使用量,memory_total_allocated代表总历史内存分配量
* 对于系统时间戳度量,使用now()和unix_timestamp(now())生成的unix格式时间和时间戳Variable_value:度量变量值。度量变量的类型确定了该数据的来源:
* 对于全局状态变量:该字段对应performance_schema.global_status表的VARIABLE_VALUE列
* 对于InnoDB指标变量:该字段对应information_schema.INNODB_METRICS表的COUNT列
* 对于来自performance_schema中的内存监控指标,当前内存使用量和总历史内存分配量分别对performance_schema.memory_summary_global_by_event_name表的CURRENT_NUMBER_OF_BYTES_USED和SUM_NUMBER_OF_BYTES_ALLOC做求和得来
* 对于当前时间值:使用now()和unix_timestamp(now())生成的unix格式时间和时间戳Type:度量变量类型:
* 对于全局状态变量:该列值为 'Global Status'
* 对于InnoDB指标:该列值为 ' InnoDB Metrics - %',其中%号在输出对应的度量变量指标时,使用information_schema.INNODB_METRICS表的SUBSYSTEM列值替换再输出(转换函数: CONCAT('InnoDB Metrics - ', SUBSYSTEM) AS Type)
* 对于performance_schema中监控的内存指标:该列值为 'Performance Schema'
* 对于当前系统时间:该列值为 'System Time'Enabled:度量变量是否启用
* 对于全局状态变量:该列值总是显示为 'Yes'
* 对于InnoDB指标:如果information_schema.INNODB_METRICS表的STATUS列已启用,则该列值显示为'Yes',否则为 'No'
* 对于内存度量:该列值可能的值有NO、YES、PARTIAL(目前,PARTIAL仅用于内存指标,表示未启用所有的内存监控指标,对于performance_schema开头的内存监控指标默认全部启用,无法关闭)
* 对于当前系统时间:该列值总是显示为 'Yes'
PS:关于metrics度量视图,其中涉及到一张information_schema下的innodb_metrics表,其中记录了Innodb引擎的一些细粒度度量单位,大部分默认关闭,可以使用innodb_monitor_disable、innodb_monitor_enable、innodb_monitor_reset、innodb_monitor_reset_all几个系统参数进行开启,关闭,重置计数等操作,详见链接:
https://dev.mysql.com/doc/refman/5.7/en/innodb-metrics-table.html
https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_monitor_reset
02
ps_check_lost_instrumentation
用户查询发生监控丢失的instruments对应的状态变量值,如果查询到非空值,则表示出现了performance_schema无法监控的运行态数据,数据来源:performance_schema.global_status
视图查询语句文本
SELECT variable_name, variable_value
FROM performance_schema.global_status
WHERE variable_name LIKE 'perf%lost'
AND variable_value > 0;
下面我们看看使用该视图查询返回的结果
# 默认设置值可能很难出现监控丢失的情况,如果你需要查看到该视图输出结果,你可以通过调整相关系统变量阀值来实现
admin@localhost : sys 11:11:20> select * from ps_check_lost_instrumentation;
+----------------------------------------+----------------+
| variable_name | variable_value |
+----------------------------------------+----------------+
| Performance_schema_rwlock_classes_lost | 1 |
+----------------------------------------+----------------+
1 row in set (0.00 sec)
视图字段含义如下:
variable_name:“performance_schema”的状态变量名称,以显示哪种类型的instruments监控发生了丢失
variable_value:发生instruments监控丢失的状态变量名称对应的值
03
session_ssl_status
查看SSL链接状态信息(显示重用SSL会话的SSL版本,密码和计数),数据来源:performance_schema.status_by_thread
此视图在MySQL 5.7.9中新增
视图查询语句文本
SELECT sslver.thread_id,
sslver.variable_value ssl_version,
sslcip.variable_value ssl_cipher,
sslreuse.variable_value ssl_sessions_reused
FROM performance_schema.status_by_thread sslver
LEFT JOIN performance_schema.status_by_thread sslcip
ON (sslcip.thread_id=sslver.thread_id and sslcip.variable_name='Ssl_cipher')
LEFT JOIN performance_schema.status_by_thread sslreuse
ON (sslreuse.thread_id=sslver.thread_id and sslreuse.variable_name='Ssl_sessions_reused')
WHERE sslver.variable_name='Ssl_version';
下面我们看看使用该视图查询返回的结果
admin@localhost : sys 12:45:27> select * from session_ssl_status;
+-----------+-------------+------------+---------------------+
| thread_id | ssl_version | ssl_cipher | ssl_sessions_reused |
+-----------+-------------+------------+---------------------+
| 45 | | | 0 |
| 46 | | | 0 |
| 47 | | | 0 |
| 48 | | | 0 |
| 49 | | | 0 |
+-----------+-------------+------------+---------------------+
5 rows in set (0.00 sec)
视图字段含义如下:
thread_id:连接的thread ID
SSL_VERSION:连接使用的SSL版本
ssl_cipher:连接使用的SSL密码,如果客户端使用了ssl连接,则该连接查询到的会话级别该状态变量有类似 'DHE-RSA-AES128-GCM-SHA256' 的字符串值
ssl_sessions_reused:连接重用的SSL会话数(ssl连接可以缓存并给其他支持ssl连接的客户端重用)
04
version
查看当前的sys 系统库和MySQL server版本,数据来源:视图定义语句中的类似select '1.5.1'固定值和version()函数输出
视图查询语句文本
SELECT '1.5.1' AS sys_version,
version() AS mysql_version;
下面我们看看使用该视图查询返回的结果
admin@localhost : sys 12:57:53> select * from version;
+-------------+---------------+
| sys_version | mysql_version |
+-------------+---------------+
| 1.5.1 | 5.7.18-log |
+-------------+---------------+
1 row in set (0.00 sec)
视图字段含义如下
sys_version:sys 系统库版本
mysql_version:MySQL server版本
05
x$ps_digest_95th_percentile_by_avg_us
帮助视图(辅助试图),计算语句百分之九十五的平均执行时间分布值,帮助statements_with_runtimes_in_95th_percentile视图输出语句平均执行时间大于95%平均分布值的语句统计信息,默认按照直方图百分比值排序。数据来源:performance_schema.events_statements_summary_by_digest、sys.x$ps_digest_avg_latency_distribution
下面我们看看使用该视图查询返回的结果
admin@localhost : sys 12:59:57> select * from x$ps_digest_95th_percentile_by_avg_us;
+--------+------------+
| avg_us | percentile |
+--------+------------+
| 450384 | 0.9528 |
+--------+------------+
1 row in set (0.02 sec)
视图字段含义如下
avg_us:语句平均执行时间(微秒单位)
percentile:直方图百分比值,代表该语句的平均执行时间的一个分布广度
06
x$ps_digest_avg_latency_distribution
帮助视图(辅助试图),用于帮助x$ps_digest_95th_percentile_by_avg_us视图生成语句百分之九十五的平均执行时间分布值,数据来源:performance_schema.events_statements_summary_by_digest
下面我们看看使用该视图查询返回的结果
admin@localhost : sys 01:00:38> select * from x$ps_digest_avg_latency_distribution limit 3;
+-----+--------+
| cnt | avg_us |
+-----+--------+
| 2 | 38 |
| 1 | 43 |
| 1 | 57 |
+-----+--------+
3 rows in set (0.00 sec)
视图字段含义如下:
cnt:按照语句平均执行时间的分组计数值
avg_us:语句平均执行时间(微秒单位)
07
x$ps_schema_table_statistics_io
帮助视图(辅助试图),用于帮助schema_table_statistics,x$schema_table_statistics、schema_table_statistics_with_buffer,x$schema_table_statistics_with_buffer表统计视图生成表统计信息,数据来源:performance_schema.file_summary_by_instance
下面我们看看使用该视图查询返回的结果
admin@localhost : sys 01:00:42> select * from x$ps_schema_table_statistics_io limit 3;
+-----------------+-----------------+------------+--------------------------+----------------+-------------+---------------------------+-----------------+------------+----------------+
| table_schema | table_name | count_read | sum_number_of_bytes_read | sum_timer_read | count_write | sum_number_of_bytes_write | sum_timer_write | count_misc | sum_timer_misc |
+-----------------+-----------------+------------+--------------------------+----------------+-------------+---------------------------+-----------------+------------+----------------+
| @5c0f@841d@535c | @5c0f@841d@535c | 11 | 115897 | 40409405625 | 0 | 0 | 0 | 11 | 6395506125 |
| binlog | mysql-bin | 279 | 411513 | 4898542125 | 459 | 408800 | 9443458500 | 455 | 2049668827875 |
| charsets | Index | 1 | 18710 | 16713311625 | 0 | 0 | 0 | 2 | 83737125 |
+-----------------+-----------------+------------+--------------------------+----------------+-------------+---------------------------+-----------------+------------+----------------+
3 rows in set (0.01 sec)
视图字段含义如下:
table_schema:包含table_name的schema名称
table_name:表名
count_read:对应表的文件读I/O事件发生的总次数
sum_number_of_bytes_read:对应表的文件读I/O事件的总字节数
sum_timer_read:对应表的文件读I/O事件的总延迟时间(执行时间)
count_write:对应表的文件写I/O事件发生的总次数
sum_number_of_bytes_write:对应表的文件写I/O事件的总字节数
sum_timer_write:对应表的文件写I/O事件的总延迟时间(执行时间)
count_misc:对应表的文件混杂I/O事件发生的总次数
sum_timer_misc:对应表的文件混杂I/O事件的总延迟时间(执行时间)
08
x$schema_flattened_keys
帮助视图,用于帮助schema_redundant_indexes视图输出冗余索引信息,数据来源:INFORMATION_SCHEMA.STATISTICS
下面我们看看使用该视图查询返回的结果
admin@localhost : sys 01:01:20> select * from x$schema_flattened_keys limit 3;
+--------------+-------------+-------------------+------------+----------------+---------------+
| table_schema | table_name | index_name | non_unique | subpart_exists | index_columns |
+--------------+-------------+-------------------+------------+----------------+---------------+
| luoxiaobo | public_num | PRIMARY | 0 | 0 | id |
| luoxiaobo | public_num | public_name_index | 0 | 0 | public_name |
| luoxiaobo | t_luoxiaobo | PRIMARY | 0 | 0 | id |
+--------------+-------------+-------------------+------------+----------------+---------------+
3 rows in set (0.00 sec)
视图字段含义如下:
TABLE_SCHEMA:包含索引的表所在的schema名称
TABLE_NAME:包含索引的表名
INDEX_NAME:索引名称
NON_UNIQUE:索引中非唯一列的数量
subpart_exists:索引是否是前缀索引
index_columns:索引中列名称
本期内容就介绍到这里,本期内容参考链接如下:
https://dev.mysql.com/doc/refman/5.7/en/sys-metrics.html
https://dev.mysql.com/doc/refman/5.7/en/sys-ps-check-lost-instrumentation.html
https://dev.mysql.com/doc/refman/5.7/en/sys-session-ssl-status.html
https://dev.mysql.com/doc/refman/5.7/en/sys-version.html
| 作者简介
罗小波·数据库技术专家
《千金良方——MySQL性能优化金字塔法则》、《数据生态:MySQL复制技术与生产实践》作者之一。熟悉MySQL体系结构,擅长数据库的整体调优,喜好专研开源技术,并热衷于开源技术的推广,在线上线下做过多次公开的数据库专题分享,发表过近100篇数据库相关的研究文章。
全文完。
Enjoy MySQL :)
叶老师的「MySQL核心优化」大课已升级到MySQL 8.0,扫码开启MySQL 8.0修行之旅吧