問題タブ [rowlocking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1350 参照

sql-server - MSSQL サーバーで行ロックを使用して更新する

ロック後にレコードを更新するために、SQLサーバーのROWLOCKを理解しようとしていました。これが私の観察であり、ROWLOCKがテーブルまたはページロックのようなものであるかどうか、または正しく試していないかどうかを確認したいと思います。ROWLOCK は、テーブルまたはページではなく、行のみに対するロックである必要があります。

これが私が試したものです:

IDNamerow_lock_temp_testの2 つの列を持ち、PK やインデックスを持たない単純なテーブルを作成しました。ここで、2 つの異なるクライアントであるが同じ資格情報である SQL Server を開き、次のように一連のクエリを実行しようとしました。

クライアント 1:

クライアント 2:

C-1 でクエリ 1、2 を実行し、C-2 に移動して同じクエリを実行しました。両方のクライアントがクエリを実行し、トランザクションをコミットしました。すべて問題ありません。

次に、クエリを更新するために RowLock を追加しました。

C-1

C-2

ここで、C-1 でクエリ 1 と 2 を実行してから C-2 に移動し、同じ 2 つのクエリを実行しようとしましたが、行が C-1 によってロックされているため、クエリは期待どおりスタックし、それまでキューに入れておく必要があります。トランザクションは C-1 でコミットされます。C-1でトランザクションをコミットするとすぐに、C-2でクエリが実行され、C-2でもトランザクションをコミットしました。すべて良い。

ここでは、行 ID = 3 で同じ一連のクエリを実行する別のシナリオを試しました。

C-2

C-1 で最初の 2 つのクエリを実行してから、C-2 の最初の 2 つのクエリを実行しました。両方のクライアントで行 ID が異なりますが、それでも C-2 のクエリがスタックしました。これは、id = 2 でクエリを更新しているときにページまたはテーブルがロックされたことを意味します。行ロックを予期していましたが、ページまたはテーブル ロックのようです。

また、xlock、HOLDLOCK、および UPDLOCK をさまざまな組み合わせで使用してみましたが、常にテーブルをロックしています。行のみをロックする可能性はありますか。

選択と挿入は期待どおりに機能しています。

前もって感謝します。

0 投票する
1 に答える
57 参照

mysql - MySQL でのシリアル化可能な行ベースのロック

データベースを MsSQL から MySQL に変換しようとしています。

MsSQL に存在する Serializable 分離​​レベルに対して、MySQL でトランザクション構成をどの程度正確に行う必要がありますか? MsSQL キーワードが機能しなかったためです。

例;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION;
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE 条件 GO
COMMIT TRANSACTION;
行く

これを除いて; トランザクションの開始とコミットの間にテーブルの行でトランザクションを行う場合、行ベースのロック機能はありますか?

例;

UPDATE テーブル名 SET 列 1 = 値 1、列 2 = 値 2、... WHERE 条件

// 条件のみの行ベースのロック

デフォルトで無効になっている場合、有効にするにはどうすればよいですか?

ありがとうございました。