0、导读

MySQL 5.7引入了sys schema,有了它,我们排查分析一些问题时将更得心应手。sys schema里主要存储的是视图、存储过程、函数等。

视图:用于结果的汇总展示及配置持久化;

存储过程:用于对Performance schema的控制及收集;

函数:对于Performance schema的配置及数据格式化。

本文约2000字,阅读时间约10分钟。

1、本文目标

上篇我们只是先简单介绍了下sys schema可以做什么,以及几个基础概念,本文继续深入介绍sys schema,回答上篇我们留下的几个问题:

  • 哪个用户或者来自哪个IP的客户端使用了最多的资源;

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

  • 数据库中哪些SQL被频繁执行;

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

  • 哪个表上的IO请求最多;

  • 哪个表被访问的最多;

  • 哪些语句延迟比较严重;

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

  • 哪个表占用了最多的buffer pool;

  • 每个库(database)占用多少buffer pool;

  • 每个连接分配多少内存;

  • MySQL内部有多个线程在运行;

  • 其他...

2、基本视图介绍

  • host_summary视图

字段名

意义

host

从哪个客户机上连过来。如果是NULL,表示内部的进程

statements

该客户机共执行了多少语句

statement_latency

该客户机发来等待语句执行的时间

statement_avg_latency

该客户机等待语句执行的平均时间

table_scans

该客户机发生全表扫描的次数

file_ios

该客户机上IO事件请求的次数

file_io_latency

该客户机请求等待IO的时间

current_connections

该客户机当前的连接数

total_connections

该客户机连接DB共有多少次

unique_user

该客户机上有几个不同用户名的帐户连接过来

current_memory

该客户机上当前连接占用的内存

total_memory_allocated

该客户机上的请求总共使用的内存量(历史累计值)

  • io_global_by_file_by_bytes视图

file

被操作的文件名

count_read

总共有多少次读

total_read

总共读了多少字节

avg_read

平均每次读的字节数

count_write

总共有多少次写

total_written

总共写了多少字节

avg_write

平均每次写的字节大小

total

读和写总共的IO大小

write_pct

写请求占总IO请求中的百分比(就是通常所说的读写比)

  • user_summary视图

user

客户端连接过来的用户名,如果是NULL,表示内部进程

statements

该用户执行了多少SQL

statement_latency

该用户执行SQL的总延迟时间

statement_avg_latency

该用户执行SQL的平均延迟时间

table_scans

该用户执行SQL时发生全表扫描的次数

file_ios

该用户发生的IO请求总量

file_io_latency

该用户发生的IO请求总延迟时间

current_connections

该用户当前的连接

total_connections

该用户总的连接数

unique_hosts

该用户从几个不同客户机连接过来

current_memory

该用户当前占用的内存

total_memory_allocated

该用户总共申请到的内存(历史累计值)

  • memory_global_total视图

total_allocated

Server总共分配出去的内存大小

  • memory_by_thread_by_current_bytes视图

thread_id

MySQL内部线程ID,可以和session视图中的thd_id关联

user

当前线程是哪个用户创建

current_count_used

当前线程正在使用且未释放的内存块(内存块不是固定大小的)

current_allocated

当前线程正在使用且未释放的内存块大小(字节)

current_avg_alloc

当前线程每个内存块平均分配内存大小(字节)

current_max_alloc

当前线程单次曾经分配的最多内存大小(字节)

total_allocated

当前线程总共分配的内存大小

  • statement_analysis视图

query

格式化后的SQL(将SQL中的参数替换成?)

db

在哪个DB中执行,如果为NULL表示在任何DB

full_scan

是否使用了全表扫描

exec_count

该SQL被执行的总次数

err_count

发生错误的次数

warn_count

发生警告的次数

total_latency

总共发生延迟的时间

max_latency

最大延迟的时间

avg_latency

平均延迟的时间

lock_latency

因锁等待占用的总时间

rows_sent

执行该SQL返回的总行数

rows_sent_avg

执行该SQL平均返回的行数

rows_examined

执行该SQL扫描的总行数

rows_examined_avg

执行该SQL平均每次扫描的行数

tmp_tables

该SQL生成内存临时表的总次数

tmp_disk_tables

该SQL生成磁盘文件临时表的总次数

rows_sorted

该SQL总共排序的行数

sort_merge_passes

用于排序中合并的总次数

digest

该语句的HASH值

first_seen

该SQL最早出现的时间

last_seen

该SQL最近出现的时间

  • processlist视图

thd_id

内部线程ID

conn_id

连接的ID(对应show processlist中的"Id"列)

user

该线程创建的用户名

db

连接的DB,如果是NULL表示后台线程

command

Client发起命令的类型提示

state

命令的状态

time

基于上面state停留的时间

current_statement

该线程执行的语句

statement_latency

语句运行总共占用时间

progress

该语句运行完成的百分比

lock_latency

该语句用于锁等待的时间

rows_examined

该语句扫描的行数

rows_send

该语句返回的行数

rows_affected

该语句影响到的行数(写入语句)

tmp_tables

形成内存临时表的次数

tmp_disk_tables

形成磁盘临时表的次数

full_scan

全表描扫的次数

last_statement

上一条被执行的SQL

last_statement_latency

上一条被执行的SQL时延

current_memory

当前线程占用的内存

last_wait

上一次等待事件

last_wait_latency

上一次等待时间时延

source

