オラクル入門

オラクル研修の基礎項目

知識ポイント:

Oracleの基本構造を大まかに分けると、「ユーザー・プロセス」「サーバー・プロセス」「インスタンス」「各種ファイル類」となります。それぞれの役割について次に説明します(図1)。
図1 システム・アーキテクチャ~データベースの基本構造
18_19_01_01.gif
ユーザー・プロセス

ユーザー・プロセスは、クライアントマシン上で動作するプロセスのことで、アプリケーションや開発ツールを起動したときに生成されます。たとえば、ユーザー・プロセスにはSQL*Plus、Oracle Developer、JDeveloper、Visual Basicなどのツールや、そのツールで開発されたアプリケーションなどがあります。そして、ユーザー・プロセスからはOracleデータベースに対するコールをおこないます。区別がしづらいという方には、クライアント・アプリケーションがユーザー・プロセスにあたる、と考えればわかりやすいかもしれません。
サーバー・プロセス

ユーザー・プロセスがクライアントで動作するのに対し、サーバー・プロセスはサーバー上で動作します(名前どおりですね)。サーバー・プロセスは、ユーザー・プロセスが生成したコールを処理し、結果を返す役割をもっています。そして、サーバー・プロセスはプログラム・グローバル領域(PGA)という専用のメモリ領域をもっています。PGAには以下の領域・情報が含まれます。

  • ソート領域:データのソート処理に使用
  • セッション情報:セッションに対するユーザーの権限に関する情報
  • カーソルの状態:セッションで使用しているさまざまなカーソルの処理段階を示す
  • スタック空間:セッション変数が入っている空間

PGAはサーバー・プロセス生成時に割り当てられ、プロセス終了時に解除されます。

また、サーバー構成には1つのサーバー・プロセスが1つのユーザー・プロセスを処理する「専用サーバー構成」と、1つのサーバー・プロセスが複数のユーザー・プロセスを処理する「共有サーバー構成」とがあります。共有サーバー構成は、多数のユーザーによって使われる更新系のデータベースの場合、メモリなどのリソースを有効利用できるという利点がありますが、チューニングに気をつけなければなりません。最近では、ハードウェアの進化によりリソースに比較的余裕があることが多いので、専用サーバーを使用するのが一般的です。
インスタンス

Oracleの処理の中心部分をインスタンスといいます。インスタンスは、システム・グローバル領域(SGA)と呼ばれるメモリ領域とバックグラウンド・プロセスからなります。通常「Oracleを起動する」という場合「Oracleのインスタンスを起動する」というのとほぼ同義です。ではインスタンスの個々のコンポーネントについて説明しましょう。
第2章 インスタンスのコンポーネント
システム・グローバル領域(SGA)

SGAとは、データベースの高速なアクセスのためにデータを格納するメインメモリ内の領域です(図2)。SGAはさらに、

  • 共有プール(共有プールはさらにライブラリ・キャッシュ、データ・ディクショナリ・キャッシュに細分化されます)
  • データベース・バッファ・キャッシュ
  • REDOログ・バッファ

の3つに分けられます。
図2 システム・グローバル領域(SGA)
18_19_02_01.gif
共有プール

Oracleでは、サーバーがSQL(問合せ)を受け取ったときに、そのSQLの解析をおこないます。解析とは、受け取ったSQLをコンパイルし、「どのテーブルや索引からアクセスをおこなうのか」という計画を立てることです。そしてライブラリ・キャッシュには、SQL文のテキスト、解析済みのコード、実行計画が格納されます。データ・ディクショナリ・キャッシュには表や列の定義、ユーザー名、パスワード、権限などの情報が格納されます。SQLが1 度実行されると、ライブラリ・キャッシュやデータ・ディクショナリ・キャッシュにそれぞれの解析結果が格納されます。つまり2度目の実行からは、再度解析をおこなうのではなく、各キャッシュに格納されているデータを再利用するため実行が速くなります。
データベース・バッファ・キャッシュ

Oracleでは、テーブルなどのオブジェクトはデータファイルに格納されていますが、処理をおこなうときにはメモリ内に読み込まれます。このメモリ領域を「バッファ・キャッシュ」といいます。Oracleは、サーバーにリクエストされたSQLが解析されたあと、まずメモリ内に該当するデータがあるかどうかを検索します。もしメモリ内にデータが存在しなければ、ディスク上のデータファイルから読み込み、バッファ・キャッシュにデータを保持します。そして、再度同じデータに要求があった場合は、ディスクからの読み込みはおこなわず、直接バッファ・キャッシュ上のデータを処理するのです。バッファ・キャッシュはブロックという単位に分かれており、LRUと呼ばれるアルゴリズムで、古いブロックをディスクに書き込み、頻繁にアクセスされるブロックや新しいブロックをできるだけキャッシュ上に保持する仕組みになっています。
先生

ここまで、SGA内の各キャッシュについて説明しました。それぞれのキャッシュに共通していえることは、1度処理したものはメモリ内に残し、2回目以降はそれを再利用するということです。ご存じのように、コンピュータでデータを扱う場合、ディスクからの入出力よりも、メモリを使用したほうが格段に処理は速くなります。ですから、それぞれのキャッシュを効率よく使い、できるだけSQLの解析にかかる時間やディスクからの入出力を減らすことが大切です。
生徒

それが、パフォーマンス向上のひとつのカギとなるわけですね。
REDOログ・バッファ

データベースに対して、更新処理(追加/変更/削除)がおこなわれた場合、更新された履歴を保持するバッファを、REDOログ・バッファといいます。後ほど詳しく説明しますが、REDOログ・バッファ内のデータは、コミットが発行されるとディスク(REDOログ・ファイル)に書き込まれます。
第3章 バックグラウンド・プロセス
先生

さて、ここまでメモリについての説明でしたが、ここからはバックグラウンド・プロセスについて説明します。
生徒

だんだん複雑になってきましたね…。

きちんと整理しながら進めば大丈夫です。

バックグラウンド・プロセスの代表的なものとしては、以下のものがあります(括弧内は読み方)。

  • DBWR(データベース・ライター・プロセス 通称:DBライター)

バッファ・キャッシュの内容をデータファイルに書き込みます。

  • LGWR(ログ・ライター・プロセス 通称:ログ・ライター)

REDOログ・バッファに書かれた更新履歴をREDOログ・ファイルに書き込みます。

  • SMON(システム・モニター・プロセス 通称:Sモン)

おもに、データベースの起動時にデータベースの整合性を保つ役割を担います。

  • PMON(プロセス・モニター 通称:Pモン)

プロセスが正常に終了しなかった場合に、クリーンアップをおこないます。

  • CKPT(チェックポイント・プロセス 通称:チェックポイント)

チェックポイントを発生させます。チェックポイントが発生するとDBWRがバッファ・キャッシュの内容をデータファイルに書き込みます。プロセスについてはまた次回以降に説明しますので、今回は名前だけ憶えておいてください。

reference http://www.oracle.co.jp/2shin/ora83/18_19.htmlse