MySQL系统库之sys
sys这个数据库主要是通过视图的形式把information_schema和
performance_schema结合起来,让程序员可以更方便的了解MySQL服务器的一
些性能信息。
sys系统库通常都是提供给专业的DBA人员排查一些特定问题使用的,其下
所涉及的各项查询或多或少都会对性能有一定的影响。
在使用上:
sys系统库支持MySQL 5.6或更高版本,不支持MySQL5.5.x及以下版本。
sys库的启用
因为sys系统库提供了一些代替直接访问performance_schema的视图,所
以必须启用performance_schema(将performance_schema系统参数设置为ON),sys系统库的大部分功能才能正常使用。
同时要完全访问sys系统库,用户必须具有以下数据库的管理员权限。
当然sys系统库本身已经提供了启用所有需要的功能的存储过程,比如:
启用所有的wait instruments:
mysql> call sys.ps_setup_enable_instrument('wait');
+-------------------------+
| summary |
+-------------------------+
| Enabled 315 instruments |
+-------------------------+
1 row in set (0.12 sec)Query OK, 0 rows affected (0.12 sec)
启用所有事件类型的current表:
mysql> call sys.ps_setup_enable_consumer('current');
+---------------------+
| summary |
+---------------------+
| Enabled 3 consumers |
+---------------------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)
注意:performance_schema的默认配置就可以满足sys系统库的大部分数据
收集功能。启用所有需要功能会对性能产生一定的影响,因此最好仅启用所需的
配置。
sys系统库的使用
如果使用了use
语句切换默认数据库,那么就可以直接使用sys系统库下的
视图进行查询,就像查询某个库下的表一样操作。也可以使用 b_name.view_name、
db_name.procedure_name、db_name.func_name等方式,在不指定默认数据库的
情况下访问sys系统库中的对象(这叫作名称限定对象引用)。
mysql> select * from sys.version;
+-------------+---------------+
| sys_version | mysql_version |
+-------------+---------------+
| 1.5.2 | 5.7.31-log |
+-------------+---------------+
1 row in set (0.00 sec)mysql> use sys;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> select * from version;
+-------------+---------------+
| sys_version | mysql_version |
+-------------+---------------+
| 1.5.2 | 5.7.31-log |
+-------------+---------------+
1 row in set (0.00 sec)
在sys系统库下包含很多视图,它们以各种方式对performance_schema表
进行聚合计算展示。这些视图大部分是成对出现的,两个视图名称相同,但有一
个视图是带“x”前缀的,例如:hostsummarybyfileio和x”前缀的,例如:host_summary_by_file_io和 x”前缀的,例如:hostsummarybyfileio和xhost_summary_by_file_io,代表按照主机进行汇总统计的文件 I/O 性能数据,
两个视图访问的数据源是相同的,但是在创建视图的语句中,不带“x”前缀的视图显示的是相关数值经过单位换算后的数据(单位是毫秒、秒、分钟、小时、天等),带“x”前缀的 视图显示的是相关数值经过单位换算后的数据(单位是毫秒、秒、分钟、小时、 天等),带“x”前缀的视图显示的是相关数值经过单位换算后的数据(单位是毫秒、秒、分钟、小时、天等),带“x”前缀的视图显示的是原始的数据(单位是皮秒)。
mysql> show tables like '%session';
+--------------------------+
| Tables_in_sys (%session) |
+--------------------------+
| session |
| x$session |
+--------------------------+
2 rows in set (0.00 sec)
查看慢 SQL 语句慢在哪里
如果我们频繁地在慢查询日志中发现某个语句执行缓慢,且在表结构、索引
结构、统计信息中都无法找出原因时,则可以利用sys系统库中的撒手锏:
sys.session视图结合performance_schema的等待事件来找出症结所在。那么
session视图有什么用呢?使用它可以查看当前用户会话的进程列表信息,看看
当前进程到底再干什么,注意,这个视图在 MySQL 5.7.9 中才出现。
首先需要启用与等待事件相关功能:
mysql> call sys.ps_setup_enable_instrument('wait');
+-----------------------+
| summary |
+-----------------------+
| Enabled 8 instruments |
+-----------------------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> call sys.ps_setup_enable_consumer('wait');
+---------------------+
| summary |
+---------------------+
| Enabled 2 consumers |
+---------------------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)
然后在一个终端上模拟一个会话耗时的操作:
mysql> select sleep(30);
在另一个终端上查看其他会话阻塞在哪里:
mysql> select * from sys.session where command='query' and conn_id!=connection_id()\G;
*************************** 1. row ***************************thd_id: 30conn_id: 4user: root@localhostdb: syscommand: Querystate: User sleeptime: 3current_statement: select sleep(30)statement_latency: 2.25 sprogress: NULLlock_latency: 0 psrows_examined: 0rows_sent: 0rows_affected: 0tmp_tables: 0tmp_disk_tables: 0full_scan: NOlast_statement: NULL
last_statement_latency: NULLcurrent_memory: 0 byteslast_wait: wait/synch/cond/sql/Item_func_sleep::condlast_wait_latency: Still Waitingsource: trx_latency: NULLtrx_state: NULLtrx_autocommit: NULLpid: 1451program_name: mysql
1 row in set (0.38 sec)
查询表的增、删、改、查数据量和 I/O 耗时统计
mysql> select * from schema_table_statistics_with_buffer\G;
*************************** 1. row ***************************table_schema: systable_name: sys_configrows_fetched: 1fetch_latency: 44.57 usrows_inserted: 0insert_latency: 0 psrows_updated: 0update_latency: 0 psrows_deleted: 0delete_latency: 0 psio_read_requests: 16io_read: 147.85 KiBio_read_latency: 2.35 msio_write_requests: 0io_write: 0 bytesio_write_latency: 0 psio_misc_requests: 17io_misc_latency: 9.46 msinnodb_buffer_allocated: 16.00 KiBinnodb_buffer_data: 338 bytesinnodb_buffer_free: 15.67 KiBinnodb_buffer_pages: 1
innodb_buffer_pages_hashed: 0innodb_buffer_pages_old: 0innodb_buffer_rows_cached: 6
1 row in set (0.23 sec)
查看是否有事务锁等待
innodb_lock_wait视图通常由于分析事务锁(行锁)等待,注意必须要有事务正在等待该视图才会有值。
演示步骤:
步骤 | 会话1 | 会话2 | 会话3 |
---|---|---|---|
1 | begin; | ||
2 | select * from dept where id=1 for update; | ||
3 | begin; | ||
4 | select * from dept where id=1 for update; | ||
5 | select * from sys.innodb_lock_waits\G; |
mysql> select * from sys.innodb_lock_waits\G;
*************************** 1. row ***************************wait_started: 2021-05-07 09:19:40wait_age: 00:00:05wait_age_secs: 5locked_table: `test`.`dept`locked_index: PRIMARYlocked_type: RECORDwaiting_trx_id: 8967waiting_trx_started: 2021-05-07 09:19:40waiting_trx_age: 00:00:05waiting_trx_rows_locked: 1waiting_trx_rows_modified: 0waiting_pid: 5waiting_query: select * from dept where id=1 for updatewaiting_lock_id: 8967:44:3:2waiting_lock_mode: Xblocking_trx_id: 8966blocking_pid: 6blocking_query: NULLblocking_lock_id: 8966:44:3:2blocking_lock_mode: Xblocking_trx_started: 2021-05-07 09:19:21blocking_trx_age: 00:00:24blocking_trx_rows_locked: 1blocking_trx_rows_modified: 0sql_kill_blocking_query: KILL QUERY 6
sql_kill_blocking_connection: KILL 6
1 row in set, 3 warnings (0.01 sec)
查看InnoDB缓冲池中热点库
使用innodb_buffer_stats_by_schema视图可按照schema分组查询InnoDB缓冲池的统计信息
mysql> select * from sys.innodb_buffer_stats_by_schema;
+---------------+------------+-----------+-------+--------------+-----------+-------------+
| object_schema | allocated | data | pages | pages_hashed | pages_old | rows_cached |
+---------------+------------+-----------+-------+--------------+-----------+-------------+
| InnoDB System | 1.55 MiB | 1.22 MiB | 99 | 0 | 0 | 1229 |
| mysql | 240.00 KiB | 1.46 KiB | 15 | 0 | 0 | 21 |
| sys | 16.00 KiB | 338 bytes | 1 | 0 | 0 | 6 |
| test | 16.00 KiB | 27 bytes | 1 | 0 | 0 | 1 |
+---------------+------------+-----------+-------+--------------+-----------+-------------+
4 rows in set (0.13 sec)
视图字段含义如下:
object_schema:对象所在schema,如果该表属于Innodb存储引擎,则该字段显示为InnoDB System,如果是其他引擎,则该字段显示为每个schema name(db名)。
allocated:当前已分配给schema的总内存字节数
data:当前已分配给schema的数据部分使用的内存字节总数
pages:当前已分配给schema内存总页数
pages_hashed:当前已分配给schema的自适应hash索引页总数
pages_old:当前已分配给schema的旧页总数(位于LRU列表中的旧块子列表中的页数)
rows_cached:buffer pool中为schema缓冲的总数据行数
查看冗余索引
使用MySQL5.7.9新增的sys.schema_redundant_indexes视图,其数据来源为sys.x$schema_flattened_keys。
mysql> select * from sys.schema_redundant_indexes;
查看未使用的索引
schema_unused_indexes视图可以查看未用过的索引,其数据来源为performance_schema.table_io_waits_summary_by_index_usage。该视图在数据库运行足够长时间后数据才有参考意义。
mysql> select * from sys.schema_unused_indexes;
查看磁盘文件产生的磁盘流量与读写比例
io_global_by_file_by_bytes视图可以按照文件路径+名称分组(磁盘文件名)查看全局IO字节数、读写文件IO事件数量统计信息,默认按总IO读写字节数进行降序排列。
mysql> select * from sys.io_global_by_file_by_bytes where file like '%dept%';
+------------------------------+------------+------------+-----------+-------------+---------------+-----------+------------+-----------+
| file | count_read | total_read | avg_read | count_write | total_written | avg_write | total | write_pct |
+------------------------------+------------+------------+-----------+-------------+---------------+-----------+------------+-----------+
| @@basedir/data/test/dept.ibd | 4 | 112.00 KiB | 28.00 KiB | 0 | 0 bytes | 0 bytes | 112.00 KiB | 0.00 |
| @@basedir/data/test/dept.frm | 7 | 555 bytes | 79 bytes | 0 | 0 bytes | 0 bytes | 555 bytes | 0.00 |
+------------------------------+------------+------------+-----------+-------------+---------------+-----------+------------+-----------+
2 rows in set (0.97 sec)
各个字段含义如下:
file:被操作的文件名
count_read:总共有多少次读
total_read:总共读了多少字节
avg_read:平均每次读多少字节
count_write:总共多少次写
total_written:总共写了多少字节
avg_write:平均每次写的字节
total:读和写总共的IO
write_pct:写占IO里的占比
查看哪些语句使用了全表扫描
statements_with_full_table_scans可查看全表扫描或者没有使用到最优索引的语句(经过标准化转化的语句文本),默认按照平均扫描次数百分比和语句总延迟时间(执行时间)降序排序。数据来源:performance_schema.events_statements_summary_by_digest。
mysql> select * from sys.statements_with_full_table_scans limit 1\G;
*************************** 1. row ***************************query: SELECT `information_schema` . ... . `STATISTICS` . `INDEX_NAME` db: testexec_count: 1total_latency: 8.56 msno_index_used_count: 1
no_good_index_used_count: 0no_index_used_pct: 100rows_sent: 0rows_examined: 6rows_sent_avg: 0rows_examined_avg: 6first_seen: 2021-05-07 09:27:27last_seen: 2021-05-07 09:27:27digest: ae5d4708e5973332bb9b3a04eb4ce19d
1 row in set (0.01 sec)
视图各字段含义如下:
query:经过标准化转换的语句字符串
db:语句对应的默认数据库,如果没有默认数据库,该字段为NULL
exec_count:语句执行的总次数
total_latency:语句执行的总延迟时间(执行时间)
no_index_used_count:语句执行没有使用索引扫描表(而是使用全表扫描)的总次数
no_good_index_used_count:语句执行没有使用到更好的索引扫描表的总次数
no_index_used_pct:语句执行没有使用索引扫描表(而是使用全表扫描)的次数与语句执行总次数的百分比
rows_sent:语句执行从表返回给客户端的总数据行数
rows_examined:语句执行从存储引擎检查的总数据行数
rows_sent_avg:每个语句执行从表中返回客户端的平均数据行数
rows_examined_avg:每个语句执行从存储引擎读取的平均数据行数
first_seen:该语句第一次出现的时间
last_seen:该语句最近一次出现的时间
digest:语句摘要计算的md5 hash值
查看哪些语句使用了文件排序
statements_with_sorting视图可查看执行了文件排序的语句,默认情况下按照语句总延迟时间(执行时间)降序排序,数据来源:performance_schema.events_statements_summary_by_digest。
mysql> select * from sys.statements_with_sorting limit 1\G;
*************************** 1. row ***************************query: SELECT `sys` . `format_path` ( ... ) ) , ? ) ) AS `avg_write` , db: testexec_count: 2total_latency: 2.12 s
sort_merge_passes: 0avg_sort_merges: 0
sorts_using_scans: 2sort_using_range: 0rows_sorted: 269avg_rows_sorted: 135first_seen: 2021-05-07 09:29:28last_seen: 2021-05-07 09:30:19digest: 8a0cfcb07bad7d1e9ef40b9d99ff2c5f
1 row in set (0.00 sec)
视图字段含义如下:
query:经过标准化转换的语句字符串
db:语句对应的默认数据库,如果没有默认数据库,该字段为NULL
exec_count:语句执行的总次数
total_latency:语句执行的总延迟时间(执行时间)
sort_merge_passes:语句执行发生的语句排序合并的总次数
avg_sort_merges:语句的平均排序合并次数 SUM_SORT_MERGE_PASSES/COUNT_STAR
sorts_using_scans:语句排序执行全表扫描的总次数
sort_using_range:语句排序执行范围扫描的总次数
rows_sorted:语句执行发生排序的总数据行数
avg_rows_sorted:语句的平均排序数据行数 SUM_SORT_ROWS/COUNT_STAR
first_seen:该语句第一次出现的时间
last_seen:该语句最近一次出现的时间
digest:语句摘要计算的md5 hash值
查看哪些语句使用了临时表
tatements_with_temp_tables 查看使用了临时表的语句,默认情况下按照磁盘临时表数量和内存临时表数量进行降序排序。数据来源:performance_schema.events_statements_summary_by_digest。
mysql> select * from sys.statements_with_temp_tables limit 1\G;
*************************** 1. row ***************************query: SELECT `t` . `OBJECT_SCHEMA` A ... SCHEMA` , `t` . `OBJECT_NAME` db: testexec_count: 1total_latency: 11.48 msmemory_tmp_tables: 63disk_tmp_tables: 10
avg_tmp_tables_per_query: 63tmp_tables_to_disk_pct: 16first_seen: 2021-05-07 09:28:36last_seen: 2021-05-07 09:28:36digest: e1f092285d953ee6a7a6cc32bac9dc42
1 row in set (0.00 sec)
视图字段含义如下:
query:经过标准化转换的语句字符串
db:语句对应的默认数据库,如果没有默认数据库,该字段为NULL
exec_count:语句执行的总次数
total_latency:语句执行的总延迟时间(执行时间)
memory_tmp_tables:语句执行时创建内部内存临时表的总数量
disk_tmp_tables:语句执行时创建的内部磁盘临时表的总数量
avg_tmp_tables_per_query:语句使用内存临时表的平均数量 SUM_CREATED_TMP_TABLES/COUNT_STAR
tmp_tables_to_disk_pct:内存临时表的总数量与磁盘临时表的总数量百分比,表示磁盘临时表的转换率 SUM_CREATED_TMP_DISK_TABLES/SUM_CREATED_TMP_TABLES
first_seen:该语句第一次出现的时间
last_seen:该语句最近一次出现的时间
digest:语句摘要计算的md5 hash值
MySQL系统库之sys相关推荐
- MySQL 中的系统库之sys 系统库
MySQL学习系列 系统库简介 以下系统库的介绍, 主要是扩展大家的知识面, 因为系统库中的数据很重要,没有对 MySQL 有全面通盘的了解, 不宜去操作其下的数据, 而且对系统库的管理维护是是 DB ...
- MySQL 5.7 SYS SCHEMA
MySQL 5.7 SYS SCHEMA 官方地址:https://dev.mysql.com/doc/refman/5.7/en/sys-schema.html 1.performance sch ...
- 权限系统表 | 全方位认识 mysql 系统库(一)
前面我们已经完整的介绍了performance_schema .sys.information_schema三个系统库,今天开始我们为大家开启"全方位认识 mysql 系统库"系列 ...
- 安装mysql时报错:mysql file /usr/share/mysql/czech/errmsg.sys from install of MySQL-serve的问题...
2019独角兽企业重金招聘Python工程师标准>>> 安装mysql时报错:mysql file /usr/share/mysql/czech/errmsg.sys from in ...
- mysql 默认当前时间_复制信息记录表|全方位认识 mysql 系统库
在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...
- mysql 单表字段多少合适_复制信息记录表|全方位认识 mysql 系统库
在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...
- linux安装mysql出错( file /usr/share/mysql/czech/errmsg.sys from install of MySQL-server-5.5.31-2.el6.i6)
linux下安装MySQL出错! [root@hadoop0 local]# rpm -i MySQL-server-5.5.31-2.el6.i686.rpm file /usr/s ...
- 【MySQL】MySQL 5.7 sys Schema
[MySQL]MySQL 5.7 sys Schema sys库说明:http://dev.mysql.com/doc/refman/5.7/en/sys-schema-usage.html sys库 ...
- Errors集锦-数据库-file /usr/share/mysql/czech/errmsg.sys from install of mysql-community-common-5.7.16-1.
在linux安装数据库时出现的错误: [atguigu@hadoop102 mysql]$ sudo rpm -ivh 01_mysql-community-common-5.7.16-1.el7. ...
最新文章
- 聊聊三维重建-条纹法之相位法(一)
- 你知道脑机接口中的“后门“攻击吗?它真的有可能在现实中实现
- hadoop大数据分析与挖掘实战(读书笔记3)
- DNS入门介绍之三BIND安装配置全过程
- Thread类中的join方法
- 关于近期对自己的总结
- 90-30-020-源码-任务调度-Kylin任务调度
- 数据结构与算法笔记(五) 链表的应用
- Oracle→分组函数、GROUP BY、HAVING、多表查询、连接、外连接、自连接、子查询单行多行、ROWNUM、ANY、ALL、NOT IN(...IS NOT NULL)、条件求和、DUAL
- Leetcode 109.有序链表转换二叉搜索树
- 通达OA11.2漏洞复现
- 如何识别服务器网站有病毒,网站有病毒怎么解决?
- tablepc是什么平板电脑_Tablet PC,这是什么意思?
- 【毕业设计】空气质量检测仪(环境检测盒子)- stm32 单片机 嵌入式 物联网
- [转载]信息安全从业参考
- 兔年首文迎新春-Cesium橘子洲烟花礼赞
- 计算机专业的小姐姐照片,Windows居然自带这个功能,自动整理你硬盘里的小姐姐...
- Python调用字符映射表输入特殊符号
- 炸弹小分队+蒲公英联机平台联机教程
- python爬取大众点评数据_python爬虫实例详细介绍之爬取大众点评的数据
热门文章
- 《HAWQ-V3: Dyadic Neural Network Quantization》论文阅读
- 行转列方法 及 pivot函数使用问题
- linux dhclient源码 多进程,重启虚拟机后dhclient进程未运行解决办法
- 湖南职称英语与计算机考试,湖南省中级工程师职称要不要考职称英语?
- 微信小程序后台文本自动换行失效实现换行
- java.lang.NoClassDefFoundError: org/apache/ibatis/io/Resources
- matlab的plot没有反应,用plot画图没有反应
- java编程思想之字符串深入(正则表达式)
- 两个比尔:情商奇才与智商天才
- Android TV系列 TV APP分析(二)