ここから本文です

リレーショナルデータベースの「3大構成要素」とは

@IT 9/5(月) 6:10配信

 本稿ではよく使用されるRDBMSとしてOracle Databaseを例にします。使用するRDBMS(リレーショナルデータベース管理システム)によって実際のファイルや機能の名称は異なりますが、仕組みや考え方はどのデータベース製品でも共通です。

【その他の画像】RDBMSが持つ基本的なプロセス

●1:データベース

 1つ目の構成要素である「データベース」は、ディスク領域のOSファイルによって構成されています。

 ファイルに格納されるデータの大部分を占めるのが表データです。例えば、商品表や在庫表のような、複数のユーザーが共有利用するデータのことです。この他に、障害から復旧するための「変更履歴」や、データベースに関する「管理情報」などが格納されています。

○表データを格納するファイル

 このファイルには、ユーザーが普段共有利用する表データが格納されています。表データを検索したり、変更したりする場合は、その表データが格納されている各ファイルにアクセスします。

 昨今、企業システムが管理するデータベースのデータ量が増加の一途をたどっています。データ量が数TBを超えることも珍しくはありません。このような大量のデータを格納するデータベースでは、表データが1つのファイルに収まらず、複数に分散して管理することもあります。

 Oracle Databaseでは、表データを格納するファイルを「データファイル」と呼び、このデータファイルの中に表を作成してデータを挿入します。

○変更履歴を格納するファイル

 このファイルは、データベースに何らかの障害が発生した場合でもデータを正しく復旧できるように、データベース内で行われた全ての変更履歴を格納しておくものです。

 例えば、データの変更処理中にデータベースサーバがダウンし、変更データが失われてしまったとしても、変更履歴を元に処理を再実行することでデータを復旧させることができます。

 Oracle Databaseでは、変更履歴を「オンラインREDOログ・ファイル」と呼ばれるファイルに格納します。Oracle Databaseで行われた変更は、次々にこのファイルに書き込まれます。

○データベースに関する管理情報を格納するファイル

 このファイルでは、データベースシステムが自分自身を管理するために、データベースを構成するファイル名や格納されている場所、各ファイルの現在の状態などの管理情報が記録されます。

 データベースを起動すると、まずこのファイルにアクセスします。データベースシステムはここで表データを格納するファイルや変更履歴を格納するファイルがどこにあるのかを確認し、認識します。

 Oracle Databeseでは、データベースに関する管理情報を「制御ファイル」と呼ばれるファイルに格納します。データベースの起動時に制御ファイルを読み込み、データファイルやオンラインREDOログ・ファイルがどこにあるかをチェックします。

 1つ目の要素である「データベース」をまとめると以下のようになります。

・データベースを構成する主なファイルには「表データ」「変更履歴」「管理情報」がある
・ファイルの種類は違えど、いずれもディスク領域に格納されている

 続いて、これらのファイルに対してデータの読み込みや書き込みをしたり、SQLの内部処理などを担当する「プロセス」について解説します。


●2:プロセス

 リレーショナルデータベースの2つ目の構成要素である「プロセス」は、SQL(Structured Query Language:リレーショナルデータベースのデータを操作するための言語)の処理やファイルへの書き込みなどを行うプログラム群です。

 データベースシステムでは、さまざまなプロセスが役割を分担して動作しています。データベースを起動したときから停止するまで常時稼働しているプロセスもあれば、必要になったときに作成され、働くプロセスもあります。

○プロセスの2つの区分

 プロセスは、ユーザーが発行したSQLの処理を実行する「フォアグラウンドプロセス」と、ファイルへの書き込みなど裏方の処理を実行する「バックグラウンドプロセス」の2つに分類できます。

 Oracle Databaseでは、フォアグラウンドプロセスを「サーバー・プロセス」と呼びます。また、バックグラウンドプロセスは役割に応じてさまざまな種類があります。例えば、変更したデータをデータファイルに書き込む「データベース・ライター・プロセス(DBWn)」や、他のプロセスの監視や管理をしている「プロセス・モニター・プロセス(PMON)」などがあります。

 続いて、SQL処理の詳細と、そのSQL処理が行われる領域である「共有メモリ」について解説します。

