我继承了基于.NET和SQL Server 2008 R2的支持解决方案。
架构是这样的,所有客户端必须彼此保持同步,这由winsock中心处理,每个客户端发送和接收所做更改的通知。这些通知采用更新类型和关键字段的形式。
收到通知后,客户端窗口会检查更新类型,如果他们认为有兴趣,则发出数据库命令(存储过程)以检索该键值的最新数据。通常调用的存储过程链接了许多表以返回相当大的对象。
我的问题是,当许多客户端处于活动状态时,他们在“相同”时间调用相同的存储过程并拖动例如a< 1秒查询,在隔离调用时可能需要c20秒,因为它可能等待其他客户端完成。
SQL服务器中有什么可以帮助我解决这个问题吗?我正在考虑缓存结果或方法,我可以阻止一个查询阻止另一个?
我很欣赏我应该对客户端代码和通知过程进行一些更改,以传递完全填充的对象,从而无需多次询问数据库。然而,这是具有有限寿命的遗留应用程序,这将以如此重要的方式升级是令人头痛的。如果在我可以使用的SQL服务器中有一个很好的简单开关,那就会给我带来我需要的时间!
谢谢, 安德鲁
答案 0 :(得分:0)
要记住的提示:
锁定类型可以是:
如果没有任何效果,您可以尝试分析查询计划,但是当您处于隔离环境并查询此过程时,您表示性能良好。
另一个性能问题是,如果临时表未进行优化,则tempdb数据库可能会超载。运行一个分析器来分析发生了什么。仅过滤评估结果所需的存储过程。
我会添加更多信息以防其他问题出现在我的脑海中。