Performance 优化查询以降低i/o压力有意义吗?

Performance 优化查询以降低i/o压力有意义吗?,performance,sql-server-2008,hard-drive,Performance,Sql Server 2008,Hard Drive,我有一个只读数据库(产品),它在自己的SQLServer2008上recides 我已经通过查看ActivityMonitor-report中最昂贵的查询优化了查询。我按CPU成本订购了报告。我现在有大约50个查询/秒,没有查询超过300毫秒 CPU时间正常(30%),内存仅使用20%(64GB) 有一个问题:磁盘时间稳定在100%(我查看了空闲时间性能计数器,并使用了IDERASSQL诊断管理器)。我可以看到product db的行为与我的order db不同,order db在不同的机器上,

我有一个只读数据库(产品),它在自己的SQLServer2008上recides

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

CPU时间正常(30%),内存仅使用20%(64GB)

有一个问题:磁盘时间稳定在100%(我查看了空闲时间性能计数器,并使用了IDERASSQL诊断管理器)。我可以看到product db的行为与我的order db不同,order db在不同的机器上,并且有更小的表:如果我查看探查器跟踪,我在product db中有查询,显示“read”列中的值高于50.000。在我的订单DB中,这些值永远不会高于1000。product db中的查询使用了许多常用的表表达式,用于处理大型表(有些表大约有500万个条目)

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

总有下一个瓶颈

他们说

既然您已经调整了CPU使用率,I/O负载自然会占据主导地位。你的表现已经可以接受了吗?如果选择“是”,停止,如果选择“否”,则必须估计需要花费多少时间进行进一步的调整,以及购买另一台服务器或更多硬盘是否更便宜

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


在试图加快I/O速度之前,请尝试减少生成的I/O。

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

如果您的其他资源(CPU和内存)没有过载,您可能不需要新的服务器。考虑为日志和临时文件添加SSD,和/或考虑是否可以合理地将整个数据库部署到SSD数组。


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

简言之,是的。优化CPU和IO

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

具有高IO(页面读取)的查询往往会进行全表扫描或以其他低效的方式工作


10次中有9次,相同的查询将接近列表的顶部,但如果您使用的是高CPU,但您仍然对性能不满意,那么请务必下一次使用高IO进程。

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

所以,是的,优化以尽可能地消除它

表索引是首先要做的事情

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

然后对数据表进行分区(如果这样做是合理的),以便只在一个或两个表分区上执行任何必要的表或索引扫描

那么我想你要么买更大的机器,有更多的RAM,要么买SSD,或者买SAN,或者买带SSD的SAN


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

对于服务器故障,这可能是一个更好的问题。您是否只有一张包含事务日志、用户数据库文件和tempdb的光盘?如果不是,哪一个磁盘队列长度长?@Martin Smith他的数据库是只读的,所以我不希望事务日志会有很大的负载。@Peter-确实如此。但是我有点不确定是从哪里来的
orderdb
@Malcolm-这是在完全独立的硬件上吗?Order db位于完全不同的服务器上。我只是用它来看看没有I/o压力的系统上的跟踪是什么样子的。