MySQL 5.7 SYS系统SCHEMA

在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:
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)

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

时间: 2024-10-13 12:04:58

MySQL 5.7 SYS系统SCHEMA的相关文章

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

mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息 这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助 这个库在mysql5.7中是默认存在的,在mysql5.6版本以上可以手动导入,数据库包请在github自行查找 这个库包括了哪些内容? 这个库是通过视图的形式把information_schema 和performance_schema结合起来,查询出更加令人容易理解的数据 存储过程可以可以执行一些性能方面的配置,也可以得到一些性能诊断

[MySQL Reference Manual] 23 Performance Schema结构

23 MySQL Performance Schema 23 MySQL Performance Schema.. 1 23.1 性能框架快速启动... 3 23.2 性能框架配置... 5 23.2.1 性能框架编译时配置... 5 23.2.2 性能框架启动配置... 6 23.2.3 启动时性能框架配置... 8 23.2.3.1 性能架构事件定时... 8 23.2.3.2 性能框架事件过滤... 9 23.2.3.3 事件预过滤... 10 23.2.3.4命名记录点或者消费者的过滤.

MySQL数据库在WIN系统CMD下的编码问题

MySQL数据库在WIN系统CMD下的编码问题 1. 查看MySQL数据库编码 * SHOW VARIABLES LIKE 'char%'; 2. 编码解释 * character_set_client:MySQL使用该编码来解读客户端发送过来的数据,例如该编码为UTF8,那么如果客户端发送过来的数据不是UTF8,那么就会出现乱码 * character_set_results:MySQL会把数据转换成该编码后,再发送给客户端,例如该编码为UTF8,那么如果客户端不使用UTF8来解读,那么就会出

【MYSQL】Mysql 设备选型与系统规划-实战参考文档-带附件-可下载

更多精彩内容尽在www.leonarding.com <Mysql 设备选型与系统规划> 引言:项目的设备选型是一项细腻而又艰巨的任务.因为它有一次性.不可更改.兼容性.扩展性.功能性.性能性.易用性等参数阀值来参照.例如我们的项目,首先要了解今年的设备采购预算有多少,如何分配的,分配下来每个项目大概有多少,按照预算标准进行分级.其次由于我们是金融企业采购范围是有所限制的,会有一个备选目录,上面列举了品牌.厂家.规格等信息,只能在这些目录中选择,如果设备有超出目录的需要写说明申请. 再次就需要

PHP+MYSQL微型博客系统

1.创建数据库 CREATE TABLE news( id INT( 12 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , title VARCHAR( 50 ) , dates DATE, connects TEXT, hits INT( 11 ) NOT NULL ) ENGINE = INNODB DEFAULT CHARSET = utf8 AUTO_INCREMENT =1 2.连接数据库conn.php <?php @mysql_connect("

MySQL+PHP配置 Windows系统IIS版

MySQL+PHP配置 Windows系统IIS版 1.下载 MySQL下载地址:http://dev.mysql.com/downloads/mysql/5.1.html->Windows (x86, 32-bit), MSI Installer Essentials - Recommended(不包含文档)-> No thanks, just start my download.(无需登录注册 直接下载) PHP下载地址:www.php.net->5.4.44版本->选择Win

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

做易买网项目,由于对数据库插入系统时间不了解,常常遇到的问题: 1.java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配.原因:由于获取系统时间类型不对,应为systdate 下面介绍Oracle.Db2.SqlServer.MySQL 数据库插入当前系统时间 例如有表table,table 中有两个字段:name .makedate1.oracle:插入系统时间应为sysdate:insert into table (name,makedate) valu

pydev-python 链接mysql数据库(mac系统)

1.首先实现命令行下可运行mysql 这一部分网上有一位大神说的已经很清楚了,直接引用过来,多谢哈.引用:http://www.lihui.info/mac-pydev-mysqldb/ 在mac os上安装MySQLdb,遇到了很多问题,总结一下: 首先,如果用sudo easy_install mysql-python命令安装,基本上不会成功的,原因有两个:一是找不到mysql_config位置,二是现在基本上安装的是64位的系统和64位的python,和默认的32位安装包冲突. 所以只能自

基于java web+mysql的登录注册系统

 结对编程二人项目 组员:王刚029   齐凤霞007 项目名称:基于java web+mysql的登录注册系统 软件需求: 1,任何基于B/S或者C/S的软件都离不开基本的登录注册,我们决定采用B/S结构+MySQL数据库来完成基本的登录注册功能2,采用简单的JSP+Servlet+MySQL完成登录,注册功能3,登录,注册界面信息的回显,数据格式的校验功能 说明: 1,采用MVC模式,降低了代码的耦合性整体架构:>jsp显示页面和回显数据>Servlet负责处理jsp提交的数据>Se