上一次等待事件对应的源码位置

trx_latency

事务时延

trx_state

当前事务状态

pid

对应到系统里的pid

program_name

连接进来的标识名

  • session视图

session视图和processlist视图基本一样,只是把后台线程过滤掉。

  • innodb_buffer_stats_by_schema视图

object_schema

schema名

allocated

该schema上分配的buffer pool大小(字节)

data

该schema中缓存的数据大小(字节)

pages

该schema中缓存的data page数

pages_hashed

该schema中分配了多少hashed page

pages_old

该schema中的old page数量

rows_cached

该schema中缓存的row data数量

  • innodb_buffer_stats_by_table视图

和innodb_buffer_stats_by_schema基本一致,只是比上面那个视图多了一个ojbect_name用于指定表名。

3、sys schema运用

上面把几个基础的视图都介绍完了,接下来就可以回答上篇提出的那些问题了。

  • 哪个用户或者来自哪个IP的客户端使用了最多的资源

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

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

查看哪个用户消耗了多少资源:

查看总共分配了多少内存:

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

查看当前连接情况:

select host, current_connections, statements from host_summary;

查看当前正在执行的SQL:

select  conn_id, user, current_statement, last_statement from session;

和执行show full processlist的效果相当。

  • 数据库中哪些SQL被频繁执行

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

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

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

select * from io_global_by_file_by_bytes limit 10;

  • 哪个表上的IO请求最多

select * from io_global_by_file_by_bytes where file like '%ibd' order by total desc limit 10;

  • 哪个表被访问的最多

先访问statement_analysis,根据热门SQL排序找到相应的数据表。

  • 哪些语句延迟比较严重

查看 statement_analysis 中 avg_latency的最高的SQL:

select * from statement_analysis order by avg_latency desc limit 10;

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

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

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;

  • 哪个表占用了最多的buffer pool

select * from innodb_buffer_stats_by_table order by allocated desc limit 10;

  • 每个库(database)占用多少buffer pool

select * from innodb_buffer_stats_by_schema order by allocated desc limit 10;

  • 每个连接分配多少内存

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

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;

  • MySQL内部有多个线程在运行

MySQL内部的线程类型及数量:

select user, count(*) from processlist group by user;

写到这里,其实我们只涉及到 sys schema 很少的一部分功能。估计MySQL的官方AWR也要快出现了,大家也可以期待一下(MySQL 8.0这块又进一步规范了一下)

MySQL 5.7系列之sys schema(1)

阅读原文

MySQL 5.7系列之sys schema(2)的更多相关文章

  1. 【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 ...

  2. MySQL sys Schema

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

  3. MySQL sys Schema 简单介绍-2

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

  4. MySQL sys Schema 简单介绍-1

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

  5. 带你认识MySQL sys schema

    前言:  MySQL 5.7中引入了一个新的sys schema,sys是一个MySQL自带的系统库,在安装MySQL 5.7以后的版本,使用mysqld进行初始化时,会自动创建sys库. sys库里 ...

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

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

  7. MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题

    我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...

  8. [MySQL性能优化系列]提高缓存命中率

    1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...

  9. [MySQL性能优化系列]巧用索引

    1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...

随机推荐

  1. 转 LoadRunner 技巧之协议分析

    在做性能测试的时候,协议分析是困扰初学者的难题,选择错误的协议会导致Virtual User Generator 录制不到脚本:或录制的脚本不完整,有些应用可能需要选择多个协议才能完整的记录 客户端与 ...

  2. webform--LinQ的相关操作

    LinQ:LineQ to Sq类:集成化的数据访问类:与ado.net没区别:--------------------------------------------LinQ的创建:右键,添加新建项 ...

  3. 通过类名获取spring里的Bean

    import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactor ...

  4. Web API的Log问题

    建立了一个Web API项目,在WebApiConfig.cs中已经启用了Tracing. config.EnableSystemDiagnosticsTracing(); 同时web.config中 ...

  5. PHP实现异步调用方法研究

    作者: Laruence 本文地址: http://www.laruence.com/2008/04/14/318.html 转载请注明出处 , ,); curl_setopt_array(, ); ...

  6. note->notice

    登陆博客园,乍眼一看上一篇博客的日期还是2月底,如今已是5月份,期间好几次想要记录一些东西,总感觉现在一天二十四小时越来越短,有几次登陆博客园甚至连密码都要重置一下才能登陆...这两个月的时间里经理了 ...

  7. SQL Server 数据类型映射

    SQL Server 和 .NET Framework 基于不同的类型系统. 例如,.NET Framework Decimal 结构的最大小数位数为 28,而 SQL Server 的 decima ...

  8. 第十八周个人作业--The Final

    项目计划   完成这个项目需要的时间:5-7天项目开发  需求分析:    作为一名排球赛事管理者,我希望能够根据比赛查询每场比赛的结果,以便于确定每支球队的比赛名次.  设计文档    由排球比赛用 ...

  9. 把cmd信息中的正常和异常输出分别输出到不同txt文件中

    场景一: 1.大量滚动信息容纳不下,在小黑屏中被冲刷掉. 2.希望把正常输出和异常输出分别输出到不同地方. 相关命令 一共有4个输出到文件的命令,现以jar命令打war包举例说明: 命令 说明 举例  ...

  10. ffmpeg总结整理

    ffmpeg总结整理参考链接:    http://www.cnblogs.com/youngt/p/5754415.html