我在基于Ruby on Rails的网站上使用印象派宝石。我们的数据库是mysql。 印象表大约是2M记录,这对MySql没有任何问题。 表大小为800M,开始对我们的服务器征税。 表的数据大小为200M,索引大小为600M。大多数索引都是由gem预定义的。有没有办法弄清楚是否正在使用或可以删除这些索引?
1,310,855,040 controlleraction_session_index
1,310,855,040 controlleraction_ip_index
1,310,855,040 controlleraction_request_index
- 880,757,504 poly_request_index
- 880,757,504 impressionable_type_message_index
- 880,757,504 poly_session_index
- 880,757,504 poly_ip_index
----- 6,854,144 PRIMARY
答案 0 :(得分:1)
他们的README说:"还没有报告......这件事只是创造了数据。"
创建索引以加快计数方法。
@widget.impressionist_count
@widget.impressionist_count(:start_date=>"2011-01-01",:end_date=>"2011-01-05")
在这些方法中删除您未在应用中使用的所有字段的索引应该是安全的。
(注意:这个答案来自阅读他们的源代码几分钟。我还没有使用过宝石)
答案 1 :(得分:0)
您可以手动或使用Percona工具查找重复索引(顺便说一下,该工具的文档说明了重复索引的内容。
http://www.percona.com/doc/percona-toolkit/2.2/pt-duplicate-key-checker.html
如果你确定一个索引是重复的,你可以DROP
没有不良影响。
除此之外,您需要分析查询负载并确定您的查询是否不使用所有索引。那真的很辛苦。您可以首先打开MySQL常规查询日志一两天,或者达到峰值生产时间。然后,您可以分析日志中的查询。例如,您可以在前50个最常见的查询中使用EXPLAIN
,并查看正在使用的索引。
如果删除某些索引,则需要密切关注系统性能;你可能错过了重要的东西,你需要重新制作它们。
但是看一下:我们在谈论不到一美元的磁盘空间。如果您使用昂贵的固态磁盘驱动器,可能只需5美元。如果由于这些表的大小而导致MySQL速度变慢,请花时间调整它,而不是试图节省两千兆字节的磁盘表空间。也许您需要调整内部RAM缓冲区大小,甚至添加索引或其他类似的东西。
这是一些很好的材料。 http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/