生产环境中的数据库超时问题

本文关键字:超时 问题 数据库 生产环境 | 更新日期: 2023-09-27 17:59:31

通常,如何将生产环境中发生的DB超时问题重新创建到本地开发环境中?

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

生产环境中的数据库超时问题

在您尝试在开发环境中重新创建错误之前,您需要进行一些调查,以确定产品中最有可能出现性能问题的位置。

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

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

我建议你打开探查器,看看当你的产品环境出现超时问题时,你是否能识别出发生了什么。一旦你确定了发生的事情,你可能能够根据原因在开发环境中重现。

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

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

在开发环境中可能很难获得相同的超时。您需要使用与生产服务器相同类型的硬件和相同的负载。

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

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

如果参数变化很大,则可以通过在存储过程中添加并重新编译来强制SQL server每次创建一个新的辅助计划。

如果查询计划看起来不错,那么您需要在服务器上添加一个跟踪,并在存储过程中涉及的表上查找锁。