忍者ブログ
データベースエンジニアのための実践ブログ。Oracle・PostgreSQL・MySQLなどの環境構築、実行計画の読み方やチューニングといった現場で役立つノウハウ、DB基礎知識までを発信しています。

【データベースの仕組み】SQLが実行されるまでの5ステップ!パースから実行エンジンに至る内部処理の全貌

普段何気なく発行している SQL だが、データベースの内部ではどのような手順を経て結果が返されているのだろうか。
データベース管理システム(DBMS)が SQL を受け取ってから処理を完了するまでには、構文解析や最適化といった緻密な内部ステップが存在する。

今回は、SQL が実行されるまでの一般的な処理フローと、各ステージを担う主要なコンポーネントの役割について整理していこう。


1. SQL実行における5つの基本ステップ

一般的に、データベースは以下の順序で SQL を処理している。

順序処理フェーズ主な内容
(1) Parsing(パース) SQL文の構文解析および構造の検証を行う。
(2) Query Validation(クエリ検証) オブジェクトの存在や権限などの正当性をチェックする。
(3) Optimization(最適化) 複数の実行プランからコスト(実行時間など)が最小のものを選ぶ。
(4) Plan compile(プランコンパイル) 選択された最適プランを実行可能な形式にコンパイルする。
(5) Execution(実行) 実行エンジンがプランに従ってデータを処理し、結果を返す。

2. 各フェーズの詳細な内部処理

それぞれのステップでデータベース内部がどのように動いているのか、順を追って見ていこう。

① 解析とクエリツリーの生成(Parser)

SQL実行後の最初のプロセスは、SQLのロジカルな構造を関係演算を表す「query tree(クエリツリー)」へ変換することである。
この処理は parser(パーサー) によって行われ、文法的な正しさがチェックされる。

② 物理プランへの変換と最適化(Optimizer)

次のステップは、関係演算を表す query tree を実際の物理的な実行プランへ変換する作業である。
通常、この段階では非常に多くの実行プランが生成される。その中から最も効率のよいものを見つけ出す作業が query最適化(Query Optimization) である。

  • 評価基準: 実行時間などの様々なコスト値(見積もり)を比較し、最適なものを選ぶ。
  • オプティマイザの役割: query optimizer(クエリ・オプティマイザ) が数ある候補の中から最適な計画を選択し、次の実行エンジンへ受け渡す。

③ 実行エンジンによる処理(Execution)

最適化されたプランを受け取った実行エンジンが実際にデータを読み書きし、最終的な結果をクライアントに返すことで一連の処理が完了する。


3. まとめ(主要コンポーネントの役割)

コンポーネント主な役割
Parser(パーサー) SQLの構文をチェックし、論理的な構造を表す query tree へ変換する。
Query Optimizer(オプティマイザ) 生成されたプランのコストを評価し、最も効率的な実行プランを選択する。
Execution Engine(実行エンジン) 選択されたプランに従って実際にデータを処理し、結果を生成・返却する。

このように、SQLは単に実行されているわけではなく、パースによる構造化とオプティマイザによるコスト評価という綿密なステップを経て最も効率的な方法で処理されている。この内部フローの理解は、インデックス設計やパフォーマンスチューニングの基礎としても非常に重要である。

PR

【問題形式で学ぶOracle】第6回:セッションの番人「PMON」!異常終了したプロセスを速やかに片付けるお掃除役

前回は、データベースの一貫性やクラッシュ・リカバリを担う重要プロセス「SMON」について学んだ。

