最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL5.7SYS系统SCHEMA_MySQL

来源:懂视网 责编:小采 时间:2020-11-09 20:13:44
文档

MySQL5.7SYS系统SCHEMA_MySQL

MySQL5.7SYS系统SCHEMA_MySQL:在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:MySQL4.1 提供了information_schema 数据字典。从此可以很简单的用SQL语句来检索需要的系统元数据了。MySQL5.5 提供了performance_schema 性能字典。 但是这个字典比较专业,一般人可
推荐度:
导读MySQL5.7SYS系统SCHEMA_MySQL:在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:MySQL4.1 提供了information_schema 数据字典。从此可以很简单的用SQL语句来检索需要的系统元数据了。MySQL5.5 提供了performance_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)

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

MySQL5.7SYS系统SCHEMA_MySQL

MySQL5.7SYS系统SCHEMA_MySQL:在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:MySQL4.1 提供了information_schema 数据字典。从此可以很简单的用SQL语句来检索需要的系统元数据了。MySQL5.5 提供了performance_schema 性能字典。 但是这个字典比较专业,一般人可
推荐度:
标签: 系统 mysql sys
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top