代码之家  ›  专栏  ›  技术社区  ›  Mathias F

优化查询以减少i/o压力有意义吗?

  •  2
  • Mathias F  · 技术社区  · 14 年前

    我已经通过查看activity monitor-report中最昂贵的查询优化了查询。我按CPU成本订购了这份报告。我现在有大约50个查询/秒,没有超过300毫秒的查询。

    CPU时间正常(30%),内存只被20%(64GB中的)使用。

    如果我要花时间优化I/o性能查询,或者只是添加一台服务器,我就不是舒尔。通过优化查询持续时间,我已经添加了丢失的索引。优化i/o是通常要做的事情吗?

    4 回复  |  直到 14 年前
        1
  •  5
  •   BradC    14 年前

    简而言之,是的。优化 二者都

    具有高CPU的查询往往执行不必要的内存内排序(有时效率低下)哈希连接或复杂逻辑。

    具有高IO(页面读取)的查询倾向于执行全表扫描或以其他效率低下的方式工作。

        2
  •  4
  •   Peter G.    14 年前

    总有下一个瓶颈。

    他们说。

    关于I/O调整,请尝试看看您可以通过简单的措施实现什么。有时你可以用CPU交换I/O,反之亦然。压缩就是一个例子。然后,您将调整作为当前瓶颈的组件。

    在试图使I/O更快之前,请尝试减少生成的I/O。

        3
  •  1
  •   Paul McMillan    14 年前

    为查询寻找明显的IO性能改进,但更重要的是,查看如何在服务器级别提高IO性能。

    如果您的其他资源(CPU和内存)没有过载,那么您可能不需要新的服务器。考虑为日志和临时文件添加一个SSD,和/或考虑是否可以将整个DB安装到一个SSD数组中。

    当然,清除磁盘IO瓶颈可能会提高CPU使用率,但如果性能接近可接受的水平,这可能会改善一些情况,使您现在可以停止优化。

        4
  •  0
  •   Zan Lynx    14 年前

    除非您使用的是ssd或DB优化的SAN,否则IO几乎总是数据库应用程序中的限制。

    首先要做的是表索引。

    然后,添加尽可能多的RAM,达到DB文件的完整大小。

    然后我想你要么买更大的机器和更多的RAM和/或购买ssd或一个SAN或一个SAN与ssd。

    或者,重建整个数据库应用程序以使用NoSQL或数据库分片之类的东西,并在中间接口层中实现所有关系、连接、约束等。