【问题标题】:How do I determine if I can delete some indexes from the impressions table如何确定是否可以从印象表中删除某些索引
【发布时间】:2015-01-09 14:25:05
【问题描述】:

我正在将印象派 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 控制器操作请求索引

--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 初级

【问题讨论】:

    标签: mysql ruby-on-rails indexing impressions


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我觉得没那么简单。在撰写印象时,我使用impressionist(@article,'', :unique => [:ip_address, :session_hash]) 表示它基于 IP 地址和会话写入,以避免重复。这几乎肯定也使用了索引。
    • 是的,所以你应该保留这些。您可以删除的其他内容。
    【解决方案2】:

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

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

    如果您确定索引是重复的,您可以DROP 它不会产生不良影响。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2023-04-10
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多