如何加速SQL Server 2008 R2的并发相同查询

时间:2013-09-17 12:53:24

标签: sql sql-server sql-server-2008 stored-procedures database-performance

我继承了基于.NET和SQL Server 2008 R2的支持解决方案。

架构是这样的,所有客户端必须彼此保持同步,这由winsock中心处理,每个客户端发送和接收所做更改的通知。这些通知采用更新类型和关键字段的形式。

收到通知后,客户端窗口会检查更新类型,如果他们认为有兴趣,则发出数据库命令(存储过程)以检索该键值的最新数据。通常调用的存储过程链接了许多表以返回相当大的对象。

我的问题是,当许多客户端处于活动状态时,他们在“相同”时间调用相同的存储过程并拖动例如a< 1秒查询,在隔离调用时可能需要c20秒,因为它可能等待其他客户端完成。

SQL服务器中有什么可以帮助我解决这个问题吗?我正在考虑缓存结果或方法,我可以阻止一个查询阻止另一个?

我很欣赏我应该对客户端代码和通知过程进行一些更改,以传递完全填充的对象,从而无需多次询问数据库。然而,这是具有有限寿命的遗留应用程序,这将以如此重要的方式升级是令人头痛的。如果在我可以使用的SQL服务器中有一个很好的简单开关,那就会给我带来我需要的时间!

谢谢, 安德鲁

1 个答案:

答案 0 :(得分:0)

要记住的提示:

  • 首先,将WITH(NOLOCK)添加到可以执行此操作的表中。请记住,NOLOCK是READUNCOMMITED的提示,这意味着它不会读取正在处理的挂起更改,但会阻止等到表发布后
  • 在生产服务器中进行调查时使用sp_who2。在多台计算机上启动应用程序或网站,以重现导致性能降低的方案,获取需要时间的报告或操作,并使用sp_who2分析Management Studio中正在发生的情况。您将能够识别SUSPENDED选择
  • 使用sp_lock查看确切锁定的对象

锁定类型可以是:

  • MD - 元数据锁定
  • 数据库 - 数据库锁
  • TAB - 表锁
  • PAG - 页面锁定

如果没有任何效果,您可以尝试分析查询计划,但是当您处于隔离环境并查询此过程时,您表示性能良好。

另一个性能问题是,如果临时表未进行优化,则tempdb数据库可能会超载。运行一个分析器来分析发生了什么。仅过滤评估结果所需​​的存储过程。

我会添加更多信息以防其他问题出现在我的脑海中。