热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【原创】深入解析MySQL5.7SYS模式架构与应用

本文首先回顾了MySQL在数据字典方面的发展历程,从MySQL4.1引入的information_schema数据字典开始,使得用户能够通过标准SQL查询轻松获取系统元数据。在此基础上,深入探讨了MySQL5.7中SYS模式的架构与应用场景,详细解析了其在性能监控、查询优化等方面的优势与实际应用。

在说明系统数据库之前,先来看下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: 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)


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

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)


可以看到上面查询详细的详细,再也不用执行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)

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


本文出自 “上帝,咱们不见不散!” 博客,请务必保留此出处http://yueliangdao0608.blog.51cto.com/397025/1716616


推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 5G至4G空闲态移动TAU流程解析
    本文详细解析了用户从5G网络移动到4G网络时,在空闲态下触发的跟踪区更新(TAU)流程。通过N26接口实现无缝迁移,确保用户体验不受影响。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • openGauss每日一练:第6天 - 模式的创建、修改与删除
    本篇笔记记录了openGauss数据库中关于模式(Schema)的创建、修改和删除操作。通过这些操作,用户可以更好地管理和控制数据库对象。实验环境为openGauss 2.0.0,并使用由墨天轮提供的线上环境。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
author-avatar
mobiledu2502926333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有