WITH(ROWLOCK)を使用してテーブルの行を更新しますが、 "sp_lock"を実行すると、ロックされたしたがって、トランザクションがコミットされる前に、他のトランザクションはテーブルの他の行を更新することができません。なぜ "WITH(ROWLOCK)"が効力を発揮しないのですか?更新ステートメントで "with(rowlock)"が使用されている間にテーブル全体がロックされる理由
私はROWLOCKで以下のクエリを使用しています:
DELETE FROM DefDatabaseSession WITH (ROWLOCK) WHERE ProcessName='test';
を同じ時間に他のトランザクションから同じテーブルの違い行の同じ削除操作を実行している私は、例外を
[取得していますSQLServer JDBCドライバ] [SQLServer]ロック要求のタイムアウト時間を超えました。ネストされた例外はjava.sql.SQLExceptionです。[newscale] [SQLServer JDBCドライバ] [SQLServer]ロック要求のタイムアウト時間を超過しました:com.newscale.bfw.udkernel.kernel.UdKernelException:udconfig.defdbsession.delete; SQLの未分類SQLException [DELETE FROM DefDatabaseSession WHERE ProcessName =?]; SQLステート[HY000];エラーコード[1222]。 [newscale] [SQLServer JDBCドライバ] [SQLServer]ロック要求のタイムアウト時間を超過しました。ネストされた例外はjava.sql.SQLExceptionです。[newscale] [SQLServer JDBCドライバ] [SQLServer]ロック要求のタイムアウト時間を超えました。
'EXPLAIN'がSQL Serverに存在しません
は、インデックスを定義してみます。計画を取得するには、「実際の実行計画を含める」ボタンを使用します。 – Alejandro
私はProcessName列のインデックスを持っています。 – vani
しかし、私は行ロックのみが必要です。他の行があると、他のスレッドが同時に削除することになります。 – vani