版权声明:本文为博主原创文章,未经博主允许不得转载。

在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:
MySQL4.1 提供了information_schema 数据字典。从此可以很简单的用SQL语句来检索需要的系统元数据了。
MySQL5.5 提供了performance_schema 性能字典。 但是这个字典比较专业,一般人可能也就看看就不了了之了。
MySQL5.7 提供了 sys系统数据库。 sys数据库里面包含了一系列的存储过程、自定义函数以及视图来帮助我们快速的了解系统的元数据信息。

sys系统数据库结合了information_schema和performance_schema的相关数据,让我们更加容易的检索元数据。 现在呢,我就示范下几种场景下如何快速的使用。

第一,
比如之前想要知道某个表是否存在与否,可以用以下两种方法:

A, 悲观的方法,写SQL从information_schema中拿信息:

  1. mysql> SELECT IF(COUNT(*) = 0,'Not exists!','Exists!') AS 'result' FROM information_schema.tables WHERE table_schema = 'new_feature' AND table_name = 't1';
  2. +-------------+
  3. | result      |
  4. +-------------+
  5. | Not exists! |
  6. +-------------+
  7. 1 row in set (0.00 sec)

B,乐观的方法,假设表存在,写一个存储过程:

  1. DELIMITER $$
  2. USE `new_feature`$$
  3. DROP PROCEDURE IF EXISTS `sp_table_exists`$$
  4. CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_table_exists`(
  5. IN db_name VARCHAR(64),
  6. IN tb_name VARCHAR(64),
  7. OUT is_exists VARCHAR(60)
  8. )
  9. BEGIN
  10. DECLARE no_such_table CONDITION FOR 1146;
  11. DECLARE EXIT HANDLER FOR no_such_table
  12. BEGIN
  13. SET is_exists = 'Not exists!';
  14. END;
  15. SET @stmt = CONCAT('select 1 from ',db_name,'.',tb_name);
  16. PREPARE s1 FROM @stmt;
  17. EXECUTE s1;
  18. DEALLOCATE PREPARE s1;
  19. SET is_exists = 'Exists!';
  20. END$$
  21. DELIMITER ;

现在来调用:

  1. mysql> call sp_table_exists('new_feature','t1',@result);
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> select @result;
  4. +-------------+
  5. | @result     |
  6. +-------------+
  7. | Not exists! |
  8. +-------------+
  9. 1 row in set (0.00 sec)

现在我们直接用sys数据库里面现有的存储过程来进行调用,

  1. mysql> CALL table_exists('new_feature','t1',@v_is_exists);
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> SELECT IF(@v_is_exists = '','Not exists!',@v_is_exists) AS 'result';
  4. +-------------+
  5. | result      |
  6. +-------------+
  7. | Not exists! |
  8. +-------------+
  9. 1 row in set (0.00 sec)

第二,获取没有使用过的索引。

  1. mysql> SELECT * FROM schema_unused_indexes;
  2. +---------------+-------------+--------------+
  3. | object_schema | object_name | index_name   |
  4. +---------------+-------------+--------------+
  5. | new_feature   | t1          | idx_log_time |
  6. | new_feature   | t1          | idx_rank2    |
  7. +---------------+-------------+--------------+
  8. 2 rows in set (0.00 sec)

第三, 检索指定数据库下面的表扫描信息,过滤出执行次数大于10的查询,

  1. mysql> SELECT * FROM statement_analysis WHERE db='new_feature' AND full_scan = '*'  AND exec_count > 10\G
  2. *************************** 1. row ***************************
  3. query: SHOW STATUS
  4. db: new_feature
  5. full_scan: *
  6. exec_count: 26
  7. err_count: 0
  8. warn_count: 0
  9. total_latency: 74.68 ms
  10. max_latency: 3.86 ms
  11. avg_latency: 2.87 ms
  12. lock_latency: 4.50 ms
  13. rows_sent: 9594
  14. rows_sent_avg: 369
  15. rows_examined: 9594
  16. rows_examined_avg: 369
  17. rows_affected: 0
  18. rows_affected_avg: 0
  19. tmp_tables: 0
  20. tmp_disk_tables: 0
  21. rows_sorted: 0
  22. sort_merge_passes: 0
  23. digest: 475fa3ad9d4a846cfa96441050fc9787
  24. first_seen: 2015-11-16 10:51:17
  25. last_seen: 2015-11-16 11:28:13
  26. *************************** 2. row ***************************
  27. query: SELECT `state` , `round` ( SUM ... uration (summed) in sec` DESC
  28. db: new_feature
  29. full_scan: *
  30. exec_count: 12
  31. err_count: 0
  32. warn_count: 12
  33. total_latency: 16.43 ms
  34. max_latency: 2.39 ms
  35. avg_latency: 1.37 ms
  36. lock_latency: 3.54 ms
  37. rows_sent: 140
  38. rows_sent_avg: 12
  39. rows_examined: 852
  40. rows_examined_avg: 71
  41. rows_affected: 0
  42. rows_affected_avg: 0
  43. tmp_tables: 24
  44. tmp_disk_tables: 0
  45. rows_sorted: 140
  46. sort_merge_passes: 0
  47. digest: 538e506ee0075e040b076f810ccb5f5c
  48. first_seen: 2015-11-16 10:51:17
  49. last_seen: 2015-11-16 11:28:13
  50. 2 rows in set (0.01 sec)

