监视MySQL中未使用的索引

时间:2016-01-25 13:10:38

标签: mysql database-administration

我有一组维护查询执行时间很长的服务器。这是由于开发人员在不同点创建的索引。有没有办法监视对执行产生负面影响的未使用索引。

2 个答案:

答案 0 :(得分:7)

对于之前的mysql 5.6

默认的mysql包没有太多的分析统计数据,但有一些非官方的补丁你可以分析。

喜欢 userstats http://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 :(得分:0)

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