これは何? ORACLE の内部状態を示す情報の一つである 待機イベントについて解説します 待機イベントを知ることで 一歩進んだパフォーマンスチューニングが出来ます また 待機イベントという切り口を通して ORACLE のアーキテクチャに対する理解を深めていきます なお ORACLE のバージョンは

Similar documents
~~~~~~~~~~~~~~~~~~ wait Call CPU time 1, latch: library cache 7, latch: library cache lock 4, job scheduler co

今さら聞けない!? Oracle入門 ~後編~

今さら聞けない!? Oracle入門 ~前編~

サポートエンジニアが語るパフォーマンス問題の原因調査とチューニング 日本オラクル株式会社データベーステクノロジーサポート本部 Principal Technical Support Engineer 田島教子

OWI(Oracle Wait Interface)の概要

untitled

はじめに コース概要と目的 Oracle データベースのパフォーマンス問題の分析方法 解決方法を説明します 受講対象者 データベース管理者の方を対象としています 前提条件 データベース アーキテクチャ データベース マネジメント を受講された方 もしくは同等の知識 をお持ちの方 テキスト内の記述につ

スライド 1

Null

Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助とし

はじめに Oracle のチューニングポイントは 待機イベントを減らすこと!! 待機イベントの解消 = パフォーマンス向上 2

第 3 章代表的なチューニングポイント 3 Q. ストアド プロシージャを使用した SQL 共有率の向上 A. ストアド プロシージャを使用した場合 同じストアド プロシージャを実行する複数のユーザーが 同じ共有 PL/SQL 領域を使用します また ストアド プロシージャは解析済みで格納されている

