sOl*_*tan 3 t-sql sql-server performance
我正在运行SQL Server 2008 R2并尝试微调性能.我做了我能做的一切:
我有一个24/7系统,可以不断存储数据.有时我们会做读取,这就是问题所在.有时读取需要几秒钟或更短时间(这对我们来说是预期和可接受的),有时,读取需要几秒钟,可能在存储过程完成之前一分钟,我们在UI上呈现数据.如果我们再次阅读,它会更快.SQL事件探查器将跟踪花费几秒钟的特定SP或查询.我们会放大那个SP,尽我们所能做我们可以做的一切来优化它.我还跟踪了auto stats事件和重新编译事件.很难判断是否正在更新统计信息导致读取花费很长时间,或者重新编译是否导致了这种情况.有时候,我看到分析器跟踪了读取查询的重新编译,这会花费几个不可接受的时间,有时则不会跟踪重新编译.
我试图阻止查询优化器阻止读取,直到它使用选项使用计划xml等重新编译或更新统计信息.但我遇到编译错误抱怨查询计划xml无效; 这可能是真的,因为查询是安静的:select + join涉及本地表var.我有点黑客攻击xml,也许这就是为什么它认为它无效.所以我放弃了使用计划提示.
我们尝试定期(每15分钟)手动运行更新统计数据,以尽可能多地保持统计数据最新,但这会损害性能.updatestats阻止写入,我确信甚至读取; updatestats似乎保持了一堆统计数据,平均而言大约需要80-90秒.等待那么久的阅读是不可接受的.
所以我的想法是让读取发生并防止重新编译/更新stat阻止它的情况,对吗?完全禁用自动统计数据有意义吗?或者在删除所有自动创建的统计数据后禁用自动创建统计数据?这可能与MS推荐相反,因为它们默认启用自动创建统计数据和自动更新统计数据,性能可能会受到影响,但您可以提供任何想法/提示.
问候
根据您的解释,看起来下面(全部或部分)可能正在发生.
使用以下查询以更精细的方式识别问题有很多好的查询.
参考:http://dl.dropbox.com/u/13748067/SQL%20Server%202008%20Diagnostic%20Information%20Queries%20%28April%202011%29.sql
还有很多其他的东西要看,但上面是一个很好的起点.