我有一个旧的web应用程序,有很多遗留代码,我需要提高一些报告的性能。我希望避免重写报告,因为它是标准的遗留应用程序,很难维护、测试和开发。因此,我试图通过在MSSQL (2008)中为报表查询添加索引来加快这些报告的速度。报表执行大约3-4k查询。
以下是我的改进计划:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERStextdata对查询进行分组,并按sum(duration) desc对查询进行排序。我得到了有趣的结果。当我改进报告#1的性能时,报告#2的性能就会下降。另外,有时在添加索引之后,性能会下降十倍。
我的问题:
发布于 2015-02-15 21:01:41
对于性能不佳的数据库,不适当/缺少索引可能是许多原因之一。 如果您认为没有足够的索引是导致性能低下的原因,那么就有工具可以检查缺少的索引是否是实际的问题,但有时问题可能是查询本身。 如果您的查询写得很糟糕,不管您添加了多少索引,它的性能都会很差。 有时候查询写得很好,有足够的索引来支持查询,但是没有足够的资源(内存、RAM、处理器马力)来快速完成工作。 我建议您在开始添加索引之前对数据库进行更多的调查,并引入更多以前从未存在过的问题。
一些有用的链接
Are you using SQL's Missing Index DMVs?
这将允许您查看是否有缺少的索引,查询可以通过添加索引获得性能。Wait statistics, or please tell me where it hurts
这个由Paul撰写的博客将帮助您准确地了解导致sql服务器性能缓慢的原因。无论是您的硬件、索引还是查询。Most Expensive Queries
这将允许您查看数据库中最昂贵的查询,我将逐个查询并尝试改进代码(如果可能的话),并检查是否有任何索引可以帮助查询降低其成本。Import
sql server中的性能调优并不是一项简单的任务,也没有灵丹妙药,您需要更多地研究数据库中的实际瓶颈,并针对这些瓶颈进行定位,并通过每次更改比较该更改如何影响数据库性能。祝你好运:)
发布于 2015-02-15 20:25:52
- they slowdown insertions/updates/deletions
- they influence query execution plan. As a result in some cases DB manager chooses to use index when it would be more appropriate to perform full table scan. Which in turn causes performance degradation.
https://stackoverflow.com/questions/28529696
复制相似问题