Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
SQL Server のロック概要
~初心者向け~
第9回 関西DB勉強会
2018/10/13 SQLWorld お だ
自己紹介
織田 信亮(おだ しんすけ)
大阪で開発者しています
SQLWorld の代表です
http://odashinsuke.hatenablog.com/
Twitter:@shinsukeoda
今日の目標
SQL Server 初心者の方でも、ロックが何
か分かる
チョットデキル
デッドロックが発生する理由が何となく
分かる
ロック is 何?
共有資源をみんなで「行儀よく」使うた
めに、今自分が使ってるから使っちゃダ
メ―っていうやつ
ダメ。ゼッタイ。
行儀よく?
ロックが無い場合…
更新の競合によるダブルブッキング
在庫を超えた引き当て
update 在庫
set 数量 - @出荷数
where 商品 = @商品 and 数量 >= @出荷数
同時に更新が走ると
在庫.数量 がマイナスになる...
行儀悪い?
ダーティリード
他のトランザクションの未コミットのデー
タが見える
ロールバックされると、見えた値は正しくない値
トランザクション内で同じデータを複数回別の値
に更新する場合は、コミットされた最終の値とは
異なる値が見える可能性も…
他にも…
ノンリピータブルリード(ファジーリード)
同一トランザクション内で同じ問合せを複
数回した際に、他のトランザクションでコ
ミットされた UPDATE/DELETE により結果
が異なる
ファントムリード
同一トランザクション内で同じ問...
行儀が悪い = ダメ?
行儀よくするには、パフォーマンスに影
響がでる
同時実行性/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 Transaction Locking and Row
Versioning Guide
https://docs.microsoft.com/ja-jp/sql/2014-toc/sql-server-tran...
SQL Server のロック概要
Nächste SlideShare
Wird geladen in …5
×

SQL Server のロック概要

1.656 Aufrufe

Veröffentlicht am

2018/10/13 第9回 関西DB勉強会
SQL Server のロック概要~初心者向け~
https://kansaidbstudy.connpass.com/event/95803/

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

SQL Server のロック概要

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

×