我正在使用印象派宝石的Ruby on Rails的网站。我们的数据库是mysql。impressions表大约有2M条记录,这应该不会对MySql造成问题。表的大小是800M,这开始给我们的服务器带来负担。表的数据大小为200M,索引大小为600M。大多数索引都是由创业板预先定义的。有没有办法确定这些索引中是否有任何索引正在使用或可以删除?
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主要
发布于 2015-01-09 22:33:19
他们的自述文件说:“还没有报告……这个东西只是创建了数据。”
创建索引是为了加快count方法的速度。
@widget.impressionist_count
@widget.impressionist_count(:start_date=>"2011-01-01",:end_date=>"2011-01-05")在这些方法中,删除应用程序中不使用的所有字段的索引应该是安全的。
(注意:这个答案是通过阅读他们的源代码几分钟得到的。我还没用过宝石)
发布于 2015-01-09 22:46:40
您可以手动或使用Percona工具查找重复索引(顺便说一句,该工具的文档解释了什么是重复索引。
http://www.percona.com/doc/percona-toolkit/2.2/pt-duplicate-key-checker.html
如果您确定某个索引是重复的,则可以对其执行DROP操作,而不会产生不良影响。
除此之外,您还需要分析查询负载,并找出查询是否没有使用所有索引。那真的是很难的工作。您可以从打开MySQL常规查询日志一天或两天,或高峰生产小时开始。然后,您可以分析日志中的查询。例如,您可以对前50个最频繁的查询使用EXPLAIN,并查看使用了哪些索引。
如果您确实删除了某些索引,则需要在以后密切关注您的系统性能;您可能遗漏了一些重要的内容,并且需要重新创建它们。
但是,看:我们这里讨论的磁盘空间不足一美元,如果您使用昂贵的固态硬盘驱动器,可能需要5美元。如果MySQL因为这些表的大小而变慢,那么花时间调优它,而不是尝试节省2 of的磁盘上表空间。也许您需要调整内部RAM缓冲区的大小,甚至添加一个索引,或者诸如此类的事情。
这里有一些关于如何做到这一点的好材料。http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/
https://stackoverflow.com/questions/27862701
复制相似问题