前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MYSQL 从PS说起,但不止于PS , IS 中innodb buffer 分析(5)

MYSQL 从PS说起,但不止于PS , IS 中innodb buffer 分析(5)

作者头像
AustinDatabases
发布2022-04-05 14:11:49
发布2022-04-05 14:11:49
5490
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

这已经是这个系列的第五期了,从PS到SYS,基本上这两个可以获取整体的MYSQL8的性能信息(目前学到的需要整体在8.022版本才有之前介绍的所有的功能,8.018可以有90%的功能)。所以选择MYSQL 从高可用的角度以及监控的角度来看,版本至少应该在8.022以上。

言归正在,MYSQL Information schema 本身是从MYSQL 5.0开始有的,记得当时在使用的时候尤其5.5, 对于IS 的感觉和现在对于SYS 的感觉是一样的,也是插件,也不敢开,开了就对系统的性能有影响,那也是差不多有10年前的事情了。当时IS 推出是对于MYSQL是十分重要的,获得MYSQL的信息在没有IS 大多是通过show engine innodb status; 获得。

转换到MYSQL8 整体的IS 对比之前的 MYSQL 5.X 更规整和调理了,IS 本身是一个虚拟的结构,通过具有全局权限的USAGE,process 等的账号来查看其中的信息。

上面的information_schema中的innodb_metrics 可以理解为对于MYSQL 数据库中的所有的信息的记录,举例我们对于dml 操作中的update

下面我们举一个例子

我们针对此时此刻的MYSQL 的UPDATE 操作的个数进行记录,看看一分钟到底进行了多少UPDATE 操作。上图中针对information_schema 中的innodb_metrics 中的update 的数据进行初始化,其中只对count_reset 进行更新,此后的UPDATE 操作就直接在这个 column累加,另外update操作中的重复update是不记录在这里,有效的对产生实际写入磁盘的UPDATE起作用。所以针对某一个时间段统计INSERT ,DELETE ,UPDATE 有了更方便的手段,这里统计的参数 314个,完全覆盖了,如下的方面,包含的数据库操作,数据库底层操作信息,I/O, 数据库操作的性能等等,有点类似SQLserver 中的性能计数器。

| metadata | lock | server | buffer | buffer_page_io | os | transaction | purge | undo | log | compression | index | adaptive_hash_index | file_system | change_buffer | dml | sampling | ddl | icp | cpu | page_track | dblwr 具体每个详细的功能可以打开表后,针对相关的监控项目与系统的帮助文件进行查询。

2 在MYSQL的表设计中,有些表可能会误使用系统关键字,

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, RESERVED FROM information_schema.COLUMNS INNER JOIN information_schema.KEYWORDS ON KEYWORDS.WORD = COLUMNS.COLUMN_NAME WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys' ) ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME; 上面的语句可以通过查询,搜寻到在用户表中,使用了KEY WORD的表

针对上面的情况可以开发出很多短时的监控方案,来针对一些突发的事情,

MYSQL 基于对于系统性能的考虑,添加了 information_schema_stats_expirty 变量,通过变量可以控制在MYSQL CACHE 中的数据驻留的刷新的时间。默认这个时间是 1天 86400秒。而MYSQL 5.X 中这个刷新的频率相当于0 无时不刻的在刷新中。

在information 中的一些功能有利于我们对MYSQL 整体数据库的使用情况有一些了解例如,一个MYSQL intance中到底有多少表在我们的innodb buffer pool中,我们是可以通过innodb_buffer_page来进行查询的。

举例我们还可以通过information中的表来查看到底有多少行数据多少索引,已经加载在我们的innodb buffer 中,来分析那些索引是HOT 的索引,以及多少行数据已经加载到我们的innodb buffer中。

SELECT table_name,index_name,count(*) as 'index_number',sum(number_records) as 'rows_index' FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE page_type = 'index' group by table_name,index_name;

查找用户表中的复合索引以及索引名字

select table_name,index_name from STATISTICS WHERE TABLE_SCHEMA NOT IN ('mysql','sys','performance_schema') group by index_name,seq_in_index,table_name having seq_in_index >=2;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档