OracleDBA(パフォーマンスチューニング(SQL編) - コピー

Agenda はじめに 目的とゴール Part1の振り返り AWRを使用した性能分析 AWR 概要 AWRに格納される情報 AWR レポートにおける分析アプローチ AWR 確認ポイント Case Study AWRとアーキテクチャの関係 まとめ Part2のポイント まとめ Copyright 20

MaxGauge_診断分析プロセス

Null

OracleDBA(パフォーマンスチューニング(SQL編) - コピー

PowerPoint -O80_RKI.PDF

How to Use the PowerPoint Template

Slide 1

Oracle Database 11g × Hitachi Storage Solutionsのベストプラクティス

PA4

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

Slide 1

Oracle Database 10g Release 2を使用したデータベース・パフォーマンス

A. 前ページからの続きです DBMS_SPACE.UNUSED_SPACE の各パラメータの意味 segment_owner = オブジェクトの所有者 segment_name = オブジェクト名 segment_type = オブジェクトタイプ total_blocks = セグメント合計ブロッ

Oracle Direct Seminar <Insert Picture Here> 試験対策ポイント解説 Bronze DBA11g 日本オラクル株式会社

Agenda Oracle Database の概要 Oracle Databaseの内部構造 Oracle Databaseの処理の仕組み Oracle Database の管理 メモリの管理 領域の管理 Oracle Database の運用ポイント ( 概要 ) データベースの起動と停止 デー

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

橡ExCtrlPDF.PDF

Slide 1

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ

Oracleの領域管理~トラブル防止のテクニック~


imt_817_tuning_11_1822.PDF

以下の事項は 弊社の一般的な製品の方向性に関する概要を説明するものです また 情報提供を唯一の目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため 購買決定を行う際の判断材料になさらな

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

Microsoft Word - nvsi_050090jp_oracle10g_vlm.doc

プレポスト【問題】

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Agenda パフォーマンス チューニングとは ボトルネック箇所の特定 代表的なチューニング項目 メモリ割り当てのチューニング ディスクI/Oのチューニング SQL 文のチューニング Copyright 2010, Oracle. All rights reserved. 2

untitled

Microsoft PowerPoint - J-S301167_idx_comp.ppt [互換モード]

Microsoft PowerPoint - MySQL-backup.ppt

データベース マネジメント ~ 研修受講後のスキルアップ サポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR2 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などをまとめたものです 研修受講後のスキルアップの一助として

perf_tool.PDF

PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗

Enterprise Manager 10gによるデータベース・パフォーマンスチューニング

AIP2016 Oracleバックアップ・復旧ガイド

How to Use the PowerPoint Template

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

はじめに コース概要と目的 Oracle を使用した開発 管理を行う上でのファースト ステップとして リレーショナル データベース管理ソフトウェアである Oracle の役割 基本機能 基本アーキテクチャを幅広く理解することを目的としています 受講対象者 これから Oracle を使用する方 データ

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

クエリの作成が楽になるUDF

TFTP serverの実装

組込み Linux の起動高速化 株式会社富士通コンピュータテクノロジーズ 亀山英司 1218ka01 Copyright 2013 FUJITSU COMPUTER TECHNOLOGIES LIMITED

ダンプ取得機能強化サポートオプション Enterprise Edition

今週の進捗

Microsoft PowerPoint - 3-Forms-Others.ppt

AIP2016 Oracleバックアップ・復旧ガイド

Microsoft Word - Android_SQLite講座_画面800×1280

ここからはじめる、Oracle データベース入門・アーキテクチャー編

Microsoft PowerPoint pptx

V-Client for Mac ユーザーズガイド

Linkexpress トラブル初期調査資料 採取コマンド使用手引書

pg_monz 監視アイテム一覧 :Template App PostgreSQL Template App PostgreSQL アプリケーション LLD アイテムトリガー監視タイプ更新間隔ヒストリトレンドデフォルト説明ステータス pg.get pgsql.get.pg.bgwriter Zabb

PowerPoint -O80_REP.PDF

OPENSQUARE

GHS混合物分類判定システムインストールマニュアル

Agenda

Microsoft PowerPoint - Lite10g_SyncArchitecture.ppt

D1印刷用.PDF

目次 1 集計関数 / 分析関数とは 2 集計関数 / 分析関数のパフォーマンス効果 3 ケーススタディグループ小計やクロス集計を計算するランキングを表示する前月比較を表示する累計を計算する移動平均を計算する構成比を計算する Oracle8i SQL Oracle8i Oracle Oracle C

Oracle Data Pumpのパラレル機能

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

3 Q. CONFIGURE で設定した RMAN 構成情報をデフォルトに戻す方法 A. CLEAR コマンドを使用すると 永続設定値をデフォルトに戻すことができます CLEAR コマンドでは 個々のパラメータを 1 つずつ CLEAR します SYS.DBMS_BACKUP_RESTORE.RES

PowerPoint プレゼンテーション

OWI(Oracle Wait Interface)のコンセプトと実用ツールMaxGaugeの紹介

PowerPoint Presentation

WebOTXプロファイラを使用したメモリリーク調査方法


McAfee Application Control ご紹介

HIGIS 3/プレゼンテーション資料/J_GrayA.ppt

標準化 補足資料

Maser - User Operation Manual

PowerPoint Presentation

K5 DB powered by Oracle® Cloud FAQ

仕様書用テンプレート

…l…b…g…‘†[…N…v…“…O…›…~…fi…OfiÁŸ_

平成20年度成果報告書

Slide 1

Recovery Managerのバックアップおよびリカバリの最適化

Pro/INTRALINK 10.0 Curriculum Guide

ユーザーズマニュアル 有線ネットワークシステム 発行日 2016 年 3 月 30 日

稼働率100%を目指す、OracleDB予兆監視

Microsoft Word - PDFHS _ doc

日本オラクル株式会社

Transcription:

ORACLE 入門講座待機イベントを知ろう アリエル ネットワーク鈴木健介

これは何? ORACLE の内部状態を示す情報の一つである 待機イベントについて解説します 待機イベントを知ることで 一歩進んだパフォーマンスチューニングが出来ます また 待機イベントという切り口を通して ORACLE のアーキテクチャに対する理解を深めていきます なお ORACLE のバージョンは 10.2 を想定しています

待機イベントってなんね? ORACLE でのセッションが ある特定の待機状態にあることを表したもの 待機とは? ->CPU 使用中以外すべての状態 ORACLE セッションの状態 CPU 使用中 待機中 SQL 解析処理検索条件による絞込み処理ソート処理 行ロック待ちディスク I/O 完了待ち他のプロセスの処理完了待ちユーザからの要求待ち

待機イベントを知ると何がうれしい? なんとなく ORACLE が遅い でもその原因が分からない そんなとき 何が起きてて遅いのかが分かる ORACLE の内部動作を透かしてみることが出来る

まずは見てみよう 今接続しているセッションの待機イベントを見てみる v$session(9i 以前では v$session_wait) で現在接続しているセッションの待機イベントを調べることが出来る $ sqlplus /as sysdba SQL> select sid, username, event, state from v$session; SID USERNAME EVENT STATE ---------- ---------------- -------------------------------- ------------------- 20 HANA_TEST SQL*Net message from client WAITING 22 LEOTEST SQL*Net message from client WAITING 24 HANA_TEST SQL*Net message from client WAITING 28 TOZAWA SQL*Net message from client WAITING 29 V160 SQL*Net message from client WAITING 30 LEOTEST SQL*Net message from client WAITING 32 V160 SQL*Net message from client WAITING 37 V160 SQL*Net message from client WAITING 126 SYS SQL*Net message to client WAITED SHORT TIME 以下略 103 rows selected. SQL> なにが起きているか? => 何も起きてません なお STATE が WAITING でない場合は CPU 使用中の状態 EVENT には前回待機したイベントが表示される

待機イベントを見る方法 待機イベントを確認する方法としては 見たい尺度によって以下の方法がある 採り方 見方については 必要に応じて後で述べる 1. 今 発生している待機イベント v$session, v$session_wait 2. システム起動時からの累計 v$system_event 3. セッションごとの累計 v$session_event 4. 任意のセッションで発生した全ての待機イベント SQL トレース 5. ある期間内で発生した待機イベントの統計 AWR, Statspack, bstat/estat ( 内部では 期間開始点と終了点での v$system_event の差分をとっている )

ここまで読んで 分かった あとは自分で調べる という人のために # もうひとつ重要な情報待機イベントは最大 3 つのパラメータを持っていて イベントの詳細情報を示している パラメータはそれぞれ P1, P2, P3 という列名で v$session から確認できる 各パラメータの意味は 待機イベントによって異なる 例えば db file scattered read なら P1: 読み込むファイル番号 P2: 読み込みを開始するブロック番号 P3: 読み込むブロック数 となる その他 各待機イベントに関する説明は リファレンスマニュアルの付録に書いてある http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/b19228-03/waitevents.htm#11902 主だった待機イベントについては パフォーマンスチューニングガイドに解説あり http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/b19207-02/instance_tune.htm#169276 とはいえ 書いてある内容を理解するには ORACLE のアーキテクチャに対する理解がまぁそこそこそれなりに必須 なので 次からで軽くおさらいする

ORACLE の登場人物その 1: プロセス ユーザプロセス :ORACLE へ要求を発行するプロセス SQL*Plus とかユーザ作成の DB アプリとか サーバプロセス : ユーザプロセスの要求を受け取って データの処理を行うプロセス バックグラウンドプロセス :ORACLE のメンテナンス処理を担当 基本的にはユーザの要求とは非同期に活動する 待機イベントでは サーバプロセスとバックグラウンドプロセスの状態を確認できる ユーザプロセス ユーザプロセス SQL データ メッセージ サーバプロセス サーバプロセス ORACLE バックグラウンドプロセス

ORACLE の登場人物その 2:SGA システムグローバルエリアの略 サーバプロセスとバックグラウンドプロセス達が 共通して参照できるメモリ領域 UNIX 系では共有メモリ WINDOWS ではスレッド間で共用できるメモリ領域として表現される SGA の中身としては 以下の領域がある データベースバッファキャッシュ : データをキャッシュする領域 ORACLE では一部の例外を除いて データのやり取りはバッファキャッシュを通して行われる 共有プール :SQL の解析結果をキャッシュしておく領域 足りなくなると SQL がエラーになる場合がある REDO ログバッファ :REDO ログ情報 (ORACLE の更新ログ ) をバッファリングする領域 LGWR( ログライター ) バックグラウンドプロセスで 逐次 REDO ログファイルに書き出される その他 : ラージプール JAVA プールなど SGA データベースバッファキャッシュ 共有プール REDO ログバッファ その他

ORACLEの登場人物その3: ファイル群データファイル : 表や索引などデータベースオブジェクトのデータを格納する領域 UNDOデータファイル : 正確にはデータファイルの一種 データの更新時に更新前のイメージを格納一時ファイル : ソート用の作業領域などに使用 REDOログファイル :REDOログを格納する領域制御ファイル : データファイルの位置など管理情報を格納 以上を踏まえて まずは SQL を発行したときにどんな待機イベントが発生するか見ていく

SELECT 実行時の動作 1.select 文を発行 2. バッファキャッシュに欲しいブロックが存在するか確認 ユーザプロセス サーバプロセス バッファキャッシュ 4. バッファキャッシュからデータを読み込む 5. 絞込みやソート処理を行う 必要な場合は 一時ファイルを使用する 3. キャッシュになかったらデータファイルから読込む 読んだブロックは キャッシュにのせる必要に応じて複数データファイルから読み込みを行う 6. データを返す 一時ファイル データファイル

SELECT 実行時の動作 - 発生する待機イベント [ よく出る ] db file sequential read データファイルからの読み込み待ち 1 イベントで 1 ブロック読み込み索引経由の表アクセスなどで発生する db file scattered read データファイルからの読み込み待ち 1 イベントで複数ブロック読み込み全件検索での表アクセスで発生する [ 時々出る ] direct path read temp direct path write temp 一時ファイルに対する read/write ディスクソートが行われたときに発生する [ まれに出る ] buffer busy waits バッファ上の競合による待ち SELECT 同士では 同時にデータファイルからの読み込みが必要となった場合に発生 free buffer waits バッファに乗せようとしたら 空きバッファが足りなかった場合発生する 変更済みのブロックがファイルに書き出されて 空きができるまで待機する

実際に見てみよう SQL トレースを用いて (1) $ sqlplus /nolog # 下準備 ディスク I/O の発生を見たいので あえてバッファキャッシュをクリアする SQL> conn /as sysdba SQL> alter system flush buffer_cache; System altered. SQL> conn suzu/suzu # SQL トレースの開始 waits=>true で待機イベントを採取できる SQL> exec dbms_monitor.session_trace_enable(waits=>true, binds=>true); PL/SQL procedure successfully completed. # トレースしたい SQL の実行 ここでは索引を使った表アクセス SQL> select * from suzutab where col1 = '128'; COL1 COL2 -------------------------------- -------------------------------- 128 128 # SQL トレースの停止 これをしないと トレースが増え続けるので注意 SQL> exec dbms_monitor.session_trace_disable(); PL/SQL procedure successfully completed.

実際に見てみよう SQL トレースを用いて (2) トレースファイルが user_dump_dest に出力されていることを確認 $ ls -lrt tail -n -rwxrwx---+ 1 Administrators SYSTEM 32275 Aug 29 17:05 arieldb_ora_528.trc $ tkprof arieldb_ora_528.trc tkp1.txt [tkp1.txt の中身 ] select * from suzutab where col1 = '128' ( 略 ) 実行計画などの情報 Elapsed times include waiting on following events: Event waited on Times Max. Wait Total Waited ---------------------------------------- Waited ---------- ------------ db file sequential read 4 0.01 0.01 SQL*Net message to client 2 0.00 0.00 SQL*Net message from client 2 0.00 0.00 その SQL で発生した待機イベントが統計情報として出力される

実際に見てみよう SQL トレースを用いて (3) トレースファイルの中身を見てみる PARSING IN CURSOR #2 len=40 dep=0 uid=68 oct=3 lid=68 tim=21940409819 hv=1582318214 ad='1d863ec8' select * from suzutab where col1 = '128' END OF STMT PARSE #2:c=62500,e=248963,p=12,cr=30,cu=0,mis=1,r=0,dep=0,og=1,tim=21940409810 BINDS #2: EXEC #2:c=0,e=74,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=21940409979 WAIT #2: nam='sql*net message to client' ela= 5 driver id=1111838976 #bytes=1 p3=0 obj#=-1 tim=21940410049 WAIT #2: nam='db file sequential read' ela= 172 file#=4 block#=160196 blocks=1 obj#=59239 tim=21940410312 WAIT #2: nam='db file sequential read' ela= 154 file#=4 block#=160221 blocks=1 obj#=59239 tim=21940410539 WAIT #2: nam='db file sequential read' ela= 150 file#=4 block#=160191 blocks=1 obj#=59238 tim=21940410803 FETCH #2:c=0,e=777,p=3,cr=4,cu=0,mis=0,r=1,dep=0,og=1,tim=21940410872 WAIT #2: nam='sql*net message from client' ela= 296 driver id=1111838976 #bytes=1 p3=0 obj#=59238 tim=21940411614 FETCH #2:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=21940411688 WAIT #2: nam='sql*net message to client' ela= 3 driver id=1111838976 #bytes=1 p3=0 obj#=59238 tim=21940411737 WAIT #2: nam='sql*net message from client' ela= 324 driver id=1111838976 #bytes=1 p3=0 obj#=59238 tim=21940412098 STAT #2 id=1 cnt=1 pid=0 pos=1 obj=59238 op='table ACCESS BY INDEX ROWID SUZUTAB (cr=4 pr=3 pw=0 time=768 us)' STAT #2 id=2 cnt=1 pid=1 pos=1 obj=59239 op='index UNIQUE SCAN SYS_C0010241 (cr=3 pr=2 pw=0 time=532 us)' WAIT #0: nam='sql*net message to client' ela= 3 driver id=1111838976 #bytes=1 p3=0 obj#=59238 tim=21940412320 *** 2008-08-29 17:04:03.968 WAIT #0: nam='sql*net message from client' ela= 19325062 driver id=1111838976 #bytes=1 p3=0 obj#=59238 tim=21959737425 ===================== 発生した待機イベントが 1 つずつトレースされているので より詳細な情報を得ることが出来る

実際に見てみよう SQL トレースを用いて (4) トレースファイルから ファイル番号 4 のブロック番号 160196, 160221, 160191 を読み込んでいることが分かった これはどのオブジェクトだろう? dba_extents から確認 SQL> select segment_name, segment_type from dba_extents 2 where file_id = 4 and 160196 between block_id and (block_id+blocks-1); SEGMENT_NAME SEGMENT_TYPE -------------------------------- ------------------ SUZUIDX INDEX SQL> select segment_name, segment_type from dba_extents 2 where file_id = 4 and 160221 between block_id and (block_id+blocks-1); SEGMENT_NAME SEGMENT_TYPE -------------------------------- ------------------ SUZUIDX INDEX SQL> select segment_name, segment_type from dba_extents 2 where file_id = 4 and 160191 between block_id and (block_id+blocks-1); SEGMENT_NAME SEGMENT_TYPE -------------------------------- ------------------ SUZUTAB TABLE 索引経由の表アクセスをしていることが分かった

トレースを見て分かったこと ( 想像図 ) 索引 :SUZUIDX Read 1 block#160196 172μs 表 :SUZUTAB Read 3 block#160191 150μs Read 2 block#160221 154μs

UPDATE 実行時の動作 1.updatet 文を発行 2. バッファ上の行をロック ユーザプロセス サーバプロセス バッファキャッシュ ログバッファ 5.update 完了を通知 3. ログバッファに REDO レコードを記録 4. バッファ上のデータを更新 一時ファイル データファイル # バッファ上にデータがない場合は SELECT と同じ動作でファイルから読み込む

UPDATE 実行時の動作 - 発生する待機イベント [ よく出る ] enq: TX - row lock contention 行ロック待ち 別のセッションと同一行を更新しようとしている場合がほとんど レアなケースとしては 一意制約がついている列に重複した値を更新しようとしているケースでも同じ待機イベントになる [ 時々出る ] buffer busy waits SELECT 以外の DML 同士では 同一ブロックに対するメモリ上の更新が同時に行われた場合に発生 [ まれに出る ] log buffer space REDO ログバッファに書き込もうとしたら 空きがなかった場合に発生する LGWR プロセスが REDO ログファイルに書き出しをして空きが出来るまで待機する

enq: TX を見てみる その 1 ケース 1 通常の行競合 [ セッション 1] SQL> update suzutab set col2=col2+1 where col1 = 1; 1 row updated. [ セッション 2] SQL> update suzutab set col2=col2+1 where col1 = 1; => 待機状態になる [ セッション 3] SQL> select sid, username, event from v$session where username = 'SUZU'; SID USERNAME EVENT ---------- ------------------------------ -------------------------------- 131 SUZU SQL*Net message from client 142 SUZU enq: TX - row lock contention 確かに enq: TX が発生する

enq: TX を見てみる その 2 ケース 2 重複行の更新 [ セッション 1] SQL> insert into suzutab (col1) values (10000); 1 row created. (col1 には一意制約がついている ) [ セッション 2] SQL> insert into suzutab (col1) values (10000); => セッション 1 が commit されればエラーになるが まだの場合待機状態になる [ セッション 3] SQL> select sid, username, event from v$session where username = 'SUZU'; SID USERNAME EVENT ---------- ------------------------------ -------------------------------- 131 SUZU SQL*Net message from client 142 SUZU enq: TX - row lock contention

COMMIT 実行時の動作 1commit 文を発行 2.LGWR にログの書き出しを依頼 ユーザプロセス サーバプロセス バッファキャッシュ ログバッファ 4. ログ書き出しの完了を通知 3. ログバッファの内容を REDO ログファイルに書き出し LGWR 5.commit 完了を通知 一時ファイル データファイル REDO ログファイル

UPDATE 実行時の動作 - 発生する待機イベント [ よく出る ] log file sync LGWR からの応答待ちほとんどの場合 commit すると必ず発生する

その他の主な待機イベント [ アイドルイベント ] SQL*Net message from client ユーザプロセスからの応答待ち 要するに何もしていない [ バックグラウンドプロセスのイベント ] db file parallel write DBWR によるデータファイルへの書き出し完了待ち基本的には ユーザセッションと非同期に実施されるが 待機時間が長い場合には 影響を与える場合もある log file parallel write LGWR による REDO ログファイルへの書出し完了待ち待機時間が長いと ユーザセッションでの log file sync 待ちが長くなる [SGA 上の競合による待機 ] library cache pin 共有プール上のライブラリキャッシュに対するロック SQL の解析が多い場合に発生する latch free SGA 上の領域に対するロック解放待ち 小さい領域を短時間ロックしているのが普通 どの領域で競合しているかによって 原因が異なる

AWR, Statspack, bstat/estat で見る待機イベント (1) 任意の 2 点で採取したスナップショット間の差分を整形して出力したもの待機イベント以外にも様々な統計情報が出力される DB 起動 snap1 snap2 snap4 snap3 始点に snap1, 終点に snap3 を指定 snap1 から snap3 の期間の DB 稼動状況のレポート出力

AWR, Statspack, bstat/estat で見る待機イベント (2) Statspack レポートの待機イベントセクション Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ------------------------------ ------------ ----------- ------ ------ CPU time 51 86.5 db file sequential read 234 3 12 4.9 control file parallel write 1,206 2 1 2.8 control file sequential read 790 1 1 1.2 db file scattered read 59 1 9 0.9 -------------------------------------------------------------

終わりに ORACLE の待機イベントについて説明しました パフォーマンスを解析するにあたって 待機イベントを知っておくと何かと便利です