mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息
这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助
这个库在mysql5.7中是默认存在的,在mysql5.6版本以上可以手动导入,数据库包请在github自行查找
这个库包括了哪些内容?
这个库是通过视图的形式把information_schema 和performance_schema结合起来,查询出更加令人容易理解的数据
存储过程可以可以执行一些性能方面的配置,也可以得到一些性能诊断报告内容
存储函数可以查询一些性能信息
分析每个视图和表之前先说明一下:关于带不带x$,去掉x$同名的视图他们的数据是相同的,区别在于不带x$的单位更加符合直接阅读经过了转换,而带x$是为了某些工具存在而使用的原始单位(多数应该是mysql默认的)
下面就结合mysql官方手册来详细分析sys库
1.表
1.1 sys_config 表
这是在这个系统库上存在的唯一一个表了
先看看表结构
CREATE TABLE `sys_config` (
`variable` varchar(128) NOT NULL,
`value` varchar(128) DEFAULT NULL,
`set_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`set_by` varchar(128) DEFAULT NULL,
PRIMARY KEY (`variable`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
variable 配置选项名称
value 配置选项值
set_time 该行配置修改的时间
set_by 该行配置信息修改者,如果从被安装没有修改过,那么这个数据应该为NULL
表中默认数据为
variable
|
value
|
set_time
|
set_by
|
diagnostics.allow_i_s_tables
|
OFF
|
2015-11-20 16:04:38
|
|
diagnostics.include_raw
|
OFF
|
2015-11-20 16:04:38
|
|
statement_performance_analyzer.limit
|
100
|
2015-11-20 16:04:38
|
|
statement_performance_analyzer.view
|
|
2015-11-20 16:04:38
|
|
statement_truncate_len
|
64
|
2016-01-22 17:00:16
|
|
以上值的会话变量为@sys.+表中variable字段,譬如:@sys.statement_truncate_len
可以set @sys.statement_truncate_len = 32 临时改变值,在会话中会一直使用这个值,如果想要恢复使用表的默认值,只需要将这个会话值设置为null;set @sys.statement_truncate_len = null;
diagnostics.allow_i_s_tables
diagnostics.include_raw
这两个值默认为OFF ,前者如果开启表示允许diagnostics() 存储过程执行扫描information_schema.tables 表,如果表很多,那么可能会很耗性能,后者开启将会从metrics 视图输出未加工处理的数据 。diagnostics() 具体内容见下面对diagnostics()的解释。
statement_performance_analyzer.limit
视图在没有加limit限制时,返回的最大行数
statement_performance_analyzer.view
(略)
以上参数为mysql5.7.9加入
statement_truncate_len
通过format_statement()函数返回值的最大长度
这个表非默认选项还有一个@sys.debug参数
可以手动加入
INSERT INTO sys_config (variable, value) VALUES('debug', 'ON');
UPDATE sys_config SET value = 'OFF' WHERE variable = 'debug';
具体内容请参考官方文档,此处不做介绍
关于这个表有两个触发器
1.1.1 sys_config_insert_set_user触发器
如果加入新行通过insert语句,那么这个触发器会把set_by列设置为当前操作者
1.1.2 sys_config_update_set_user触发器
如果加入新行通过update语句,那么这个触发器会把set_by列设置为当前操作者
2.视图
以下部分只介绍不包含x$的视图内容
2.1 host_summary (主机概要)
有如下列:
• host
监听连接过的主机
• statements
当前主机执行的语句总数
• statement_latency
语句等待时间(延迟时间)
• statement_avg_latency
执行语句平均延迟时间
• table_scans
表扫描次数
• file_ios
io时间总数
• file_io_latency
文件io延迟
• current_connections
当前连接数
• total_connections
总链接数
• unique_users
该主机的唯一用户数
• current_memory
当前账户分配的内存
• total_memory_allocated
该主机分配的内存总数
2.2 The host_summary_by_file_io_type
•host
主机
•event_name
IO事件名称
•total
该主机发生的事件
•total_latency
该主机发生IO事件总延迟时间
•max_latency
该主机IO事件中最大的延迟时间
2.3 The host_summary_by_file_io
•host
主机
•ios
IO事件总数
•io_latency
IO总的延迟时间
2.4 The host_summary_by_stages
• host
主机
• event_name
stage event名称
• total
• total_latency
• avg_latency
2.5 The host_summary_by_statement_latency
• host
主机
• total
这个主机的语句总数
• total_latency
这个主机总的延迟时间
• max_latency
主机最大的延迟时间
• lock_latency
等待锁的锁延迟时间
• rows_sent
该主机通过语句返回的总行数
• rows_examined
在存储引擎上通过语句返回的行数
• rows_affected
该主机通过语句影响的总行数
• full_scans
全表扫描的语句总数
2.6 The host_summary_by_statement_type
• host
主机
• statement
最后的语句事件名称
• total
sql语句总数
• total_latency
sql语句总延迟数
• max_latency
最大的sql语句延迟数
• lock_latency
锁延迟总数
• rows_sent
语句返回的行总数
• rows_examined
通过存储引擎的sql语句的读取的总行数
• rows_affected
语句影响的总行数
• full_scans
全表扫描的语句事件总数
2.7 The innodb_buffer_stats_by_schema
这个表是通过数据库统计innodb引擎的innodb缓存
• object_schema
数据库名称
• allocated
分配给当前数据库的总的字节数
• data
分配给当前数据库的数据字节数
• pages
分配给当前数据库的总页数
• pages_hashed
分配给当前数据库的hash页数
• pages_old
分配给当前数据库的旧页数
• rows_cached
当前数据库缓存的行数
2.8 The innodb_buffer_stats_by_table
这个表是通过每个表innodb引擎的innodb缓存
• object_schema
数据库名称
• object_name
表名称
• allocated
分配给表的总字节数
• data
分配该表的数据字节数
• pages
分配给表的页数
• pages_hashed
分配给表的hash页数
• pages_old
分配给表的旧页数
• rows_cached
表的行缓存数
2.9 The innodb_lock_waits
这个表其实从视图的语句来看就是information_schema这个数据库中的innodb_locks、innodb_trx这两个表的整合,能够更清晰的显示当前实例的锁情况
• wait_started
锁等待发生的时间
• wait_age
锁已经等待了多长时间
• wait_age_secs
以秒为单位显示锁已经等待的时间(5.7.9中添加此列)
• locked_table
被锁的表
• locked_index
被锁住的索引
• locked_type
锁类型
• waiting_trx_id
正在等待的事务ID
• waiting_trx_started
等待事务开始的时间
• waiting_trx_age
已经等待事务多长时间
• waiting_trx_rows_locked
正在等待的事务被锁的行数量
• waiting_trx_rows_modified
正在等待行重定义的数量
• waiting_pid
正在等待事务的线程id
• waiting_query
正在等待锁的查询
• waiting_lock_id
正在等待锁的ID
• waiting_lock_mode
等待锁的模式
• blocking_trx_id
阻塞等待锁的事务id
• blocking_pid
正在锁的线程id
• blocking_query
正在锁的查询
•blocking_lock_id
正在阻塞等待锁的锁id.
•blocking_lock_mode
阻塞锁模式
• blocking_trx_started
阻塞事务开始的时间
• blocking_trx_age
阻塞的事务已经执行的时间
• blocking_trx_rows_locked
阻塞事务锁住的行的数量
• blocking_trx_rows_modified
阻塞事务重定义行的数量
• sql_kill_blocking_query
kill 语句杀死正在运行的阻塞事务
在mysql5.7.9中被加入
• sql_kill_blocking_connection
kill 语句杀死会话中正在运行的阻塞事务
在mysql5.7.9中被加入
2.10 The io_by_thread_by_latency
这个视图主要信息是通过IO的消耗展示IO等待的时间
• user
对于当前线程来说,这个值是线程被分配的账户,对于后台线程来讲,就是线程的名称
• total
IO事件的总数
• total_latency
IO事件的总延迟
• min_latency
单个最小的IO事件延迟
• avg_latency
平均IO延迟
• max_latency
最大IO延迟
• thread_id
线程ID
• processlist_id
对于当前线程就是此时的ID,对于后台就是null
- MySQL 5.7 SYS系统SCHEMA
版权声明:本文为博主原创文章,未经博主允许不得转载. 在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:MySQL4.1 提供了information_schema 数据字典.从此可以 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- 一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.简述MySQL中索引类型对数据库的性能的影响 2.RDB和AOF机制 3.Redis的过期键的删除策略 4.Redis ...
- mysql中,如何查看数据库元数据(metadata)的字符集?
需求描述: mysql中,数据库的元数据也是有字符集的. 操作过程: 1.查看mysql数据库元数据的字符集 mysql> show variables like 'character_set_ ...
- mysql中的实例、数据库关系简介
MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号不同的mysql,或者通过workben ...
- MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 创建用户: mysql> insert into mysql.user(Host,User,Passw ...
- SQL Server 中4个系统数据库,Master、Model、Msdb、Tempdb。
(1)Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息.这些系统信息包括所有的登录信息.系统设置信息.SQL Server的初始化信息和其他系 ...
- 如何隐藏掉SQL Server中自带系统数据库,数据表,存储过程等显示文件,只显示用户的数据库,数据表等文件
企业管理器了,----> 编辑该数据库的注册属性--->“常规”属性页下面-->“显示系统数据库和系统对象”的选项去掉
- 分析MySQL中哪些情况下数据库索引会失效
要想分析MySQL查询语句中的相关信息,如是全表查询还是部分查询,就要用到explain. 一.explain 用法:explain +查询语句. id:查询语句的序列号,上面图片中只有一个selec ...
随机推荐
- ubuntu打开终端
虚拟终端 Ctrl+Alt+T组合键 实际终端 Ctrl+Alt+F1 ~ F6组合键 可以在登录界面直接切换 退出终端 Ctrl+Alt+F7组合键
- HighChart 不同颜色(柱状图)
var chart = new Highcharts.Chart({ chart: { plotBackgroundColor: null, plotBorderWidth: null, backgr ...
- stm32最小系统制作(原理图,PCB图,焊接等)
一直想自己做一个最小系统,这次终于把想法付诸实现. 原理图如下: PCB图如下: 过了多日,板子终于邮到了,就是下面这个熊样. 焊接了稳压电路,发现稳压电路原理图部分画错,没有接地 ...
- Oracle查看表之间的约束
----查看表约束 表格: user_constraints 查询外键约束条件 select ' select count(*) from '||TABLE_NAME||';'from user_co ...
- SpringDataJPA第二天讲义
第1章 Spring Data JPA的概述 1.1 Spring Data JPA概述 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的 ...
- with语句和空语句
with语句能够为一组语句创建缺省的对象,在一组语句中,任何不指定对象的属性引用都将被认为是缺省对象. 语法如下: with(object){ statements; } <body> & ...
- MYSQL查询练习 1
-- 查询练习 1------------ CREATE TABLE stu ( sid ), sname ), age INT, gender ) ); , 'male'); , 'female') ...
- ubuntu python3虚拟环境
mkvirtualenv flow_chart -p /usr/bin/python3.6 # 命令 环境名 -p python所在路径 pip install -r request ...
- [转载]Java 应用性能调优实践
Java 应用性能调优实践 Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层.框架层.JVM 层.通过介绍 Java 性能诊断工具 ...
- 收藏!了解UART总线工作原理看这一篇就够了!
原文:玩转单片机 2019-08-24 16:50:29 越学到后面,基础知识更加不能忘记,温故而知新~~ 还记得当年的打印机,鼠标和调制解调器吗?他们都有巨大笨重的连接器和粗电缆,并且必须拧到你的电 ...