第四, 同样继续上面的,过滤出有临时表的查询,

  1. mysql> SELECT * FROM statement_analysis WHERE db='new_feature' AND tmp_tables > 0 ORDER BY tmp_tables DESC LIMIT 1\G
  2. *************************** 1. row ***************************
  3. query: SELECT `performance_schema` .  ... name` . `SUM_TIMER_WAIT` DESC
  4. db: new_feature
  5. full_scan: *
  6. exec_count: 2
  7. err_count: 0
  8. warn_count: 0
  9. total_latency: 87.96 ms
  10. max_latency: 59.50 ms
  11. avg_latency: 43.98 ms
  12. lock_latency: 548.00 us
  13. rows_sent: 101
  14. rows_sent_avg: 51
  15. rows_examined: 201
  16. rows_examined_avg: 101
  17. rows_affected: 0
  18. rows_affected_avg: 0
  19. tmp_tables: 332
  20. tmp_disk_tables: 15
  21. rows_sorted: 0
  22. sort_merge_passes: 0
  23. digest: ff9bdfb7cf3f44b2da4c52dcde7a7352
  24. first_seen: 2015-11-16 10:24:42
  25. last_seen: 2015-11-16 10:24:42
  26. 1 row in set (0.01 sec)

可以看到上面查询详细的详细,再也不用执行show status 手工去过滤了。

第五, 检索执行次数排名前五的语句,

  1. mysql> SELECT statement,total FROM user_summary_by_statement_type WHERE `user`='root' ORDER BY total DESC LIMIT 5;
  2. +-------------------+-------+
  3. | statement         | total |
  4. +-------------------+-------+
  5. | jump_if_not       | 17635 |
  6. | freturn           |  3120 |
  7. | show_create_table |   289 |
  8. | Field List        |   202 |
  9. | set_option        |   190 |
  10. +-------------------+-------+
  11. 5 rows in set (0.01 sec)

示例我就写这么多了,详细的去看使用手册并且自己摸索去吧。

 

MySQL 5.7 SYS系统SCHEMA的更多相关文章

  1. MySQL中的sys系统数据库是干嘛的

    mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息 这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助   这个库在mysql5.7中是默认存在 ...

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

  3. [MySQL Reference Manual] 23 Performance Schema结构

    23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...

  4. MySQL数据库在WINDOWS系统CMD下的编码问题

    MySQL数据库在WINDOWS系统CMD下的编码问题 1. 查看MySQL数据库编码 * SHOW VARIABLES LIKE 'char%'; 2. 编码解释 * character_set_c ...

  5. MySQL+PHP配置 Windows系统IIS版

    MySQL+PHP配置 Windows系统IIS版 1.下载 MySQL下载地址:http://dev.mysql.com/downloads/mysql/5.1.html->Windows ( ...

  6. Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间

    做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为sy ...

  7. python模块知识二 random -- 随机模块、序列化 、os模块、sys -- 系统模块

    4.random -- 随机模块 a-z:97 ~ 122 A-Z :65 ~ 90 import random #浮点数 print(random.random())#0~1,不可指定 print( ...

  8. 安装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 ...

  9. IDEA SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统

    先放上github地址:spike-system,可以直接下载完整项目运行测试 SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统 技术栈:SpringBoot, MyS ...

随机推荐

  1. PDO防注入原理分析以及使用PDO的注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下两个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  2. PHP的压力测试工具ab.exe 和mpm介绍提高并发数

    该工具是apache自带的,可以用它来测试网站的并发量有多大和某个页面的访问时间. 基本用法: 1.  进入CMD,转到apache的bin目录下. 2.  执行命令ab.exe  -n 访问的问次数 ...

  3. Redis 安全性设置

    redis安装好后,默认情况下登陆客户端和使用命令操作时不需要密码的.某些情况下,为了安全起见,我们可以设置在客户端连接后进行任何操作之前都要进行密码验证. 我这边是安装的window系统,修改red ...

  4. Reporting services导出的Excel文件避免出现隐藏行列的布局

    开发Reporting services时,为了避免在导出的Excel文件中出现隐藏的行和列,必须遵循以下规则: 1.Page header中的Textbox直接必须紧密贴合在一起 2.Page he ...

  5. C++ note

    主要是为了学习c++的类和对象   内容摘自 c++概述 http://see.xidian.edu.cn/cpp/biancheng/cpp/rumen_1/   1,变量  ,C++中,我们可以在 ...

  6. ubuntu14.04安装eclipse

    1.安装jdk7.x,参考上篇<Linux14.04安装JDK> 2下载eclipse.tar 3.sudo tar -zxvf eclipse-x-x-.tar.gz mv eclips ...

  7. PostgreSQL Insight Monitor pgstat

    PostgreSQL Insight Monitor  pgstat pgstat 是一个连接到数据库并获取数据库的活动状态的命令行工具. PostgreSQL有许多状态: archiver for ...

  8. Sublime 不自动打开上次未关闭的文件 设置方法

    { "font_size": 17, "hot_exit": false, "remember_open_files": false, &q ...

  9. C++之路进阶——codevs1204(寻找子串位置)

    1204 寻找子串位置  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze     题目描述 Description 给出字符串a和字符串b,保证b是a的一个子 ...

  10. having 子句

    having 子句-->过滤分组,用于限制分组显示结果 a.行已经被分组 b.使用了分组函数 c.满足having子句中条件的分组将被重写