SlideShare a Scribd company logo
7
Most read
19
Most read
20
Most read
SQL Server のロック概要
~初心者向け~
第9回 関西DB勉強会
2018/10/13 SQLWorld お だ
自己紹介
織田 信亮(おだ しんすけ)
大阪で開発者しています
SQLWorld の代表です
http://odashinsuke.hatenablog.com/
Twitter:@shinsukeoda
今日の目標
SQL Server 初心者の方でも、ロックが何
か分かる
チョットデキル
デッドロックが発生する理由が何となく
分かる
ロック is 何?
共有資源をみんなで「行儀よく」使うた
めに、今自分が使ってるから使っちゃダ
メ―っていうやつ
ダメ。ゼッタイ。
行儀よく?
ロックが無い場合…
更新の競合によるダブルブッキング
在庫を超えた引き当て
update 在庫
set 数量 - @出荷数
where 商品 = @商品 and 数量 >= @出荷数
同時に更新が走ると
在庫.数量 がマイナスになる可能性がある!!
行儀悪い?
ダーティリード
他のトランザクションの未コミットのデー
タが見える
ロールバックされると、見えた値は正しくない値
トランザクション内で同じデータを複数回別の値
に更新する場合は、コミットされた最終の値とは
異なる値が見える可能性も…
他にも…
ノンリピータブルリード(ファジーリード)
同一トランザクション内で同じ問合せを複
数回した際に、他のトランザクションでコ
ミットされた UPDATE/DELETE により結果
が異なる
ファントムリード
同一トランザクション内で同じ問合せを複
数回した際に、他のトランザクションでコ
ミットされた INSERT により結果が異なる
行儀が悪い = ダメ?
行儀よくするには、パフォーマンスに影
響がでる
同時実行性/CPU使用率等
ケースバイケースで
1回しか読まないのに ノンリピータブル
リード は不要
一覧画面だったらダーティリードでも問題
無い場合もあるのでは?
ロックの粒度
ざっくりと
行(RID / KEY)
ページ
テーブル
ロックモード
共有ロック(S)
検索のロック
更新ロック(U)
更新予定のロック
排他ロック(X)
更新ロック
デッドロック
複数のトランザクションが互いに必要な
リソースをロックしあって処理が継続不
能になること
サイクルデッドロック
変換デッドロック
インデックス間デッドロック
サイクルデッドロック
更新順序が違う
デッドロックグラフ
変換デッドロック
同じ行を検索したあとに更新する
デッドロックグラフ
インデックス間デッドロック
更新と検索なのにデッドロック!
CIを条件にNCIを更新
クラスター化インデックスと非クラスター化イン
デックスのXロック
NCIを条件にCIを検索する
クラスター化インデックスと非クラスター化イン
デックスのSロック
インデックス間デッドロック – 例
• CI(クラスター化インデックス)のキー列=PK列
• NCI(非クラスター化インデックス)キー列=NAME列
デッドロックグラフ
トランザクション分離レベル
READ UNCOMMITTED
READ COMMITED
READ COMMITTED SNAPSHOT OPTION
REPEATABLE READ
SNAPSHOT
SERIALIZABLE
SQL Server のロック概要
参考資料
SQL Server Transaction Locking and Row
Versioning Guide
https://docs.microsoft.com/ja-jp/sql/2014-toc/sql-server-transaction-
locking-and-row-versioning-guide?view=sql-server-2014
デッドロックのサンプルクエリ
https://blog.engineer-memo.com/2013/07/15/デッドロックのサンプルクエリ
/
【SQL server】デッドロックの調査方法
http://memorandom-nishi.hatenablog.jp/entry/2016/11/14/024856
Trigger carsing a deadlock?
https://stackoverflow.com/questions/6282501/trigger-causing-a-deadlock

More Related Content

PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
PDF
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
PDF
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
[JAWS-UG Tokyo 32] AWS Client VPNの特徴
PDF
Amazon Aurora - Auroraの止まらない進化とその中身
PDF
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
PDF
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
マルチテナント化で知っておきたいデータベースのこと
[JAWS-UG Tokyo 32] AWS Client VPNの特徴
Amazon Aurora - Auroraの止まらない進化とその中身
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)

What's hot (20)

