MySQL5.7SYS system SCHEMA

Source: Internet
Author: User

MySQL5.7SYS system SCHEMA
Before explaining the system database, let's take a look at the evolution history of MySQL in terms of data dictionary:
MySQL4.1 provides the information_schema data dictionary. You can use SQL statements to retrieve the required system metadata.
MySQL5.5 provides the performance_schema performance dictionary. However, this dictionary is professional, and the average person may not be able to look at it.
MySQL5.7 provides the sys system database. The sys database contains a series of stored procedures, user-defined functions, and views to help us quickly understand the metadata of the system.

The sys System database integrates the information_schema and performance_schema data, making it easier to retrieve metadata. Now, I will demonstrate how to use it quickly in several scenarios.

First,
For example, if you want to know whether a table exists or not, you can use either of the following methods:

A. pessimistic method: Write SQL statements to get information from 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. Optimistic method. If the table exists, write a stored procedure:
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 ;
Call now:
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)
Now we can directly call the existing stored procedures in the sys database,
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)
Second, retrieve unused indexes.
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)
Third, retrieve the table scan information under the specified database and filter out the queries with execution times greater than 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: 9594rows_examined_avg: 369    rows_affected: 0rows_affected_avg: 0       tmp_tables: 0  tmp_disk_tables: 0      rows_sorted: 0sort_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: 852rows_examined_avg: 71    rows_affected: 0rows_affected_avg: 0       tmp_tables: 24  tmp_disk_tables: 0      rows_sorted: 140sort_merge_passes: 0           digest: 538e506ee0075e040b076f810ccb5f5c       first_seen: 2015-11-16 10:51:17        last_seen: 2015-11-16 11:28:132 rows in set (0.01 sec)
Fourth, filter out queries with temporary tables,
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: 201rows_examined_avg: 101    rows_affected: 0rows_affected_avg: 0       tmp_tables: 332  tmp_disk_tables: 15      rows_sorted: 0sort_merge_passes: 0           digest: ff9bdfb7cf3f44b2da4c52dcde7a7352       first_seen: 2015-11-16 10:24:42        last_seen: 2015-11-16 10:24:421 row in set (0.01 sec)
You can see the details of the above query, and you no longer need to execute show status to manually filter out.

Fifth, search for the top five statements with execution times,
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)
I have written so many examples. I will go to the user manual in detail and explore it myself.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.