【问题标题】:Locating unused indexes定位未使用的索引
【发布时间】:2013-08-21 19:23:57
【问题描述】:

在现有的 MYSQL 安装中使用什么方法来定位未使用的索引? Percona 有工具,但这些盒子是 Amazon RDS 实例,因此我们无权使用这些工具。

我确实找到了http://hackmysql.com/mysqlidxchk,我认为这可能是我目前唯一的选择。我可以手动梳理并查找具有重复前导键的索引,但这似乎也适得其反。

还有其他我没有看到的解决方案吗?

【问题讨论】:

标签: mysql indexing


【解决方案1】:

是的,有pt-index-usage,但您不一定需要针对您的 RDS 实例运行它。

您可以收集查询日志*,然后针对在任何地方运行的数据库快照运行 pt-index-usage,甚至在您的笔记本电脑上。该工具仅对日志中的所有查询运行 EXPLAIN,然后报告数据库中存在但未被任何 EXPLAIN 报告使用的任何索引。

RDS 仅支持基于表的查询日志,请注意由此带来的开销。

并且您需要先导出基于表的查询日志,然后再将其用作 pt-index-usage 的输入。这是一个可以导出的脚本:https://github.com/billkarwin/bk-tools/blob/master/export-slow-log-table

MySQL 5.6 还有一个新的 performance_schema 表 table_io_waits_summary_by_index_usage(参见 http://dev.mysql.com/doc/refman/5.6/en/table-waits-summary-tables.html),您可以启用它来了解每个索引从磁盘加载到 RAM 的频率,因此它正在被使用。虽然您可能没有使用 MySQL 5.6,但我不知道您是否可以在 RDS 上启用 performance_schema 选项。


我在 Percona 的同事刚刚发布了一篇博客,确认您可以在 Amazon RDS 上启用 performance_schema,但不能通过 Web UI。 http://www.mysqlperformanceblog.com/2013/08/21/amazon-rds-with-mysql-5-6-configuration-variables/

【讨论】:

  • 好点,卡尔文先生。我想我会沿着这条路走下去,看看我能产生什么。我发布到 mysqlidxchk 的链接基本上做同样的事情。我们在 5.1 上运行,因此 performance_schema 内容不可用。
【解决方案2】:

EXPLAIN 连同您的查询在这方面很有帮助。试试看,如果没有帮助,请说出来,将您想知道的内容作为评论缺失,我会调查一下。

【讨论】:

  • 这就是我现在所做的,但是根据我们当前的设置,我必须梳理数百个查询。我已经广泛使用 EXPLAIN 来纠正缓慢的查询问题,我只是进入下一个阶段,寻找被不必要地更新的残留索引。
猜你喜欢
  • 2019-05-04
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2016-04-04
  • 2013-07-19
相关资源
最近更新 更多