非常に奇妙な問題が発生しています。データが適切かつタイムリーに挿入されているにもかかわらず、ストアド プロシージャが返されません。これに関する最も驚くべきことは、レコードのタイム スタンプ フィールドが常にミリ秒以内に入力されるため、データが非常に速くテーブルに取り込まれているように見えることです。しかし、リターンは決して起こりません。
このすべての重要な部分は、負荷がかかった状態でのみ発生するということです。個々のリクエストは問題ありません。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 ポリシーを使用せずに非常にコストのかかるクエリを実行する人もいましたが、これは脆弱なハードウェアの負荷バランスを崩していました。しかし、すべてのヒントをありがとう。