[ Oracle ] DML実行時の内部イメージ

[ Oracle ] DML実行時の内部イメージ

本記事では、OracleDBにおいてDMLを実行したときの内部処理イメージをまとめます。

 

Select実行時の内部処理

イメージ

select文を実行した時の内部処理の遷移についてです。
下記の図が、遷移イメージです。

各処理の意味

  1. Select発行
    ユーザー・プロセスからのSelect文の発行です。
  2. 解析
    発行されたSelect文を解析します。ここには書いていませんが、Parse前に、インスタンスの共有プールを参照し、過去に同様の解析を行なっていないかを確認します。すでに解析済みのSQLであれば、解析結果を共有プールから取得し、再Parseをしません。
  3. 実行(Execute)
    解析され作成された実行計画に基づき、データ取得を実行します。
  4. 検索(Fetch)
    まず、インスタンス内(メイン・メモリ上)のバッファ・キャッシュ内に検索をかけます。ここで対象データが見つかることを、キャッシュ・ヒット といいます。キャッシュ・ヒットした場合、その時点でFetchを終了しデータを返却します。
    バッファ・キャッシュ内にデータが見つからないことを、 キャッシュ・ミス といいます。その時は、データベース・ファイルのデータ・ファイルにデータを探しに行き、そこで取得されたデータを返却します。

Update実行時の内部処理

イメージ

update文を実行した時の内部処理の遷移についてです。
下記の図が、遷移イメージです。

 

各処理の意味

  1. Update
    ユーザ・プロセスからのupdate文の発行です。
  2. Parse
    発行されたSQLを解析(Parse)し、実行計画を作成します。
  3. Execute
    作成された実行計画に基づき、Update対象のデータ検索を実行します。
  4. Fetch
    データを検索します。selectの場合と同じように、インスタンス側のバッファ・キャッシュと、必要に応じてディスク側のデータ・ファイルを検索します。検索結果は、インスタンスのバッファ・キャッシュに格納します。
  5. update
    バッファ・キャッシュに格納した対象データに対して、update処理を実行します。この時点では、変更されたデータはディスク上に反映されていません。
  6. REDOログ・バッファ
    update後のデータ内容を、REDOログバッファに格納します。
    ユーザー・プロセスからのupdate要求により実行されるのは、ここまでです。
  7. commit
    先行したupdateを確定するために、ユーザー・プロセスからcommitを実行します。
  8. REDO読み出し
    インスタンスのREDOログ・バッファから更新データを読み出します。
  9. LGWR
    コミットの実行によりチェックポイントが発生し、バックグラウンドプロセスであるCKPTからLGWRが呼び出されます。LGWRがディスクへの書き出しを実行します。
  10. データ反映
    REDO内容を、ディスク上の物理データに反映させます。

 

まとめ

  • 発行したSQLは、サーバー・プロセスにより解析(Parse)され、実行計画が作成されます。
  • 作成された実行計画に基づき、データ検索が実行(Execute)されます。
  • はじめにインスタンスのバッファ・キャッシュ上でデータを検索(Fetch)します。
    存在しなかった場合、ディスク上のデータ・ファイル上にデータを検索しに行きます。
  • selectの場合、Fetchされたデータをユーザー・プロセスに返却します。
  • updateの場合、Fetchされたデータをバッファ・キャッシュに再格納し、update処理を実行します。update後のデータは、REDOログ・バッファに格納されます。
  • update操作のあとにcommitが行われると、LGWRによりREDOログ・バッファが読み出され、データ・ファイルへの書き込みが実行されます。

Oracleカテゴリの最新記事