我有一个包含大量遗留代码的旧Web应用程序,我需要提高某些报告的性能。我想避免报告重写,因为它是标准的遗留应用程序,难以维护,测试和开发。因此,我试图通过在MSSQL(2008)中为报表查询添加索引来加速这些报表。报告执行大约3-4k个查询。
以下是我的改进计划:
1.运行
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
2。运行MSSQL探查器,然后执行报告
3.收集所有报告的查询,然后将它们导出到MSSQL
4.计算持续时间的总和
5.按textdata
对查询进行分组,并按sum(duration) desc
排序
6.执行分析器导出的查询并添加MSSQL Management Studio推荐的索引
7.重复步骤1到6并比较结果。
我得到了有趣的结果。当我改进报告#1性能时,报告#2的性能会降低。有时候,在添加索引后,我的性能也会下降十倍。
我的问题:
1.通过提高SQL查询性能来提高应用程序性能是一个好主意吗?
2.是否可以通过添加索引来改进执行3-4k SQL查询的报表的性能?
答案 0 :(得分:1)
如果DB是瓶颈,那么通过提高SQL查询性能来提高应用程序性能是一个好主意。根据上面提供的信息,我可以说,在您的情况下,数据库性能非常重要,值得改进。
通过添加索引可以显着提高执行大量查询的报表的性能。特别是如果表格本身包含大量记录(10 000或更多)。 但是,索引有其自身的缺点:
答案 1 :(得分:1)
对于性能较差的数据库,可能存在不适当/缺失的索引 其中一个原因。
如果你认为没有足够的指数是造成穷人的原因 性能然后有工具来检查丢失的索引是否是 实际问题,但有时问题可能是查询本身。
如果您的查询写得不好,无论您添加多少索引 会表现不佳。
有时查询写得很好并且有足够的索引 支持查询,但没有足够的资源(内存RAM, 处理器马力)快速完成工作。
我建议你先调查一下你的数据库 开始添加索引并引入更多从未存在过的问题 之前。
一些有用的链接
Are you using SQL's Missing Index DMVs?
这将允许您查看是否有任何缺失的索引,并且查询可以通过添加索引来获得性能。
Wait statistics, or please tell me where it hurts
Paul Randal撰写的这篇博客将帮助您准确了解导致SQL Server服务器性能下降的原因。无论是您的硬件,还是索引或查询。
这将允许您查看数据库中最昂贵的查询,我将按查询查询并尝试改进代码(如果可能),并检查是否有任何索引可以帮助查询以降低其成本。
导入便笺
在sql server中进行性能调整并不是一项简单的任务,也没有灵丹妙药,你需要调查更多以找到数据库中的实际瓶颈并将其作为目标,并且每次更改时都会对它进行比较。更改已影响您的数据库性能。祝你好运:)