MySQL 5.7 SYS系统SCHEMA
版权声明:本文为博主原创文章,未经博主允许不得转载。
MySQL4.1 提供了information_schema 数据字典。从此可以很简单的用SQL语句来检索需要的系统元数据了。
MySQL5.5 提供了performance_schema 性能字典。 但是这个字典比较专业,一般人可能也就看看就不了了之了。
MySQL5.7 提供了 sys系统数据库。 sys数据库里面包含了一系列的存储过程、自定义函数以及视图来帮助我们快速的了解系统的元数据信息。
sys系统数据库结合了information_schema和performance_schema的相关数据,让我们更加容易的检索元数据。 现在呢,我就示范下几种场景下如何快速的使用。
第一,
比如之前想要知道某个表是否存在与否,可以用以下两种方法:
A, 悲观的方法,写SQL从information_schema中拿信息:
- mysql> SELECT IF(COUNT(*) = 0,'Not exists!','Exists!') AS 'result' FROM information_schema.tables WHERE table_schema = 'new_feature' AND table_name = 't1';
- +-------------+
- | result |
- +-------------+
- | Not exists! |
- +-------------+
- 1 row in set (0.00 sec)
B,乐观的方法,假设表存在,写一个存储过程:
- DELIMITER $$
- USE `new_feature`$$
- DROP PROCEDURE IF EXISTS `sp_table_exists`$$
- CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_table_exists`(
- IN db_name VARCHAR(64),
- IN tb_name VARCHAR(64),
- OUT is_exists VARCHAR(60)
- )
- BEGIN
- DECLARE no_such_table CONDITION FOR 1146;
- DECLARE EXIT HANDLER FOR no_such_table
- BEGIN
- SET is_exists = 'Not exists!';
- END;
- SET @stmt = CONCAT('select 1 from ',db_name,'.',tb_name);
- PREPARE s1 FROM @stmt;
- EXECUTE s1;
- DEALLOCATE PREPARE s1;
- SET is_exists = 'Exists!';
- END$$
- DELIMITER ;
现在来调用:
- mysql> call sp_table_exists('new_feature','t1',@result);
- Query OK, 0 rows affected (0.00 sec)
- mysql> select @result;
- +-------------+
- | @result |
- +-------------+
- | Not exists! |
- +-------------+
- 1 row in set (0.00 sec)
现在我们直接用sys数据库里面现有的存储过程来进行调用,
- mysql> CALL table_exists('new_feature','t1',@v_is_exists);
- Query OK, 0 rows affected (0.00 sec)
- mysql> SELECT IF(@v_is_exists = '','Not exists!',@v_is_exists) AS 'result';
- +-------------+
- | result |
- +-------------+
- | Not exists! |
- +-------------+
- 1 row in set (0.00 sec)
第二,获取没有使用过的索引。
- mysql> SELECT * FROM schema_unused_indexes;
- +---------------+-------------+--------------+
- | object_schema | object_name | index_name |
- +---------------+-------------+--------------+
- | new_feature | t1 | idx_log_time |
- | new_feature | t1 | idx_rank2 |
- +---------------+-------------+--------------+
- 2 rows in set (0.00 sec)
第三, 检索指定数据库下面的表扫描信息,过滤出执行次数大于10的查询,
- mysql> SELECT * FROM statement_analysis WHERE db='new_feature' AND full_scan = '*' AND exec_count > 10\G
- *************************** 1. row ***************************
- query: SHOW STATUS
- db: new_feature
- full_scan: *
- exec_count: 26
- err_count: 0
- warn_count: 0
- total_latency: 74.68 ms
- max_latency: 3.86 ms
- avg_latency: 2.87 ms
- lock_latency: 4.50 ms
- rows_sent: 9594
- rows_sent_avg: 369
- rows_examined: 9594
- rows_examined_avg: 369
- rows_affected: 0
- rows_affected_avg: 0
- tmp_tables: 0
- tmp_disk_tables: 0
- rows_sorted: 0
- sort_merge_passes: 0
- digest: 475fa3ad9d4a846cfa96441050fc9787
- first_seen: 2015-11-16 10:51:17
- last_seen: 2015-11-16 11:28:13
- *************************** 2. row ***************************
- query: SELECT `state` , `round` ( SUM ... uration (summed) in sec` DESC
- db: new_feature
- full_scan: *
- exec_count: 12
- err_count: 0
- warn_count: 12
- total_latency: 16.43 ms
- max_latency: 2.39 ms
- avg_latency: 1.37 ms
- lock_latency: 3.54 ms
- rows_sent: 140
- rows_sent_avg: 12
- rows_examined: 852
- rows_examined_avg: 71
- rows_affected: 0
- rows_affected_avg: 0
- tmp_tables: 24
- tmp_disk_tables: 0
- rows_sorted: 140
- sort_merge_passes: 0
- digest: 538e506ee0075e040b076f810ccb5f5c
- first_seen: 2015-11-16 10:51:17
- last_seen: 2015-11-16 11:28:13
- 2 rows in set (0.01 sec)
第四, 同样继续上面的,过滤出有临时表的查询,
- mysql> SELECT * FROM statement_analysis WHERE db='new_feature' AND tmp_tables > 0 ORDER BY tmp_tables DESC LIMIT 1\G
- *************************** 1. row ***************************
- query: SELECT `performance_schema` . ... name` . `SUM_TIMER_WAIT` DESC
- db: new_feature
- full_scan: *
- exec_count: 2
- err_count: 0
- warn_count: 0
- total_latency: 87.96 ms
- max_latency: 59.50 ms
- avg_latency: 43.98 ms
- lock_latency: 548.00 us
- rows_sent: 101
- rows_sent_avg: 51
- rows_examined: 201
- rows_examined_avg: 101
- rows_affected: 0
- rows_affected_avg: 0
- tmp_tables: 332
- tmp_disk_tables: 15
- rows_sorted: 0
- sort_merge_passes: 0
- digest: ff9bdfb7cf3f44b2da4c52dcde7a7352
- first_seen: 2015-11-16 10:24:42
- last_seen: 2015-11-16 10:24:42
- 1 row in set (0.01 sec)
可以看到上面查询详细的详细,再也不用执行show status 手工去过滤了。
第五, 检索执行次数排名前五的语句,
- mysql> SELECT statement,total FROM user_summary_by_statement_type WHERE `user`='root' ORDER BY total DESC LIMIT 5;
- +-------------------+-------+
- | statement | total |
- +-------------------+-------+
- | jump_if_not | 17635 |
- | freturn | 3120 |
- | show_create_table | 289 |
- | Field List | 202 |
- | set_option | 190 |
- +-------------------+-------+
- 5 rows in set (0.01 sec)
示例我就写这么多了,详细的去看使用手册并且自己摸索去吧。
MySQL 5.7 SYS系统SCHEMA的更多相关文章
- MySQL中的sys系统数据库是干嘛的
mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息 这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助 这个库在mysql5.7中是默认存在 ...
- 【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 ...
- [MySQL Reference Manual] 23 Performance Schema结构
23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...
- MySQL数据库在WINDOWS系统CMD下的编码问题
MySQL数据库在WINDOWS系统CMD下的编码问题 1. 查看MySQL数据库编码 * SHOW VARIABLES LIKE 'char%'; 2. 编码解释 * character_set_c ...
- MySQL+PHP配置 Windows系统IIS版
MySQL+PHP配置 Windows系统IIS版 1.下载 MySQL下载地址:http://dev.mysql.com/downloads/mysql/5.1.html->Windows ( ...
- Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为sy ...
- python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块
4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...
- 安装mysql报错:Can't find messagefile '/usr/share/mysql/english/errmsg.sys'和/usr/bin/mysqladmin: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or
使用yum安装mysql服务端: [root@centos ~]# yum -y install mysql-server Loaded plugins: fastestmirror, securit ...
- IDEA SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统
先放上github地址:spike-system,可以直接下载完整项目运行测试 SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统 技术栈:SpringBoot, MyS ...
随机推荐
- mysql怎么终止当前正在执行的sql语句
mysql怎么终止当前正在执行的sql语句 show processlist; kill 要杀的ID kill 7
- nginx + keepalived 双机热备
序 双机热备是指两台机器都在运行,但并非两台机器同时在提供服务. 当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,且切换的时间非常短. keepalived的工作原理是VRRP—— ...
- ADB 在 Android SDK 的中的路径
以前 adb.exe 是在 sdk/tools 目录下 现在 安装 sdk 之后, 需要打开 SDK Manager 下载 `Android SDK Platform-tools` 然后, 在 sdk ...
- 利用JAVA计算TFIDF和Cosine相似度-学习版本
写在前面的话,既然是学习版本,那么就不是一个好用的工程实现版本,整套代码全部使用List进行匹配效率可想而知. [原文转自]:http://computergodzilla.blogspot.com/ ...
- Swift游戏实战-跑酷熊猫 04 熊猫的跳和滚的动作
这节内容,我们利用上一节学过的内容,给熊猫添加跳和滚动的动作.同时通过重载touchBegan方法来响应动作.切换跑,跳,滚. 要点: 通过序列帧纹理产生动画: SKAction.animatWith ...
- Leetcode: Majority Element II
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...
- Lintcode: Rotate String
Given a string and an offset, rotate string by offset. (rotate from left to right) Example Given &qu ...
- SWF类标准开头Tag
[SWF(width="800", height="600", backgroundColor="#ffffff", frameRate=& ...
- 转:Java实现几种常见排序方法
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...
- csuoj 1329: 一行盒子
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1329 1329: 一行盒子 Time Limit: 1 Sec Memory Limit: 12 ...