5

SQLServerSPでロックタイムアウトを延長しようとして問題が発生しました。何を試しても「ロックリクエストのタイムアウト期間を超えました」とスローされ続けます。私はjava+jtds 1.2.2、c3p0 0.9.1、およびsqlserver2008を使用しています。試した設定は次のとおりです。

SET LOCK_TIMEOUT 10000 inside the SP and with con.createStatement().execute("SET LOCK_TIMEOUT 10000 ")SPを呼び出す前に。およびSPステートメント内:statement.setQueryTimeout(10);

SPは:sによって呼び出され、tatement = con.prepareCall("dbo.store_procedure ?,?,?", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 内部に「SET TRANSACTION ISOLATIONLEVELREPEATABLEREAD」を設定します。

何か疑惑はありますか?同様の問題を抱えている人はいますか?前もって感謝します

4

3 に答える 3

2

一部のトランザクションがまだ進行中かどうかを確認します。この問題の原因の 1 つは、コミットされていない、またはロールバックされていないトランザクションがあることです。

@@トランカウントを選択

上記のコマンドを使用して、既存のトランザクションを確認します。同じものをコミットまたはロールバックします。

于 2014-09-17T08:56:03.700 に答える
1

SQL Server 2008 以降を使用しておらず、LOCK_ESCALATION=Disabled を指定している場合は、ROWLOCK ヒントを忘れて構いません。SQL Serverは可能であり、私の経験からすると、おそらくそれを無視し、それがいっぱいになるロック(ページまたはテーブル)を取得します。SQL Server 2008 より前に強制ロック ヒントはありません。

それをクリアするとSET LOCK_TIMEOUT -1、無限のタイムアウトを指定するために使用できます。

そうすることを強くお勧めしません。代わりに、そのテーブルでロックを取得する必要があるクエリのトラブルシューティングと最適化を試みてください (これはあなたの責任であると仮定します)。

ロックされたリソースを監視しEXEC sp_lock TargetSPIDて、実際に取得されているロックの種類を確認します

別の注意: SET LOCK_TIMEOUT は現在の接続のタイムアウトを設定します。接続プールを使用している場合は、その接続を再利用するすべてのものに対してロック タイムアウトを設定しているため、アプリケーションで意図しない動作が発生する可能性があります。

于 2011-08-03T21:28:16.873 に答える
0

一部のトランザクションがまだ進行中かどうかを確認します。この問題の原因の 1 つは、コミットされていない、またはロールバックされていないトランザクションがあることです。

@@トランカウントを選択

上記のコマンドを使用して、既存のトランザクションを確認します。同じものをコミットまたはロールバックします。

于 2015-07-15T05:29:08.580 に答える