zoukankan      html  css  js  c++  java
  • 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中拿信息:

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




    现在来调用:
    1. mysql> call sp_table_exists('new_feature','t1',@result);  
    2. Query OK, 0 rows affected (0.00 sec)  
    3.   
    4.   
    5. mysql> select @result;  
    6. +-------------+  
    7. | @result     |  
    8. +-------------+  
    9. Not exists! |  
    10. +-------------+  
    11. 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.   
    4.   
    5. mysql> SELECT IF(@v_is_exists = '','Not exists!',@v_is_exists) AS 'result';  
    6. +-------------+  
    7. | result      |  
    8. +-------------+  
    9. Not exists! |  
    10. +-------------+  
    11. 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. rows in set (0.00 sec)  




    第三, 检索指定数据库下面的表扫描信息,过滤出执行次数大于10的查询,
    1. mysql> SELECT * FROM statement_analysis WHERE db='new_feature' AND full_scan = '*'  AND exec_count > 10G  
    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. 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 1G  
    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. rows in set (0.01 sec)  






    示例我就写这么多了,详细的去看使用手册并且自己摸索去吧。
     
    http://blog.csdn.net/yueliangdao0608/article/details/50032851
  • 相关阅读:
    verilog 数组参数
    跨时钟域设计【一】——Slow to fast clock domain
    跨时钟域设计【二】——Fast to slow clock domain
    跨时钟域设计【三】—— 数据同步
    Vivado学习笔记_002
    使用modelsim仿真DDR3时编译出错的解决方法
    Modelsim仿真tcl脚本与wave.do文件
    %s 与 %0s在 verilog中的区别
    BFM1
    verilog 常用系统函数及例子
  • 原文地址:https://www.cnblogs.com/seasonzone/p/5601142.html
Copyright © 2011-2022 走看看