带你认识MySQL sys schema

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL 5.7中引入了一个新的sys schema,sys是一个MySQL自带的系统库,在安装MySQL 5.7以后的版本,使用mysqld进行初始化时,会自动创建sys库。sys库里面的表、视图、函数、存储过程可以使我们更方便、快捷的了解到MySQL的一些信息,比如哪些语句使用了临时表、哪个SQL没有使用索引、哪个schema中有冗余索引、查找使用全表扫描的SQL、查找用户占用的IO等,sys库里这些视图中的数据,大多是从performance_schema里面获得的。目标是把performance_schema的复杂度降低,让我们更快的了解DB的运行情况。

1.sys库总览


本篇文章是基于MySQL 5.7.23版本实验的。打开sys库(希望你跟着我一起做哦),我们会发现sys schema里包含1个表,100个视图,存储过程及函数共48个,如下图所示:


image.png

image.png



image.png

image.png



image.png

image.png


其实我们经常用到的是sys schema下的视图,下面将主要介绍各个视图的作用,我们发现sys schema里的视图主要分为两类,一类是正常以字母开头的,共52个,一类是以x$开头的,共48个。字母开头的视图显示的是格式化数据,更易读,而 x$ 开头的视图适合工具采集数据,显示的是原始未处理过的数据。


下面我们将按类别来分析以字母开头的52个视图:


  • host_summary:这个是服务器层面的,以IP分组,比如里面的视图host_summary_by_file_io;
  • user_summary:这个是用户层级的,以用户分组,比如里面的视图user_summary_by_file_io;
  • innodb:这个是InnoDB层面的,比如视图innodb_buffer_stats_by_schema;
  • io:这个是I/O层的统计,比如视图io_global_by_file_by_bytes;
  • memory:关于内存的使用情况,比如视图memory_by_host_by_current_bytes;
  • schema:关于schema级别的统计信息,比如schema_table_lock_waits;
  • session:关于会话级别的,这类视图少一些,只有session和session_ssl_status;
  • statement:关于语句级别的,比如statements_with_errors_or_warnings;
  • wait:关于等待的,比如视图waits_by_host_by_latency。


2.常用查询介绍


1,查看每个客户端IP过来的连接消耗了多少资源。

mysql> select * from host_summary;

2,查看某个数据文件上发生了多少IO请求。

mysql> select * from io_global_by_file_by_bytes;

3,查看每个用户消耗了多少资源。

mysql> select * from user_summary;

4,查看总共分配了多少内存。

mysql> select * from memory_global_total;

5,数据库连接来自哪里,以及这些连接对数据库的请求情况是怎样的?

查看当前连接情况。

mysql> select host, current_connections, statements from host_summary;

6,查看当前正在执行的SQL和执行show full processlist的效果相当。

mysql> select conn_id, user, current_statement, last_statement from session;

7,数据库中哪些SQL被频繁执行?

执行下面命令查询TOP 10最热SQL。

mysql> select db,exec_count,query from statement_analysis order by exec_count desc limit 10;

8,哪个文件产生了最多的IO,读多,还是写的多?

mysql> select * from io_global_by_file_by_bytes limit 10;

9,哪个表上的IO请求最多?

mysql> select * from io_global_by_file_by_bytes where file like ‘%ibd’ order by total desc limit 10;

10,哪个表被访问的最多?先访问statement_analysis,根据热门SQL排序找到相应的数据表。

mysql> select * from statement_analysis order by avg_latency desc limit 10;

11,哪些SQL执行了全表扫描或执行了排序操作?

mysql> select * from statements_with_sorting;

mysql> select * from statements_with_full_table_scans;

12,哪些SQL语句使用了临时表,又有哪些用到了磁盘临时表?

查看statement_analysis中哪个SQL的tmp_tables 、tmp_disk_tables值大于0即可。

mysql> select db, query, tmp_tables, tmp_disk_tables from statement_analysis where tmp_tables>0 or tmp_disk_tables >0 order by (tmp_tables+tmp_disk_tables) desc limit 20;

13,哪个表占用了最多的buffer pool?

mysql> select * from innodb_buffer_stats_by_table order by allocated desc limit 10;

14,每个库(database)占用多少buffer pool?

mysql> select * from innodb_buffer_stats_by_schema order by allocated desc limit 10;

15,每个连接分配多少内存?

利用session表和memory_by_thread_by_current_bytes分配表进行关联查询。

mysql> select b.user, current_count_used, current_allocated, current_avg_alloc, current_max_alloc, total_allocated,current_statement from memory_by_thread_by_current_bytes a, session b where a.thread_id = b.thd_id;

16,MySQL自增长字段的最大值和当前已经使用到的值?

mysql> select * from schema_auto_increment_columns;

17,MySQL有哪些冗余索引和无用索引?

mysql> select * from schema_redundant_indexes;

mysql> select * from schema_unused_indexes;

18,查看事务等待情况

mysql> select * from innodb_lock_waits;


总结:


本文主要介绍sys库相关内容,其实sys库有很多有用的查询,可以帮助你轻松了解数据库的运行情况,原本需要查找performance_schema中多个表才能获得的数据,现在查询一个视图即可满足。当然,sys库需要你详细去了解,总结出你需要的查询方法。


参考资料:

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL Oracle 关系型数据库
MySQL必知必会:MySQL中的Schema与DataBase
MySQL必知必会:MySQL中的Schema与DataBase
|
3月前
|
存储 监控 关系型数据库
深度剖析MySQL Performance Schema内存管理
深度剖析MySQL Performance Schema内存管理:源码分析与改进思路 MySQL Performance Schema(PFS)是MySQL提供的强大的性能监控诊断工具,它能够在运行时检查server内部执行情况。PFS通过监视server内部已注册的事件来收集信息,将收集到的性能数据存储在performance_schema存储引擎中。本文将深入剖析PFS内存分配及释放原理,解读其中存在的问题以及改进思路。
52 2
|
7月前
|
存储 缓存 关系型数据库
《高性能Mysql》读书笔记之Schema与数据类型优化
《高性能Mysql》读书笔记之Schema与数据类型优化
|
10月前
|
关系型数据库 MySQL Linux
mysql: /usr/local/MATLAB/MATLAB_Runtime/v901/sys/os/glnxa64/libstdc++.so.6: version `CXXABI_1.3.9‘ n
mysql: /usr/local/MATLAB/MATLAB_Runtime/v901/sys/os/glnxa64/libstdc++.so.6: version `CXXABI_1.3.9‘ n
|
10月前
|
Oracle 关系型数据库 MySQL
在Oracle和MySQL上安装hr schema、example和Scott schema
19c examples 安装完成,在$ORACLE_HOME/demo/schema/human_resources 目录下执行hr_main.sql 文件创建 hr用户
|
SQL 关系型数据库 MySQL
|
关系型数据库 MySQL 索引
mysql的schema和数据类型优化
mysql的schema和数据类型优化
|
存储 关系型数据库 MySQL
MySQL 数据库 Schema 设计的性能优化①:高效的模型设计
前言 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区。真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限。 博主将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼会分3篇文章来进行详细介绍!
|
存储 关系型数据库 MySQL
MySQL优化——Schema与数据类型设计
MySQL优化——Schema与数据类型设计
106 0
MySQL优化——Schema与数据类型设计