PDF
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
PDF
AWSからのメール送信
PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
PDF
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
PDF
Google Cloud で実践する SRE
PDF
AWSの課金体系
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
PPTX
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
PDF
AWS Black Belt Online Seminar AWS Direct Connect
PDF
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
PDF
Always on 可用性グループ 構築時のポイント
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
DDDを実践できるエンジニアを育成するための取り組みについて
PDF
AWS Black Belt Online Seminar Amazon Aurora
PDF
AWS Black Belt Online Seminar AWS Key Management Service (KMS)
PDF
AWS Organizations
PPTX
マイクロサービスにおける 結果整合性との戦い
PDF
AWS Black Belt Online Seminar 2017 Amazon Kinesis
PDF
20200714 AWS Black Belt Online Seminar Amazon Neptune
PDF
AWSのログ管理ベストプラクティス
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
AWSからのメール送信
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
Google Cloud で実践する SRE
AWSの課金体系
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
AWS Black Belt Online Seminar AWS Direct Connect
日本のお客様におけるAmazon Auroraへの移行・検証事例と技術ポイント
Always on 可用性グループ 構築時のポイント
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
DDDを実践できるエンジニアを育成するための取り組みについて
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar AWS Key Management Service (KMS)
AWS Organizations
マイクロサービスにおける 結果整合性との戦い
AWS Black Belt Online Seminar 2017 Amazon Kinesis
20200714 AWS Black Belt Online Seminar Amazon Neptune
AWSのログ管理ベストプラクティス
Ad

More from Oda Shinsuke (20)

PDF
SQL Server2022_PSPoptimization_pub.pdf
PDF
What's hyperscale
PDF
Dot net+sql server tips
PDF
Sql server 2019 ざっくり紹介
PDF
Spark on sql server?
PDF
Blazor 触ってみた
PDF
Linux + PHP でも SQL Server
PPTX
グラフデータベースの話し
PPTX
Sql server 2017 新機能のご紹介
PPTX
Sql server 2017 からはじめる graph データベース
PPTX
Transaction scopeまだダメ
PPTX
Sql serverと他dbの違いを押さえよう!
PPTX
2016年を振り返って
PPTX
Sql world とは
PPTX
開発者の方向けの Sql server(db) t sql 振り返り
PPTX
Sql world とは
PPTX
Ms build 触ってみよう
PPTX
Sql server2014復習とsqlserver2016の紹介
PPTX
Sql server sql database 最新機能紹介
PPTX
Selenium 触ってみよう
SQL Server2022_PSPoptimization_pub.pdf
What's hyperscale
Dot net+sql server tips
Sql server 2019 ざっくり紹介
Spark on sql server?
Blazor 触ってみた
Linux + PHP でも SQL Server
グラフデータベースの話し
Sql server 2017 新機能のご紹介
Sql server 2017 からはじめる graph データベース
Transaction scopeまだダメ
Sql serverと他dbの違いを押さえよう!
2016年を振り返って
Sql world とは
開発者の方向けの Sql server(db) t sql 振り返り
Sql world とは
Ms build 触ってみよう
Sql server2014復習とsqlserver2016の紹介
Sql server sql database 最新機能紹介
Selenium 触ってみよう
Ad

SQL Server のロック概要

Editor's Notes

  • #13: 更新の順序を揃えることで回避可能
  • #15: Sロックではなく、Uロックにすることで回避可能
  • #17: クラスター化インデックスを条件に非クラスター化インデックスのキー列を更新と、非クラスター化インデックスを条件にクラスター化インデックスの列を検索
  • #18: Sロックを取らない方法で検索する
  • #20: READ UNCOMMITTED:物理的に破損したデータを読み取らないことのみが保証された分離レベル。ダーティリードも何のその READ COMMITTED:COMMIT済みのデータを読み取る既定の分離レベル。書き込みロックはトランザクション終了まで、読取りロックはSELECT操作が終わるまで REPEATABLE READ:書き込み/読込ロックをトランザクションの終わりまで保持する。範囲ロックは取らないので、ファントムリードは発生する SERIALIZABLE:一番高い分離レベル。読取り/書き込みロックをトランザクションの終わりまで保持し、範囲指定付きの WHERE 句を SELECT で使うとファントムリードを防ぐための範囲ロックも取得する READ COMMITTED SNAPSHOT:READ COMMITTED と同じだが、Sロックを取らずに書き込みを待たない。行のバージョン管理を使用して、「クエリ開始時」のデータを参照する。REPEATABLE READ や HOLD LOCK 等のロックが必要な場合は、ロックを取る SNAPSHOT:トランザクション開始時点のデータを参照 両方とも テーブルの SCH-S(スキーマ共有ロック) は取るので、スキーマの変更はロック待ちになる