今回は、それと対をなすもう一つのモニター系プロセス、「PMON(プロセス・モニター・プロセス)」を取り上げる。Oracle 26ai でも変わらず、ユーザーセッションの監視や異常終了時の後始末を一手に引き受けているこのプロセスの役割を、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおけるバックグラウンド・プロセス「PMON(Process Monitor)」の主な役割として、最も適切なものを次の選択肢から1つ選べ。

  • A. データベースインスタンスの起動時に、ディスク上の制御ファイルやデータファイルの整合性をチェックし、クラッシュ・リカバリを実行する。
  • B. サーバー上の他のバックグラウンド・プロセス(SMONやLGWRなど)の稼働状況を常時監視し、異常終了時にインスタンス全体を強制停止する。
  • C. 各ユーザーのプロセスを監視し、万が一プロセスが異常終了(クラッシュ)した際に、使用していたリソースの解放やロールバックなどのクリーンアップを行う。
  • D. データベースへの新規接続要求を受け付け、リスナーを介さずに直接最適なサーバー・プロセスへと動的に割り当てる。

正解と解説

【正解】
C. 各ユーザーのプロセスを監視し、万が一プロセスが異常終了(クラッシュ)した際に、使用していたリソースの解放やロールバックなどのクリーンアップを行う。

詳しい解説

PMON(Process Monitor)は、名前の通り「プロセスを監視する」役割を持つバックグラウンド・プロセスだ。

  • ユーザー・プロセスの監視と後始末:
    クライアント側のアプリケーションが突然強制終了したり、ネットワーク障害でプツリと切断されたりすると、サーバー側に残されたサーバー・プロセスやロック、メモリ領域が宙ぶらりんになってしまう。PMONはこれを検知し、未確定のトランザクションをロールバックして、ロックやメモリなどのリソースを綺麗に回収・解放してくれる。
  • リスナーへの動的登録:
    もう一つの重要な役割として、データベース・サービスの情報をネットワークのリスナーに自動で登録(ダイナミック・レジストレーション)する仕事も担っている。

前回学んだ「SMON」がデータベース全体(インスタンス全体)のリカバリや一貫性を監視するのに対し、「PMON」は個々のユーザー・プロセスやセッションの異常時対応を行う、いわば現場の敏腕お掃除役である。この2つの役割の違いは試験でも非常に出やすいポイントなので、セットで押さえておこう。


まとめ

プロセス名主な監視対象おもな仕事・役割
SMON データベース / インスタンス全体 クラッシュ・リカバリ、一貫性の監視、一時セグメントのクリーンアップ
PMON 各ユーザー・プロセス / セッション 異常終了時のプロセス後始末(リソース解放、ロールバック)、リスナーへの動的登録

ユーザーが安心してSQLを投げられるのは、万が一アプリがフリーズしてもPMONが裏でしっかりと後片付けをしてくれるからこそである。

次回もOracleの仕組みがスッキリわかる4択問題をお届けするので、お楽しみに!


【問題形式で学ぶOracle】第5回:サイレントガーディアン「SMON」!データベースの整合性とリカバリを陰で支えるバックグラウンド・プロセス

前回は、ユーザーの代わりに実際にSQLの処理を行う「サーバー・プロセス」について学んだ。

今回は、インスタンスの起動中からバックグラウンドで静かに稼働し、データベースの安全と一貫性を守り続ける最も重要なプロセスのひとつ、「SMON(システム・モニター・プロセス)」を取り上げる。Oracle 26ai でも変わらず活躍するこのプロセスの役割を、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおけるバックグラウンド・プロセス「SMON(System Monitor)」の主な役割として、最も適切なものを次の選択肢から1つ選べ。

  • A. ユーザーからのネットワーク経由の接続要求を最初に受け付け、各サーバー・プロセスへの振り分け(リスニング)を行う。
  • B. データベースのメモリ領域(SGA)にある更新データを、定期的にディスク上のデータファイルへ書き込んで同期する。
  • C. データベースの一貫性を監視し、インスタンス障害からの起動時におけるクラッシュ・リカバリや、不要になった一時セグメントのクリーンアップを行う。
  • D. ユーザーがコミットしたトランザクションのRedoログ・バッファへの書き込みをリアルタイムでディスクへ吐き出す。

正解と解説

【正解】
C. データベースの一貫性を監視し、インスタンス障害からの起動時におけるクラッシュ・リカバリや、不要になった一時セグメントのクリーンアップを行う。

