监控MySQL中未使用的索引

7

我有一组服务器,维护查询执行需要很长时间。这是由于开发人员在不同时间创建的索引造成的。有没有办法监视未使用的索引,以避免对执行产生不利影响。

2个回答

15

对于 MySQL 5.6 之前的版本,默认包中没有很多用于分析的统计数据,但是有一些非官方补丁可以使用来进行分析。

例如 userstatshttp://ourdelta.org/docs/userstats

通过该补丁,您可以分析统计数据和未使用的索引。

请跟随以下链接执行:

https://www.percona.com/blog/2012/06/30/find-unused-indexes/

在 MySQL 5.6 及更高版本中,性能模式(PERFORMANCE_SCHEMA)跟踪索引IO。如果一个索引没有IO活动,则表示它没有被使用。

现在,sys架构提供了一个方便的视图,使得更容易识别未使用的索引:

http://www.markleith.co.uk/2011/04/18/monitoring-table-and-index-io-with-performance_schema/

DROP VIEW IF EXISTS unused_indexes;

CREATE VIEW unused_indexes AS
SELECT object_schema,
   object_name,
   index_name
 FROM performance_schema.table_io_waits_summary_by_index_usage 
 WHERE index_name IS NOT NULL
AND count_star = 0
ORDER BY object_schema, object_name;

请注意,此处显示的是从上次mysqld重启以来未使用过的索引。PERFORMANCE_SCHEMA统计数据在启动时会被重置。


1

对于MySQL 5.7及更高版本,您可以使用SYS模式以原始格式或用户可理解的格式检索数据。SYS模式从底层performance_schema和information_schema获取数据并以更好、更易懂的格式呈现。请参考此处


谢谢,我目前使用的是5.7.9。是否有一种自动获取特定时间内未使用索引或在未使用索引超过限制时发送邮件的方法? - Luke
1
您可以使用自定义SQL对象来利用MySQL 5.5+的Information_Schema、Performance_Schema和MySQL 5.7+的SYS模式中可用但在监视器/顾问中未公开的信息。CSOs不仅可以让您监视服务器指标,还可以让您监视服务器数据。如果您希望监视没有IO活动的未使用索引并收到邮件,请尝试https://www.webyog.com/product/monyog。您可以使用此查询来获取信息:`SELECT object_schema,object_name,index_name FROM sys.schema_unused_indexes;` - marklong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接