●3:共有メモリ

 リレーショナルデータベースの3つ目の構成要素である「共有メモリ」は、SQL処理に必要なデータをユーザー間で共有利用するための領域のことです。

 共有メモリの存在意義は、データを共有して使うことによって、ディスクI/Oを削減してパフォーマンスを向上させることにあります。SQL処理を行うたびに各ファイルへ個別にアクセスしていては、ディスクI/Oが頻繁に発生してパフォーマンスが低下する原因となります。逆に、ディスクI/Oを軽減できればパフォーマンス向上につながるというわけです。

 共有メモリの役割を具体的に解説します。

○「SQLの解析結果」の再利用

 SQLの処理では、最初にそのSQLの解析が行われます。

 例えば、「アクセスする表がデータベースに正しく存在するか」といったチェックをします。チェックに必要な情報はファイル内に格納されているので、チェックのたびにディスクI/Oが発生します。そこで、解析結果を共有メモリに保持しておき、再利用できるようにします。

 Oracle Databaseでは、SQLの解析結果を共有メモリ内の「共有プール」と呼ばれる領域に格納します。SQLが発行されたら、まず、共有プール上に同じ解析結果が存在するかどうかをチェックしています。同じ解析結果があればそれを再利用し、なければ新たに解析を行います。

○「共有メモリ上のデータ」の再利用

 解析が終了すると、データへのアクセスが行われます。アクセスしたいデータが格納されているファイルから共有メモリへデータを読み込み、検索や変更処理を行います。

 この時、読み込んだデータは共有メモリに保持しておきます。再度同じデータが必要となったら共有メモリにあるデータを再利用します。

 Oracle Databaseでは、SQLで使用する表データを共有メモリ内の「データベース・バッファ・キャッシュ」と呼ばれる領域に読み込んで実行します。データを検索するときにデータベース・バッファ・キャッシュ上に対象のデータがあるかどうかチェックし、存在しなければデータファイルから読み込みます。


○「変更履歴のファイル」への書き込み

 共有メモリによって、ファイル書き込み時の負荷も軽減されます。データベースに対して変更操作を行うたびに変更履歴を書き込んでいては、同様にパフォーマンスが低下してしまいます。そこで、ある程度共有メモリ上に変更履歴をためておき、ある段階でまとめてファイルへ書き込みます。ファイルへの書き込み回数を減らすことで、ディスクI/Oを軽減しています。

 Oracle Databaseでは、一時的に「REDOログ・バッファ」と呼ばれる共有メモリに変更履歴を記録します。続いて「ログ・ライター・プロセス(LGWR)」というバックグラウンドプロセスが、REDOログ・バッファ上の変更履歴をオンラインREDOログ・ファイルへ書き込みます。


更新履歴
【2016/08/31】2016年時点の状況に合わせて、内容を追記更新しました
【2008/07/16】初版公開

●筆者紹介
藤澤奈弥/株式会社アシスト サービス事業部教育部所属。普段はOracle研修の講師として、主にSQLやPL/SQLなどのプログラミングコースを担当している。研修では「丁寧な解説で初心者でも分かりやすく」をモットーとしている。最近のマイブームは着付け教室。目標は師範の資格を取ること

最終更新:9/5(月) 6:10

@IT

TEDカンファレンスのプレゼンテーション動画

「水中に潜む本当の危機」
インドガリアルとキングコブラはインドの象徴ともいえる爬虫類ですが、水質汚汚濁のために存亡が危ぶまれています。環境保護者のロミュラスウィトカーがこの素晴らしい動物たちの貴重な映像をお見せして、彼らのそして私達の生活を支えている川の保全を訴えます。