DB在生产环境中超时问题

时间:2011-06-17 21:09:56

标签: c# sql-server

通常,如何在生产环境中重新创建数据库超时问题到我的本地开发环境?

我的前端C#应用程序调用存储过程,使生产中的DB超时。这些DB超时问题非常间歇性。我尝试使用Begin Transaction锁定表,但它不起作用,因为SQL语句在表名旁边有“nolock”。

3 个答案:

答案 0 :(得分:1)

在您尝试在开发环境中重新创建错误之前,您需要进行一些调查,以确定性能问题最有可能发生在哪里。

当您意识到prod中出现的问题时,您可以利用SQL Server中的活动监视器来了解哪个进程被阻止,以及阻止它们进入哪个进程。我过去曾用过这个来追踪有问题的查询。

答案 1 :(得分:0)

您可能很难在本地开发环境中重现它,除非它是一个精确的镜像(用户数量,流量,数据量等)。

我建议打开探查器,看看是否可以在生产环境中发现超时问题时识别出发生了什么。您已经确定了您可能能够在您的开发环境中重现的事情,具体取决于原因。

让你开始使用探查器的东西:

http://msdn.microsoft.com/en-us/library/ms187929.aspx

答案 2 :(得分:0)

在您的开发环境中获得相同的超时可能会非常困难。 您需要使用与生产服务器上相同类型的hw和相同的负载。

超时很可能是由以下原因引起的: 1)死锁 2)缺少索引 3)错误的查询计划

如果您确切知道将哪些参数(它们的值)发送到存储过程,您可以使用SQL Managemnt studio或simular工具查看查询计划。 如果运行SQL 2008,查询分析将告诉您是否缺少索引。

如果参数变化很大,最好通过在存储过程中添加 with recompile 来强制SQL Server每次创建一个新的auery计划。

如果查询计划看起来很好并且花花公子,则需要在服务器上添加跟踪并查找存储过程中涉及的表的锁定。