通常,如何在生产环境中重新创建数据库超时问题到我的本地开发环境?
我的前端C#应用程序调用存储过程,使生产中的DB超时。这些DB超时问题非常间歇性。我尝试使用Begin Transaction锁定表,但它不起作用,因为SQL语句在表名旁边有“nolock”。
答案 0 :(得分:1)
在您尝试在开发环境中重新创建错误之前,您需要进行一些调查,以确定性能问题最有可能发生在哪里。
当您意识到prod中出现的问题时,您可以利用SQL Server中的活动监视器来了解哪个进程被阻止,以及阻止它们进入哪个进程。我过去曾用过这个来追踪有问题的查询。
答案 1 :(得分:0)
您可能很难在本地开发环境中重现它,除非它是一个精确的镜像(用户数量,流量,数据量等)。
我建议打开探查器,看看是否可以在生产环境中发现超时问题时识别出发生了什么。您已经确定了您可能能够在您的开发环境中重现的事情,具体取决于原因。
让你开始使用探查器的东西:
答案 2 :(得分:0)
在您的开发环境中获得相同的超时可能会非常困难。 您需要使用与生产服务器上相同类型的hw和相同的负载。
超时很可能是由以下原因引起的: 1)死锁 2)缺少索引 3)错误的查询计划
如果您确切知道将哪些参数(它们的值)发送到存储过程,您可以使用SQL Managemnt studio或simular工具查看查询计划。 如果运行SQL 2008,查询分析将告诉您是否缺少索引。
如果参数变化很大,最好通过在存储过程中添加 with recompile 来强制SQL Server每次创建一个新的auery计划。
如果查询计划看起来很好并且花花公子,则需要在服务器上添加跟踪并查找存储过程中涉及的表的锁定。