Javaアプリケーション内では、SQL Serverステートメントを使用していくつかのプロセスを一時停止します。(UPDLOCK、ROWLOCK)はテーブル全体をロックします。1行しか選択されていません
これは、SQL文です:
SELECT * FROM MESSAGES WITH (UPDLOCK, ROWLOCK)
WHERE MESSAGES.INTERNAL_ID IN ('6f53448f-1c47-4a58-8839-e126e81130f0');
実行から当然のIN
句の変更でのUUIDを実行します。
この私たちがロックするために使用するJavaコード:
entityManager.createNativeQuery(sqlString).getResultList()
上記のSQL文は1行しか返します。残念ながら、テーブル全体がロックされているようです。その結果、ブロックされていないか、一部のみがブロックされているにもかかわらず、すべてのプロセスがロックされます。
UPDLOCK
を指定してもテーブル全体がロックされるのはなぜですか?
追加情報:
MESSAGES.INTERNAL_ID
はNULL不可能であるNVARCHAR(255)
です。 それ以外の場合は、列に制約はありません。- 隔離レベルは
READ_COMMITTED
です。
「メッセージ」テーブルの定義を提供します(IDは主キーですか)。あなたのトランザクション分離レベルは何ですか? –
@MikhailLobanov質問に必要な情報を追加しました。 –