1

我将印象派 gem 用于基于 Ruby on Rails 的网站。我们的数据库是mysql。印象表大约有 2M 条记录,这对 MySql 应该没有问题。表大小为 800M,这开始对我们的服务器征税。表的数据大小为200M,索引大小为600M。大多数索引是由 gem 预定义的。有没有办法确定这些索引是否正在使用或可以删除​​?

1,310,855,040 控制器action_session_index

1,310,855,040 控制器action_ip_index

1,310,855,040 控制器action_request_index

--880,757,504 poly_request_index

--880,757,504 impressable_type_message_index

--880,757,504 poly_session_index

--880,757,504 poly_ip_index

-----6,854,144 初级

4

2 回答 2

1

他们的自述文件说:“还没有报告……这个东西只是创建数据。”

创建索引是为了加快计数方法。

@widget.impressionist_count
@widget.impressionist_count(:start_date=>"2011-01-01",:end_date=>"2011-01-05")

在这些方法中删除您未在应用程序中使用的所有字段的索引应该是安全的。

注意:这个答案来自阅读他们的源代码几分钟。我没有使用过 gem

于 2015-01-09T14:33:19.407 回答
0

您可以手动或使用 Percona 工具查找重复索引(顺便说一下,该工具的文档解释了重复索引是什么。

http://www.percona.com/doc/percona-toolkit/2.2/pt-duplicate-key-checker.html

如果您确定索引是重复的,则可以DROP在没有不良影响的情况下使用它。

除此之外,您需要分析查询负载并确定您的查询是否不使用所有索引。这真的很辛苦。您可以从打开 MySQL 常规查询日志一两天或生产高峰时段开始。然后您可以分析日志中的查询。例如,您可以使用EXPLAIN前 50 个最频繁的查询并查看正在使用哪些索引。

如果你确实删除了某些索引,你需要密切关注你的系统性能之后;你可能错过了一些重要的东西,你需要重新制作它们。

但是看:我们在这里谈论的磁盘空间价值不到一美元。 如果您使用昂贵的固态磁盘驱动器,可能需要 5 美元。如果 MySQL 由于这些表的大小而变慢,请花时间调整它,而不是尝试节省 1 GB 的两个磁盘表空间。也许您需要调整内部 RAM 缓冲区大小,甚至添加索引或类似的东西。

这里有一些关于这样做的好材料。 http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/

于 2015-01-09T14:46:40.050 回答