其他混杂视图 | 全方位认识 sys 系统库

在《语句效率统计视图|全方位认识 sys 系统库》中,为大家介绍了利用sys 系统库查询语句执行效率的快捷视图,本期将为大家介绍一些不便归类的混杂视图,本篇也是该系列中最后一篇介绍视图的文章。

作者 罗小波·沃趣科技高级数据库技术专家
出品 沃趣科技

《语句效率统计视图|全方位认识 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)

视图字段含义如下:

1)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格式时间和时间戳

2)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格式时间和时间戳

3)Type:度量变量类型:

  • 对于全局状态变量:该列值为 'Global Status'

  • 对于InnoDB指标:该列值为 ' InnoDB Metrics - %',其中%号在输出对应的度量变量指标时,使用information_schema.INNODB_METRICS表的SUBSYSTEM列值替换再输出(转换函数: CONCAT('InnoDB Metrics - ', SUBSYSTEM) AS Type)

  • 对于performance_schema中监控的内存指标:该列值为 'Performance Schema'

  • 对于当前系统时间:该列值为 'System Time'

4)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

| 作者简介

罗小波·沃趣科技高级数据库技术专家

IT从业多年,历任运维工程师,高级运维工程师,运维经理,数据库工程师,曾参与版本发布系统,轻量级监控系统,运维管理平台,数据库管理平台的设计与编写,熟悉MySQL的体系结构时,InnoDB存储引擎,喜好专研开源技术,追求完美。

发表评论

电子邮件地址不会被公开。 必填项已用*标注