前言: 

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个,如下图所示:



其实我们经常用到的是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库需要你详细去了解,总结出你需要的查询方法。

参考资料: 

带你认识MySQL sys schema的更多相关文章

  1. MySQL sys Schema

    MySQL sys Schema 使用sys Schema的先决条件 使用sys Schema sys Schema Progress Reporting sys Schema Object Refe ...

  2. MySQL sys Schema 简单介绍-2

    之前在<MySQL sys Schema 简单介绍-1>中简单的介绍了,sys Schema库中的表.那么这些表都可以查询些什么信息呢?接下来本文将做下介绍. 1. 表的情况 1.1 统计 ...

  3. MySQL sys Schema 简单介绍-1

    参考文档: MySQL- 5.7 sys schema笔记 MySQL 5.7新特性:SYS库详解 MySQL Performance Schema&sys Schema介绍 内存分配统计视图 ...

  4. 【MySQL】MySQL 5.7 sys Schema

    sys库说明:http://dev.mysql.com/doc/refman/5.7/en/sys-schema-usage.html sys库使用说明:http://dev.mysql.com/do ...

  5. MySQL 5.7系列之sys schema(2)

    0.导读 MySQL 5.7引入了sys schema,有了它,我们排查分析一些问题时将更得心应手.sys schema里主要存储的是视图.存储过程.函数等. 视图:用于结果的汇总展示及配置持久化: ...

  6. [MySQL Reference Manual] 24 MySQL sys框架

    24 MySQL sys框架 24 MySQL sys框架 24.1 sys框架的前提条件 24.2 使用sys框架 24.3 sys框架进度报告 24.4 sys框架的对象 24.4.1所有sys下 ...

  7. (转)MySQL- 5.7 sys schema笔记,mysql-schema

    原文:http://www.bkjia.com/Mysql/1222405.html http://www.ywnds.com/?p=5045 performance_schema提供监控策略及大量监 ...

  8. mysql sys table

    本文详细地介绍了MySQL 5.7新引入的sys schema.首先,本文概要地介绍了sys schema的作用和定位:其次,分别介绍了sys schema中的视图.函数和存储过程:接下来,通过两个例 ...

  9. MySQL- 5.7 sys schema笔记

            如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持!       performance_schema提供监 ...

随机推荐

  1. Java开发桌面程序学习(五)——文件选择器和目录选择器的使用

    选择器的使用 DirectoryChooser目录选择器官方文档 FileChooser文件选择器官方文档 文件选择器的使用 JavaFx中有个FileChoser,可以打开一个对话框来选择文件 Fi ...

  2. C# 简单的进程间通信方式

    只想实现一个简单的进程建通信,有什么快速实现方式? 1 进程单例需求 / Windows 消息与 IMessageFilter 如果需求是实现一个进程单例,在启动第二个进程时,期望能自动唤起第一个进程 ...

  3. C#测试对比不同类型的方法调用的性能

    一. 测试方法调用形式 1. 实例方法调用 2. 静态方法调用 3. 实例方法反射调用 4. 委托方法的Invoke调用 5. 委托方法的DynamicInvoke调用 6.委托方法的BeginInv ...

  4. 7个Python小坑,给新手党的福利

    Python语言简单易用,但容易给新入门的朋友造成一些微妙的,难以捕捉的错误,稍不注意就入坑了. 因此,今天给大家总结一些易犯的小错误,让你轻松进行不踩坑的Python学习. 1.缩进,符号和空格不正 ...

  5. TCP三次握手四次分手—简单详解

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 疑问一,上图传递过程中出 ...

  6. mssql sqlserver 使用sql脚本实现相邻两条数据相减的方法分享

    摘要: 下文讲述使用sql脚本实现相邻两条数据相减的方法,如下所示: 实验环境:sql server 2008 R2 实现思路: 1.使用cte表达式,对当前表进行重新编号 2.使用左连接对 表达式 ...

  7. mysql设置用户密码规则

    一.查看密码规则 SHOW VARIABLES LIKE 'validate_password%'; 二.规则显示介绍 | Variable_name | Value | +------------- ...

  8. SQL常用增删改查语句--来源于网络

    1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋' ...

  9. Linux—添加开机启动(服务/脚本)

    系统启动时需要加载的配置文件 /etc/profile./root/.bash_profile/etc/bashrc./root/.bashrc/etc/profile.d/*.sh./etc/pro ...

  10. 博客美化——Silence主题皮肤

    介绍   一款专注阅读的博客园主题,主要面向于经常混迹 博客园 的朋友.其追求大道至简的终极真理,界面追求简洁.运行追求高效.部署追求简单. 博客皮肤源码地址 预览地址 如何部署.使用皮肤 Silen ...