我遇到了一个非常奇怪的问题:即使正确及时地插入了数据,存储过程也没有返回。最令人震惊的是,记录时间戳字段总是在几毫秒内填充,因此数据似乎非常快地进入表。但回归永远不会发生。
所有这一切的重要部分是它只发生在负载下——单个请求就可以了。只有当 DB 压力足够大时,这件事才开始发生。
欢迎任何想法,因为我几乎不了解什么是错误的。
这是简化的 C# 部分:
try
{
using (var conn = new SqlConnection(connString))
{
conn.Open();
using (var cmd = new SqlCommand(conn, ....)
{
cmd.CommandType = StoredProcedure;
cmd.ExecuteNonQuery();
// THIS NEVER EXECUTES:
ReportSuccess();
}
}
}
catch (TimeoutException)
{
// EXCEPTION HERE
}
和存储过程:
CREATE PROCEDURE dbo.Blah
BEGIN
INSERT dbo.MyTable VALUES (...)
INSERT dbo.MyTable2...
-- Here is where everything stops.
END
更新:我们尽力将超时和 SQL 服务器活动关联起来,并且似乎非应用程序用户活动导致了锁定。该过程旨在允许非常快速的插入和非常快速的读取。然而,有些人会在没有实际使用 DIRTY READ 策略的情况下执行非常昂贵的查询,这会破坏脆弱的硬件负载平衡。不过,感谢您的所有提示。