Oracle Database In Lock

3,657 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,657
On SlideShare
0
From Embeds
0
Number of Embeds
942
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Oracle Database In Lock

  1. 1. Oracle Database In Lock 2012/10/19 株式会社コーソル 渡部亮太
  2. 2. Who am I?  渡部 亮太(わたべ りょうた)  book  「プロとしてのOracleアーキテクチャ入門」  「プロとしてのOracle運用管理入門」  presentation  Oracle DBA & Developer Days 2010, 2011  Developers Summit 2009  Oracle OpenWorld Tokyo 2012 Unconference など  Blog  コーソル DatabaseエンジニアのBlog http://co-sol.jp/techdb/  株式会社コーソル  「CO-Solutions=共に解決する」の理念のもと、Oracle技術 に特化した事業を展開中  社員数: 94名 (エンジニアのほぼ全員がOracle Master 所有)Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 1
  3. 3. 本日お伝えしたいこと  Oracle Databaseには多数のロック機構が存在すること  それぞれのロック機構の役割と、ロック機構により実現される 同時実行制御に関するイメージ  注意書き  内部動作の情報が公開されていないなかで、渡部が推測した内 容がふくまれるため、本情報は、各自の理解を助けるための参考 にしてください  (当り前ですが)本情報を、何らかのアクションの唯一の「根拠」とし て活用することは避けてくださいCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 2
  4. 4. RDBMSにおけるロック機構の必要性  一般的なRDBMS(クライアント-サーバー型)では複数の 処理が同時に実行される  ロック機構により排他制御を行わないと、様々なよからぬこ とが起きる  データの整合性が崩れる  直列処理が並列実行されてしまう  領域割り当てが重複してしまう  管理構造が破壊される  などCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 3
  5. 5. データの整合性が崩れる #1 Process Process (or Session) (or Session)Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 4
  6. 6. データの整合性が崩れる #2 Process Process (or Session) (or Session)Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 5
  7. 7. 直列処理が並列実行されてしまう OK 処理#1 処理#2 NG 処理#2Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 6
  8. 8. 領域割り当てが重複してしまう Process Process (or Session) (or Session) 領域割り当て 領域割り当て 要求 要求Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 7
  9. 9. 管理構造が破壊される x y z OK NG x a z x y z aCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 8
  10. 10. Oracle Databaseのロック機構 ロック機構 説明 エンキュー FIFO型で多数のロックモードを持つロック機構 ユーザー型 : ユーザーの操作(DML実行、DBMS_LOCK実行など)に 対応してエンキューが獲得、解放される システム型 : Oracleの内部動作に対応してエンキューが獲得、解放さ れる ライブラリキャッシュ いわゆるDDLロック。オブジェクトの定義変更に関わる排他制御に用いられ ロック る ライブラリキャッシュ ライブラリキャッシュオブジェクトの実体であるメモリ領域(ヒープ)の排他制御 ピン に用いられる ラッチ 仕組みが単純で低コスト。原則的に排他モードのみ。 複数プロセスで共有されるメモリ領域の排他制御に用いられる Mutex ラッチよりもさらに低コスト。 ライブラリキャッシュオブジェクトをより細かい粒度で保護できる 行キャッシュロック 共有プール内のディクショナリキャッシュの排他制御に用いられるCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 9
  11. 11. 互換性とロック獲得待機 [例: 排他/共有モードを持つロックの互換性] 要求 S X 保持 なし ○ ○ ロック機構により、ロックモードの種類と S ○ × 互換性定義が異なることに注意 例) エンキューには7つのロックモードがある X × × 10 #1 ロック #2 対象 待機イベントX REQ HOLD mode=S mode=X #1 ロック #2 対象 HOLD HOLD mode=S mode=SCopyright (C) 2012 CO-Sol Inc. All Rights Reserved
  12. 12. Oracle DBでのロック状態確認方法 機能 説明 例)TXエンキューの場合 V$ビュー ロック種別に応じたV$ビューで V$LOCK、 ロック状態、ロック関連統計情 V$TRANSACTION な ど 報を確認できる 待機イベント ロック獲得待機発生時、待機 enq: TX - row lock セッションでロック種別、ロック contention など の使用形態に応じた待機イベ ントが発生し、V$SESSION やSQLトレースから確認でき る 各種診断機 トレースファイルにdumpした system state, hang 能 動作詳細情報から、ロックに analyze 関わる情報を確認できるCopyright (C) 2012 CO-Sol Inc. All Rights Reserved
  13. 13. エンキュー  様々なリソースに関わる同時実行制御に使用される  リソース毎に異なるタイプのエンキューが使用される  タイプはアルファベット2文字で表現される  例) TX = 行ロック, TM = 表ロック  獲得待機時に発生する待機イベント  "enq <タイプ> - <説明>"  例) TXエンキューの更新競合 → "enq: TX - row lock contention"  多数のロックモードと複雑な互換性を持つ(本日は説明を省略)Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 12
  14. 14. エンキューの種類と分類  エンキューの種類  非常に多くの種類のエンキューが存在  V$LOCK_TYPEから確認可能  エンキューごとに保護する対象が異なる  ユーザー操作に関わる観点から、以下の2つに分類  ユーザー型  TXエンキュー=行ロック  TMエンキュー=表ロック  ULエンキュー=DBMS_LOCK  システム型  TX, TM, UL以外の全てのエンキュー  CFエンキュー=制御ファイルへのアクセス制御用ロック  などCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 13
  15. 15. TXエンキュー  TXエンキューはユーザー型に分類されるエンキュー  獲得: トランザクションの開始(≒行の更新)  解放: トランザクションの終了(コミット or ロールバック)  TXエンキュー獲得待機時に発生する待機イベント  "enq: TX - row lock contention"  など  目的  データ(=行)の整合性を保護するCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 14
  16. 16. [デモ] TXエンキュー獲得待機  デモ  同一行の更新によるTXエンキューの獲得+保持と獲得要求の競 合  シナリオ  1. 行XをUPDATE(コミットしない) → TXエンキューA 獲得+保持  2. 別セッションで行XをUPDATE → TXエンキューA 要求 → 待機イベント"enq: TX - row lock contention"で待機Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 15
  17. 17. CFエンキュー  CFエンキューはシステム型に分類されるエンキュー  獲得:制御ファイルへのアクセス開始  解放:制御ファイルへのアクセス終了  制御ファイルにはDatabaseの管理情報が記録される  主にDatabaseの管理タスクが実行されるタイミングでCFエンキュ ーを獲得  例) ログスイッチ、チェックポイント  目的  制御ファイルに格納された管理情報の整合性保護Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 16
  18. 18. CFエンキューの競合とタイムアウト  CFエンキュー獲得待機時に発生する待機イベント  "enq: CF - contention"  CFエンキュー獲得タイムアウト  ORA-600[2103]が発生  CFエンキューの競合が問題となる状況  何らかの理由で制御ファイルへのI/Oがハング  Oracle のBug  論理的には・・・実際に多くのセッションが制御ファイルにアクセスし て場合も考えられなくもないCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 17
  19. 19. [デモ] CFエンキュー獲得待機  デモ  制御ファイルI/Oの遅延を疑似  シナリオ  1. gdbでブレークポイントを設定  2. ログスイッチ実行 → CFエンキュー獲得+保持  3. チェックポイント実行 → CFエンキュー要求 → 待機イベント"enq: CF - contention"で待機Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 18
  20. 20. ライブラリキャッシュロック  ライブラリキャッシュロックはオブジェクト定義変更に関わるロッ ク  排他モードで獲得:オブジェクトの定義変更  共有モードで獲得:オブジェクトの定義参照  良くある誤解  TMエンキュー(表ロック)とライブラリキャッシュロックを混同  獲得待機時に発生する待機イベント  " library cache lock"Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 19
  21. 21. ライブラリキャッシュロックの保護対象 Library Cache hash bucket object handle object handle heap 0 heap n library ・・・ cache lockCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 20
  22. 22. [デモ]ライブラリキャッシュロック  DDL実行でライブラリキャッシュロックを排他モードで獲得す る  デモシナリオ  1. 表にデフォルト値を含む列を追加 → 表のライブラリキャッシュロックを排他モードで獲得+保持  2. 表を参照するSQLを実行 → 表のライブラリキャッシュロックを共有モードで要求 → 待機イベント"library cache lock"で待機Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 21
  23. 23. ライブラリキャッシュピン  ライブラリキャッシュピンはオブジェクト定義+そのものに関わ るロック  排他モードで獲得:オブジェクトの変更  共有モードで獲得:オブジェクトの参照  獲得待機時に発生する待機イベント  library cache pin待機イベント  ライブラリキャッシュロックとライブラリピン  両者の関係性はあまり明確にされていない  一般的にロックを獲得した後、ピンを獲得or開放するCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 22
  24. 24. ライブラリキャッシュピンの保護対象 Library Cache hach bucket object handle object handle heap 0 heap n ・・・ library cache pinCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 23
  25. 25. [デモ]ライブラリキャッシュピン  ライブラリキャッシュピンはDDL実行で排他モードで獲得され る  デモシナリオ  1. 処理に長時間要するパッケージのプロシージャを実行 → パッケージのライブラリキャッシュピンを共有モードで獲得+保持  2. パッケージをコンパイル → パッケージのライブラリキャッシュロックを排他モードで獲得 → パッケージのライブラリキャッシュピンを排他モードで要求 → 待機イベント"library cache pin"で待機Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 24
  26. 26. ラッチ  SGA内に存在する共有メモリ領域の排他制御に使用され る  獲得:共有メモリ領域(群) へのアクセス開始  解放:共有メモリ領域(群)へのアクセス終了  共有メモリ領域へのアクセス  メモリ領域(データ)の更新、新規領域割り当て、管理構造(メタデ ータ)の更新など  基本的に獲得→解放は極めて短時間  一般にマイクロ秒(~ミリ秒)レベル  ラッチ獲得待機で発生する待機イベント  latch: <ラッチ名> (10.1-)  latch freeCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 25
  27. 27. ラッチ一覧  ラッチ関連V$ビュー  V$LATCH  V$LATCHNAME  V$LATCH_PARENT  V$LATCH_CHILDRENCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 26
  28. 28. shared poolラッチ  共有プールにおけるメモリ領域(=チャンク)の割り当てに関 わる同時実行制御に使用される  同じメモリ領域を誤って別の用途に割り当てないように  空き領域確保にともなう各種管理構造のメンテナンスがバッティン グしないようにCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 27
  29. 29. 共有プールとshared poolラッチ 説明の便宜上、非常に単純化して書いています free list bucket subpool size=xx size=yy shared pool latch size=zz size=xx size=yy shared pool latch size=zz ・ ・ ・ free areaCopyright (C) 2012 CO-Sol Inc. All Rights Reserved 28
  30. 30. [デモ]shared poolラッチ  デモシナリオ  1. V$LATCH_CHILDRENからshared poolラッチのアドレス を確認  2. oradebugでshared poolラッチを獲得  3. SQLを実行 → ハードパース発生 → チャンク確保要求 → shared poolラッチ要求 → 待機イベント"latch: shared pool" 発生Copyright (C) 2012 CO-Sol Inc. All Rights Reserved 29

×