詳しい解説

Oracle のバックグラウンド・プロセスにはそれぞれ明確な担当業務がある。SMON(System Monitor)は、まさにデータベースの「健康と安全を守る守護神」のような存在だ。

  • インスタンス・リカバリ(クラッシュ・リカバリ):
    万が一、電源断や異常終了などでデータベースがクラッシュした際、次に STARTUP したときに自動で走って整合性を復旧する。
  • クリーンアップ作業:
    異常終了したセッションが残したデッド・トランザクションのロールバックや、不要になった一時セグメントの解放などをバックグラウンドで自動的に片付ける。

ちなみに、選択肢 B は DBWn(データベース・ライター)、選択肢 D は LGWR(ロガー・ライター)の役割である。Oracle 26ai の最新環境であっても、この基本的なバックグラウンド・プロセスの分担構造は変わっていない。トラブルシューティングや試験対策では、プロセス名と役割の組み合わせを確実に一致させられるようにしておこう。


まとめ

プロセス名正式名称主な役割・特徴
SMON System Monitor インスタンス・リカバリ、一貫性の監視、一時セグメントのクリーンアップ
DBWn Database Writer メモリ(SGA)のダーティデータをデータファイルへ書き込む
LGWR Log Writer Redoログ・バッファの内容をRedoログ・ファイルへ書き込む

データベースが安全に起動し続けられるのは、こうしたバックグラウンド・プロセスが裏でしっかりと働いてくれているおかげである。

次回もOracleの仕組みがスッキリわかる4択問題をお届けするので、お楽しみに!

【問題形式で学ぶOracle】第4回:サーバー・プロセスの正体を暴く!ユーザーの代わりに汗を流す働き者

前回は、ユーザーが実行するSQLやSQL*Plusなどの操作に伴って起動する「ユーザー・プロセス」について学んだ。

今回はそのペアとなるもう一つの重要プロセス、「サーバー・プロセス」を取り上げる。ユーザーが投げた命令を実際に受け止め、データベースの裏側で泥臭く処理を実行してくれるこの仕組みを、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおける「サーバー・プロセス」の定義や役割として、最も適切なものを次の選択肢から1つ選べ。

  • A. クライアント側のPC上で常時起動し、ユーザーが入力したキーボード操作やSQLテキストをデータベースへ送信するための専用プロセス。
  • B. インスタンスの起動時に自動でバックグラウンドで立ち上がり、データベース全体のメモリ(SGA)やディスクの同期を管理する専用プロセス。
  • C. ユーザーからのセッションに対応して起動し、受け取ったSQLの解析や実行、データの読み書きなど実際の処理を行って結果を返すプロセス。
  • D. 複数のデータベース(PDB)の間でデータの整合性を保つため、コンテナ構造の切り替えやマウント状態を監視する専用プロセス。

正解と解説

【正解】
C. ユーザーからのセッションに対応して起動し、受け取ったSQLの解析や実行、データの読み書きなど実際の処理を行って結果を返すプロセス。

詳しい解説

前回学んだ「ユーザー・プロセス」と、今回の「サーバー・プロセス」は、いわば二人三脚のコンビである。

  • ユーザー・プロセス(クライアント側):
    私たちが操作する画面やツール(SQL*Plusなど)側で動く。いわば「注文を取るホールスタッフ」のような存在。
  • サーバー・プロセス(サーバー側):
    Oracle データベースのインスタンス側で動く。ユーザー・プロセスからの注文(SQL)を受け取り、メモリ(SGA)やデータファイルにアクセスして実際にSQLの処理やデータの読み書きを行う「厨房の料理人」である。

Oracle にログイン(セッションを確立)すると、このサーバー・プロセスがユーザーごとに割り当てられ、SQLの解析(パース)、実行計画の作成、データのフェッチといった実務をすべて背負って実行してくれる。この「誰がどこで動いているのか(クライアント側か、サーバー側か)」を問う問題は試験でも頻出なので、しっかり区別しておこう。


