So-net無料ブログ作成
検索選択

スピンロックとラッチの違い [SQL Server]

SQL Serverオブジェクト構造を保護する為の仕組みにラッチとスピンロックというものがあります。


ラッチもスピンロックも短時間の間保持して他のスレッドからオブジェクトの多重更新などが
起きないように保護する仕組みです。
スレッド1がラッチを確保して例えばページ分割をしている最中にスレッド2が該当ページにアクセスすると
スレッド2はラッチ待ちをするためにYieldして後続のタスクを取り出します。
Yieldされて後回しになったタスクは後でまたスレッドに拾われてページアクセスします。
その頃にはラッチが解放されていることを期待できます。
OSで言えばセマフォやミューテックスのようなものです。

一方でスピンロックはYieldを行わないで待つ仕組みです。
ラッチのようにYieldするのではなく、そのままCPUを回しながらスピンロックが解放されるのを待ちます。
Yieldすることすらもったい無い(という表現がよいかは別として)状況で使います。

公式文書ではロックのパーティション分割に記載があります。
https://technet.microsoft.com/ja-jp/library/ms187504(v=sql.105).aspx

またスピンロックの競合については以下のホワイトペーパーがまとまっています。
http://download.microsoft.com/download/D/A/A/DAAD63AF-B06F-4F29-AF1D-68A78102ABF4/SQLServerSpinlockContention.pdf" target="_blank">http://download.microsoft.com/download/D/A/A/DAAD63AF-B06F-4F29-AF1D-68A78102ABF4/SQLServerSpinlockContention.pdf


スポンサードリンク



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:仕事

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:[必須]
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。