UDN-企业互联网技术人气社区

板块导航

浏览  : 1021
回复  : 0

[讨论交流] 网易这样用sys schema优雅提升MySQL易用性

[复制链接]
爱飞的火车的头像 楼主
  网易这样用sys schema优雅提升MySQL易用性

  声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。举报  本文详细地介绍了MySQL 5.7新引入的sys schema。首先,本文概要地介绍了sys schema的作用和定位;其次,分别介绍了sys schema中的视图、函数和存储过程;接下来,通过两个例子来演示sys schema的用法,便于大家理解sys schema带来的实实在在的好处;最后讨论了sys schema还可以增加的内容。

  1sys schema的介绍

  sys schema是MySQL 5.7.7中引入的一个系统库,包含了一系列视图、函数和存储过程, 该项目专注于MySQL的易用性,例如,我们可以通过sys schema快速的知道,哪些语句使用了临时表,哪个用户请求了最多的io,哪个线程占用了最多的内存,哪些索引是无用索引等。

  引入sys schema以后,MySQL的易用性将会得到极大地提升,MySQL的用户分析问题和定位问题,将更多的依赖sys schema,减少外部工具的使用。

  前面说过,sys schema中包含了大量的视图(只有sys_config是innodb表),那么,这些视图的信息来自哪里呢?视图中的信息均来自performance schema和information schema中的统计信息。MySQL Server blog中有一个很好的比喻:

  也就是说,performance schema和information schema中提供了信息源,但是,没有很好的将这些信息组织成有用的信息,从而没有很好的发挥它们的作用。而sys schema使用performance schema和information schema中的信息,通过视图的方式给出解决实际问题的答案。这就是sys schema的作用和目的,也是为什么sys schema值得我们花点时间学习的原因。

  2sys schema中的视图、函数和存储过程

  可以通过以下语句快速查看sys schema包含的视图、函数和存储过程
b1f192b859724f1881ff61c93ca1f902.jpg

  接下来将依次给出所有的视图、函数和存储过程,并进行简单的分析,希望能够达到抛砖引玉的效果。

  2.1 视图

  sys schema中的视图(和一张表)如下,通过名称就很容易猜到具体是做什么用的。
19d3599e07354b6da5f789b846979140_th.jpg
8f6454d64f294934be2df318cb95b6c1_th.jpg


  这里还没有列出全部的视图,对于每一个视图,都有两种形式:

  
6ea68b61c1bc4e79bb0c73d821c19eed_th.jpg

  前一种是便于人类阅读的形式,格式化了时间单位和字节单位,另外一种形式是指以”x$”开头的视图名称,是为了便于工具处理。如下所示:
43392b9106bb495186aba0675f253ab9_th.jpg


  我们再看一下host_summary_by_file_io的定义,如下所示:
72c8696c6ab34b938571f8ce22b33f76_th.jpg


  可以看到,定义非常复杂,如果不是sys schema提供了这么好用的视图,我们自己几乎无法从这么多信息中获取到有用的信息。

  2.2 函数

  如果你仔细看了上面的定义视图的SQL语句,你可能注意它使用了一个叫做sys.format_time的函数,这个函数也是随着sys schema一起发布,用以格式化时间单位。sys schema还包含了其他一些有用的函数,如下所示:
b19858ca35b345938da255408c9787fe_th.jpg


  2.3 存储过程

  下面的是sys schema包含的存储过程。可以看到,大部分存储过程都是PS开头的,PS是performance schema的简写,这些存储过程都是用来控制performance schema统计的行为。例如,ps_truncate_all_tables 的作用就是truncate所有performance schema中summary相关的表。

  如下所示:
95a0ee77825f443092b56f769b06d297_th.jpg

  3sys schema示例

  这一节简单的演示sys schema的用法,便于大家理解sys schema带来的实实在在的好处,然后讨论了sys schema还可以增加的内容。

  3.1 sys schema的用法

  我们来看几个与索引相关的例子:

  (1)如何查看数据库中的冗余索引,在MySQL 5.7之前,需要使用percona的 pt-duplicate-key-checker,现在直接查询sys.schema_redundant_indexes就可以了:

  (2)如何获取未使用的索引

  在MySQL 5.7之前,我们也可以通过information schema查看未使用的索引:
26cf7139180646579f537dab0c5f2f3a.jpg

  有了sys schema以后,直接查询schema_unused_indexes即可:

  (3)如何查看使用全表扫描的SQL语句(MySQL 5.7之前我不知道怎么看的额(⊙o⊙)…) 有了sys schema以后,直接查询statements_with_full_table_scans即可:

  3.2 sys schema可以引入的视图

  我发现,还有一些非常有用的信息,可以通过information schema 和performance schema获取到,但是,在sys schema中却没有。有鉴于此,个人感觉未来sys schema中的视图会继续增加。例如:

  查看没有主键的表
0eeff38e2b394e78b229e5b86795900a.jpg


  查看是谁创建的临时表

  
5d4c0b64d5c64040bae891346fab84d0.jpg


  没有正确关闭数据库连接的用户
295105b658794f739acfab7bed94a3c8.jpg

  这些都是比较有用的信息,适合加入到sys schema中。
4总结
  

  本文详细地介绍了sys schema的作用和组成,并通过几个例子演示了sys schema的易用性和不足,相信通过这篇文章,大家对sys schema能够有一个较完整的了解,也愿意花时间去深入了解sys schema中的各个视图。

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部