まとめ

プロセスの種類存在場所役割のイメージ
ユーザー・プロセス クライアント側(PC等) ユーザーの操作やSQLの入口(注文係)
サーバー・プロセス サーバー側(DBインスタンス) セッションに対応してSQLを実際に実行する(実働部隊・料理人)

「ユーザーが命令を出し(ユーザー・プロセス)、サーバー側が実際に汗をかいて処理する(サーバー・プロセス)」という分業体制が分かっていれば、パフォーマンスチューニングやセッション管理の基礎もぐっと理解しやすくなる。

次回も基礎固めにぴったりの4択問題をお届けするので、お楽しみに!


【問題形式で学ぶOracle】第3回:ユーザー・プロセスの正体を暴く!データベースに命令を届ける第一歩

Oracle Database の内部アーキテクチャを語る上で欠かせないのが、プロセス(作業員たち)の役割分担である。
「サーバープロセス」「バックグラウンド・プロセス」、そして今回焦点を当てる「ユーザー・プロセス」など、似たような言葉が多くて混乱しやすいポイントだ。

今回は、Oracleのプロセス構造の基本となる「ユーザー・プロセス」について、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおける「ユーザー・プロセス」の定義として、最も適切なものを次の選択肢から1つ選べ。

  • A. データベースのメモリ領域(SGA)を常時監視し、インスタンス異常時の自動リカバリを行うバックグラウンド・プロセスのこと。
  • B. ユーザーが実行するSQL文や各種ユーティリティ(SQL*Plusなど)の操作に伴って起動するプロセスのこと。
  • C. ユーザー・プロセスからの要求を直接受け取り、ディスク上のデータファイルを読み書きするサーバー側の専用プロセスのこと。
  • D. 複数のインスタンス間(RAC環境など)でデータの一貫性を保つために、キャッシュブロックを転送し合う専用の連携プロセスのこと。

正解と解説

【正解】
B. ユーザーが実行するSQL文や各種ユーティリティ(SQL*Plusなど)の操作に伴って起動するプロセスのこと。

詳しい解説

Oracle Database に接続して作業を行うとき、私たちの操作を支えるプロセスにはいくつかの階層がある。

  • ユーザー・プロセス(User Process):
    私たちがクライアント側(PCなど)で sqlplus などのツールを起動したり、SQL文を実行したりしたときに生成されるプロセス。いわば「データベースへの入口・発信源」である。
  • サーバー・プロセス(Server Process):
    ユーザー・プロセスからの要求を受け取り、データベース(インスタンス)のメモリやデータファイルにアクセスして実際に処理を実行するプロセス。
  • バックグラウンド・プロセス(Background Process):
    データベースの全体管理やメモリ・ファイルの同期を行うために、インスタンス起動時に自動で立ち上がるプロセス(DBWn, LGWR, SMON, PMONなど)。

試験や実務のトラブルシューティングでも、「ユーザーが直接操作する側(ユーザー・プロセス)」と「データベース側で裏方として処理を代行する側(サーバー・プロセス)」の区別が問われやすいので、この違いをしっかり押さえておこう。


まとめ

プロセスの種類誰が・何のために起動するか主な役割
ユーザー・プロセス ユーザー(クライアント側) SQLやSQL*Plusなどのユーティリティの実行
サーバー・プロセス Oracle Database(サーバー側) ユーザー・からの要求を受け取り、処理を代行する
バックグラウンド・プロセス Oracle Database(インスタンス起動時) メモリ管理、ロギング、障害監視などの全体管理

普段何気なく打っている sqlplus / as sysdba の裏側でも、こうしたプロセス同士の連携が動いている。仕組みをイメージできるようになると、エラーが出たときも原因の切り分けがぐっとスムーズになるはずだ。

次回も基礎固めに最適な4択問題をお届け予定なのでお楽しみに!