以下、一実施形態を説明する。
以下の説明では、「kkk管理テーブル」又は「kkkキュー」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「kkk管理テーブル」及び「kkkキュー」のうちの少なくとも1つを「kkk情報」と呼ぶことができる。各テーブルの構成は一例であり、2以上のテーブルが1つのテーブルにまとめられたり、1つのテーブルが複数のテーブルに分割されたりしてもよい。
また、以下の説明では、要素の識別情報として、番号又は名前が使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号(又は参照符号における共通符号)を使用し、同種の要素を区別して説明する場合は、要素識別情報(要素に割り振られた番号又は名前等の識別情報)(又は参照符号)を使用することがある。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶部(例えばメモリ)及び/又はインターフェースデバイス(例えば通信ポート)等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置又はシステムが行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ(例えばCPU)と記憶部を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
また、以下の説明では、「OSスレッド」は、OS(Operating System)によって管理されるスレッド(例えばカーネルとライブラリによって管理されるスレッド)であり、リアルスレッドと言うこともできる。一方、「擬似スレッド」は、データベース管理プログラムによって管理されるスレッドである。
図1は、実施形態に係る共有リソース更新システムの構成例を示す。
共有リソース更新システムは、ホスト計算機101と、ストレージ装置102と、管理端末108とを有する。ホスト計算機101と、ストレージ装置102と、管理端末108とが、通信ネットワーク(例えばSAN(Storage Area Network)又はLAN(Local Area Network))103を介して相互に接続されている。図1では、各装置は、通信ネットワーク103に1台ずつ接続されているが、かかる例に限定されず、複数台接続されていてもよい。また、通信ネットワーク103に、業務システム等を利用するユーザが利用するクライアント端末(図示せず)が接続されていてもよい。
ホスト計算機101は、CPU(Central Processing Unit)およびメモリ等の情報処理資源を備えた計算機であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。CPUは、プロセッサの一例であり、演算処理装置として機能し、メモリに記憶されているプログラムや演算パラメータ等にしたがって、ホスト計算機101の動作を制御する。なお、ホスト計算機101は、共有リソース更新装置の一例である。ホスト計算機101は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の入力デバイスと、表示デバイス(例えばモニタディスプレイ)やスピーカ等の出力デバイスとを有してよい。
また、ホスト計算機101は、複数のCPU(プロセッサ部の一例)内に複数のCPUコア(コア)を収めて、並列処理によって性能を向上させるマルチコアプロセッサシステムを利用している。マルチコアプロセッサシステムは、CPUに搭載された複数のコア間でリソースを共有し、複数のスレッドを並列に処理する。
また、ホスト計算機101は、I/F111を介して通信ネットワーク103と接続される。I/F111は、インターフェースデバイスであり、通信ネットワーク103を介して、ホスト計算機101と外部装置とのデータ入出力を制御し、例えば、HBA(Host Bus Adapter)やLANアダプタなどである。
ストレージ装置102は、複数(又は1つ)の物理ディスク104と、物理ディスク104に対するI/O(Input/Output)を制御するストレージコントローラ114とを有する。ストレージコントローラ114は、ホスト計算機101からのコマンドを解釈し、ストレージ装置102の記憶領域内へのライト又はリード(I/O)を実行する。ストレージ装置102が提供する記憶領域は、複数(又は1つ)の物理ディスク104から構成される。物理ディスク104は、物理的な不揮発性記憶デバイスの一例であり、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)である。
ストレージ装置102は、複数の物理ディスク104から構成される記憶領域上に複数(又は1つ)の論理ボリューム105を定義する。論理ボリューム105は、複数の物理ディスク104から構成される論理ボリューム105に代えて、Thin Provisioningに仮想的な論理ボリューム105でもよい。論理ボリューム105には、データベースファイル(以下、DBファイル)106及びログファイル107等が格納される。
また、ストレージ装置102は、I/F113を介して通信ネットワーク103と接続される。I/F113は、インターフェースデバイスであり、通信ネットワーク103を介して、ストレージ装置102と外部装置とのデータ入出力を制御し、例えば、HBAやLANアダプタなどである。
管理端末108は、CPUおよびメモリ等の情報処理資源を備えた計算機であって、オペレータ等の入力に応じてホスト計算機101やストレージ装置102を管理する計算機である。管理端末108は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の入力デバイスと、表示デバイス(例えばモニタディスプレイ)やスピーカ等の出力デバイスとを有する。
また、管理端末108は、I/F112を介して通信ネットワーク103と接続される。I/F112は、インターフェースデバイスであり、通信ネットワーク103を介して、管理端末108と外部装置とのデータ入出力を制御し、例えば、LANアダプタなどである。
複数(又は1つ)の論理ボリューム105に、データベースが格納されており、データベースが、複数のDBファイル106を含む。データベースは、例えば、1以上の表(以下、DB表)を含み、更に、例えば、1以上の索引を含んでよい。DB表は、1以上のレコードの集合であり、レコードは1以上のカラムから構成される。索引は、DB表の1以上のカラム等を対象として作成されるデータ構造であり、当該索引が対象とするカラム等を含む選択条件によるDB表へのアクセスを高速化するためのものである。例えば、DB表は、対象とするカラムの値の毎に、DB表の中で当該値を含むレコードを特定するための情報を保持するデータ構造である。データ構造としては、例えばB木等が用いられる。レコードを特定するための情報としては、物理アドレスや論理的な行ID等が用いられることがある。
図2は、ホスト計算機101の構成例を示す。
ホスト計算機101は、複数のCPU201(例えばCPU P1、P2、P3及びP4)と、複数のメモリ202(例えばメモリM1、M2、M3及びM4)とを備える。複数のCPU201に、それぞれ、複数のメモリ202が対応付けられている。CPU201もメモリ202もそれぞれ1つでもよい。1以上のメモリ202は、記憶部の一例である。
CPU201は、対応するメモリ202とバス等で接続される。CPU201は、対応するメモリ202に記憶されている各種プログラムを実行して、適宜、変化するパラメータを、メモリ202に格納したり、ストレージ装置102に記憶する各種データを一時的にメモリ202に格納したりする。
各CPU201には、複数のコア211が搭載されている。各CPU201は、複数のコア211を並列に起動させて、複数のスレッドを並列に処理させる。CPU P1〜P4の各々は、I/F−A1〜A4のいずれかを介して、通信ネットワーク103に接続されているストレージ装置102とデータの送受信を行う。
メモリM1には、DBバッファ213、ログバッファ214、データベース管理プログラム215、管理データ216、スレッド状態217及びOS(Operating System)218などが格納される。なお、メモリM2〜M4の各々も、メモリM1と同様の構成のため、以下、メモリM1を例に取る。
DBバッファ213は、ストレージ装置102内のDBファイル106に書き込まれるデータが一時的に格納される領域である。ログバッファ214は、ストレージ装置102内のログファイル107に書き込まれるデータが一時的に格納される領域である。
データベース管理プログラム215は、いわゆるデータベース管理システム(DBMS)であり、データベース(DBファイル106)に対する検索処理や更新処理を制御するプログラムである。データベース管理プログラム215については、後述する。
管理データ216は、データベース管理プログラム215がデータベース領域(DB領域)、ログ領域及びスレッドなどを管理するための情報である。管理データ216については、後述する。なお、DB領域は、1以上のDBファイル106のうちの少なくとも一部でよく、1以上のページ(論理領域)の集合である。ログ領域は、1以上のログファイル107のうちの少なくとも一部でよい。本実施形態では、DB領域に対してはページ単位でデータが入出力される。以下、DB領域の構成要素としてのページを「DBページ」と言うことがある。
スレッド状態217には、各コア211によって実行されているスレッドの状態を表す情報である。
図3は、第1の割り当てモードに従う共有リソース割り当ての一例を示す。図3に示す例は、メモリM1内のスレッド状態12a及び管理データ11aに基づいている。
DBファイル6a及び6bの各々が、複数のDB領域303で構成されている。各DB領域303が、複数のDBページで構成されている。図示しないが、各ログファイル107は、複数のログ領域で構成されてよい。しかし、各ログ領域は、複数のページに論理的に分割されていなくてよい。一般に、ログは、可変長(シーケンシャルI/Oが主体)であるため、ページと言う単位で入出力することの意義が少なくともデータベースに比べて低いからである。複数のログファイル107に加えて、共通ログファイル307である。共通ログファイル307には、物理ログが格納される。ログファイル107の各々には、論理ログが格納される。物理ログは、データベースに格納される実際のデータを含んだログであり、例えば、更新対象のページ番号(例えばアドレス)及び更新前ページ(更新前イメージ)を含む。論理ログは、データベース管理プログラム215に対する操作を表す情報を含んだログであり、例えば、操作種別(例えば挿入や参照等)と、データIDと、キー値とを含む。本実施形態では、コミット時にDBページへコミット時のDBデータが書き込まれるので更新後の情報を物理ログにも論理ログにも含める必要が無い。しかし、必ずしもそうである必要は無く、物理ログ及び論理ログのいずれも、更新後の情報を含んでいてもよい。例えば、物理ログは、更新後ページ(更新後イメージ)を含んでもよい。
CPU P1が、4つのコアC11〜C14を有しているとする。1つのコア211で、1つのOSスレッド304を実行できる。このため、4つのコアC11〜C14により4つのOSスレッドT11a、T11b、T11c及びT11dを並列に実行できる。
各OSスレッド304は、データベース管理プログラム215によって疑似的に細分化されることで、複数の疑似スレッドを含む。複数の疑似スレッドは、複数(又は1つ)の参照用疑似スレッド(以下、参照スレッド)302と、1つ(又は複数)の更新用疑似スレッド(以下、更新スレッド)301とを含む。参照スレッド302と更新スレッド301間の要求の受け渡しは、キュー313を介して行われる。1つの更新スレッド301につき複数(又は1つ)のキュー313が用意されている。1つの更新スレッド301につき用意されるキュー313の数は、その更新スレッド301を含んだOSスレッド304内の参照スレッド302と同じ数でよい。参照スレッド302は、更新要求の発行と共有リソース部の参照とを行う疑似スレッドである。参照スレッド302は、例えば、更新対象の共有リソース部に対応した更新スレッド301(又はその更新スレッド301に対応したキュー313)をデータベース管理プログラム215に問い合わせ、その回答を基に特定されたキュー313に、更新要求を発行する。参照スレッド302は、例えば、検索用疑似スレッド(検索スレッド)でよい。更新スレッド301は、割り当てられている共有リソース部を更新要求に応答して更新する。更新スレッド301は、例えば、その更新スレッド301に対応したキュー313から取り出された更新要求を処理する。
複数のOSスレッド304の共有リソースが、論理的に又は物理的に区切られた複数の共有リソース部を有している。共有リソースは、例えば、DB領域群(複数のDB領域)、ログバッファ群(複数のログバッファ214)及びログファイル群(複数のログファイル107)のうちの少なくともDB領域群である。
データベース管理プログラム215により、更新スレッド301に共有リソース部が1:n又は1:1で割り当てられる(nは2以上の整数)。更新スレッド301は、割り当てられている共有リソース部にはアクセスできるが、割り当てられていない共有リソース部にはアクセスできない。具体的には、更新スレッド301にDB領域303が1:nで割り当てられる。すなわち、各更新スレッド301には、n個の複数のDB領域303を割り当てることができるが、各DB領域303には、n個の更新スレッド301を割り当てることができない。これにより、複数の更新スレッド301からDB領域303への更新が競合することを回避できる。また、各更新スレッド301に、ログバッファ214及びログファイル107がそれぞれ1:1(又は1:n)で割り当てられる。すなわち、各更新スレッド301には、1つのログバッファ214及び1つのログファイル107を割り当てることができ、各ログバッファ214及び各ログファイル107には、それぞれ、複数の更新スレッド301を割り当てることができない。これにより、複数の更新スレッド301を並列に実行しても、複数の更新スレッド301からログバッファ214及びログファイル107への更新が競合することを回避できる。なお、共通ログファイル307及び共通ログバッファ314は、全ての更新スレッド301に割り当てられる。つまり、いずれの更新スレッド301も、共通ログファイル307及び共通ログバッファ314を更新できる。
参照スレッド302及び更新スレッド301の実行は、例えば次の通りである。OSスレッドT11aが実行されたとする。この場合、複数の参照スレッドU11a1、…と、1つの更新スレッドU11a4が実行される。具体的には、例えば、OS O1(図2参照)からコアC11に対して、DBファイル106又はログファイル107の或る領域の更新が指示されたとする。この場合、複数の参照スレッドU11a1、…のいずれかが、更新対象ページを検索し、見つかったページを含んだDB領域に割り当てられている更新スレッド301(又はその更新スレッド301に対応したキュー313)をデータベース管理プログラム10a(図2参照)に問い合わせ、その回答を基に特定されたキュー313に、更新要求を発行する。ここでは、更新スレッドU11b4が見つかり、キューQ22に更新要求が格納されたとする。更新スレッドU11b4は、キューQ22から取り出された更新要求に応答して、その更新要求から特定された更新対象ページを更新する。その際、更新スレッド301は、物理ログ(例えば、更新対象ページの番号、更新対象の更新前ページ)を共通ログバッファB14eに書き込み、共通ログバッファB14eから共通ログファイル7eへその物理ログを書き込む。また、更新スレッドU11b4は、その更新に対応した論理ログを、その更新スレッドU11b4に割り当てられているログバッファB14dに書き込み、ログバッファB14dから、その論理ログを、更新スレッドU11b4に割り当てられているログファイル7bに書き込む。なお、共通ログバッファ314及び共通ログファイル307のうちの少なくとも1つについては、排他制御が行われてもよい。例えば、更新スレッドU11b4は、共通ログバッファB14eへの物理ログの書き込みの際、共通ログバッファB14eのロックを取得し、物理ログの書き込み終了後、ロックを解放してもよい。
本実施形態では、データベースに関し、更新スレッド301に対する割当ての単位は、DBファイル単位に比べて、DB領域単位が好ましい。なぜなら、DBファイルのような比較的サイズの大きい範囲が割当て単位であると、その範囲に複数の更新対象が含まれている可能性が高くなり、結果として、複数の更新を並列に実行できない可能性が高くなるからである。また、CPUコア211の数よりもDBファイル106の数の方が少ないこともあり得るが、その場合には、更新スレッド301が割り当てられない余りのCPUコア211が生じてしまうためである。
また、本実施形態では、データベースに関し、更新スレッド301に対する割当て単位は、DBページ単位に比べて、DB領域単位が好ましい。なぜなら、DBページのような比較的サイズの小さい範囲が割当て単位であると、その範囲に空きがなくなって再割り当てが発生することの頻度が比較的高くなるからである。
また、本実施形態では、ログ(特に論理ログ)に関し、更新スレッド301に対する割当て単位は、ログ領域単位に比べて、ログファイル単位が好ましい。なぜなら、ログファイル単位が、ログに関して最も大きな割当て単位であるため、再割り当ての頻度を最も少なくでき、且つ、一般に、ログの更新はシーケンシャルライトが主体であるため、離散した複数の更新対象が同一ログファイル107に存在する可能性も少ないためである。
更新スレッド301に対する割当て単位は、上述の通り、DB領域単位及びログファイル単位が好ましいが、それに限定する必要は無い。DBページ単位又はDBファイル単位の割当てが行われてもよいし、ログ領域単位の割当てが行われてもよい。
次に、データベース管理プログラム215及び管理データ216の詳細を説明する。
図4は、データベース管理プログラム215の構成例を示す。
データベース管理プログラム215は、スレッド割当てプログラム401、リソース割り当てプログラム402、疑似スレッド実行制御プログラム403、DB検索プログラム404、DB更新プログラム405及びDBロールバックプログラム406を含む。
スレッド割当てプログラム401は、SQL(Structured Query Language)等のクエリ実行定義を基に、複数のCPU201(コア211)にOSスレッド304を割り当てて、さらに、各OSスレッド304内に複数の疑似スレッドを生成するプログラムである。コア211、OSスレッド304及び疑似スレッドの対応付けは、後述するスレッド管理テーブル502で管理される。
リソース割当てプログラム402は、生成された更新スレッド301にDB領域303等の共有リソース部を割り当てるプログラムである。疑似スレッドと共有リソース部との対応付けも、スレッド管理テーブル502で管理される。
疑似スレッド実行制御プログラム403は、参照スレッド302と更新スレッド301間におけるデータの受け渡しキューを基に、いずれの更新スレッド301を実行させるかを制御するプログラムである。
DB検索プログラム404は、複数の参照スレッド302のいずれかの参照スレッド302を実行させて、各参照スレッド302に割り当て済みのDB領域303から検索対象のレコードを取得するプログラムである。
DB更新プログラム405は、参照スレッド302から提供される情報を基に、更新スレッド301を実行させて、データベースの割り当て済みの領域を更新するプログラムである。
DBロールバックプログラム406は、ロールバックを制御するプログラムである。
図5は、管理データ216の構成例を示す。
管理データ216は、DBファイル管理テーブル501、スレッド管理テーブル502、スレッド間データ受け渡しキュー503、DB統計情報504、DB領域−ページ対応管理テーブル505及びログファイル管理テーブル506を含む。DB統計情報504は、例えば、索引の構成を表す情報、索引のエントリ数をDB表す情報、DB表のレコード数を表す情報、カラム毎の値の最大値、平均値、最小値、カラム毎の値分布等、データベースが含むデータに関する情報を含んでよい。
図6は、DBファイル管理テーブル501の構成例を示す。
DBファイル管理テーブル501は、DBファイル106に関する情報を保持する。例えば、DBファイル管理テーブル501は、DBファイル106毎にエントリを有する。各エントリが、DBファイル名601、最大使用ページ番号602及び最大ページ番号603を記憶する。
DBファイル名601は、DBファイル106の名前を示す。最大使用ページ番号602は、DBファイル106のデータが実際に格納されているページにそれぞれ対応したページ番号のうちの最大のページ番号を示す。最大ページ番号603は、DBファイル106の格納先となり得る複数のページにそれぞれ対応した複数のページ番号のうちの最大のページ番号を示す。
図6の例によれば、DBファイル6aが、最大3000個のページを占める大きさであり、そのうち120番目のページにまでDBファイル6aのデータが格納されている。
図7は、DB領域−ページ対応管理テーブル505の構成例を示す。
DB領域−ページ対応管理テーブル505は、DBファイル106、DB領域303及びDBページの対応関係を表す。例えば、DB領域−ページ対応管理テーブル505は、DB領域303毎にエントリを有する。各エントリが、DBファイル名701、DB領域番号702、開始ページ番号703及び終了ページ番号704を記憶する。
DBファイル名701は、DB領域303に格納されるDBファイル106の名前を示す。DB領域番号702は、DB領域303の番号を示す。開始ページ番号703は、DB領域303を構成する連続した複数のページのうちの先頭のページの番号を示す。終了ページ番号704は、DB領域303を構成する連続した複数のページのうちの末端のページの番号を示す。
図7の例によれば、DBファイル6aが、DB領域Aa1、Aa2、…に格納されている。各DB領域303は、1000個のページで構成されている。DB領域Aa1が、ページ1〜ページ1000で構成されており、DB領域Aa2が、ページ1001〜ページ2000で構成されている。
図8は、スレッド管理テーブル502の構成例を示す。
スレッド管理テーブル502は、疑似スレッドと、OSスレッド304、CPU201コア211、種別及び共有リソース部(ログバッファ214、ログファイル107、DBファイル106及びDB領域303)との対応関係を表す。例えば、スレッド管理テーブル502は、疑似スレッド毎にエントリを有する。各エントリが、コア番号801、OSスレッド番号802、疑似スレッド番号803、種別804、ログバッファ名805、ログファイル名806、DBファイル名807及びDB領域番号808を記憶する。
コア番号801は、疑似スレッドを実行するコア211の番号を示す。OSスレッド番号802は、疑似スレッドを含んだOSスレッド304の番号を示す。疑似スレッド番号803は、疑似スレッドの番号を示す。種別804は、疑似スレッドの種別804(例えば、「参照」又は「更新」)を示す。ログバッファ名805は、疑似スレッドに割り当てられているログバッファ214の名前を示す。ログファイル名806は、疑似スレッドに割り当てられているログファイル107の名前を示す。DBファイル名807は、疑似スレッドに割り当てられているDB領域に格納されているDBファイル106の名前を示す。DB領域番号808は、疑似スレッドに割り当てられているDB領域303の番号を示す。
図8の例によれば、OSスレッドT11aは、3つの参照スレッドU11a1〜U11a3と、1つの更新スレッドU11a4とを含む。OSスレッドT11a(参照スレッドU11a1〜U11a3、及び、更新スレッドU11a4)は、コアC11で実行される。3つの参照スレッドU11a1〜U11a3に、それぞれ、3つのDB領域Aa1〜Aa3が割り当てられている。このため、参照スレッドU11a1は、DB領域Aa1を参照し、他のDB領域303を参照しない。更新スレッドU11a4に、OSスレッドT11a(参照スレッドU11a1〜U11a3)が参照する3つのDB領域Aa1〜Aa3が割り当てられている。更新スレッドU11a4は、DB領域Aa1〜Aa3のいずれも更新し得るが、DB領域Aa1〜Aa3以外のDB領域303を更新しない。また、更新スレッドU11a4(OSスレッドT11a)に、ログバッファB14aとログファイル7aが割り当てられている。更新スレッドU11a4は、ログバッファB14aとログファイル7aを更新し得るが、ログバッファB14a以外のログバッファ214、及び、ログファイル7a以外のログファイル107を更新しない。
図8の例によれば、同一OSスレッド304について、更新スレッド301に割り当てられている1以上のDB領域303と、1以上の参照スレッド302にそれぞれ割り当てられている1以上のDB領域303とが同じである。しかし、必ずしもそうである必要は無く、同一スレッドについて、更新スレッド301に割り当てられた1以上のDB領域303と、1以上の参照スレッド302にそれぞれ割り当てられた1以上のDB領域303とが部分的に又は完全に異なっていてもよい。
図9は、スレッド間データ受け渡しキュー503の構成例を示す。
スレッド間データ受け渡しキュー503は、疑似スレッド間で受け渡しされるデータ(更新要求)が格納されるキューである。スレッド間データ受け渡しキュー503は、受け渡し対象のデータ毎にエントリを有する。各エントリが、Fromスレッド番号901、Toスレッド番号902及びレコード値903を記憶する。
Fromスレッド番号901は、提供元の疑似スレッドの番号を示す。Toスレッド番号902は、提供先の疑似スレッドの番号を示す。レコード値903は、受け渡し対象のデータ(例えば更新要求)に含まれる値を示す。例えば、レコード値903は、更新要求で指定された更新先を表す情報(例えば更新先のアドレス又はページ番号)と、更新後データ(例えばページに書き込まれるデータ)とを含んでよい。
図9の例によれば、参照スレッドU11a1から更新スレッドU11a4へ提供されたレコード値xxxxが蓄積されている。なお、図9に例示の構成は、論理的な構成であって、スレッド間データ受け渡しキュー503は、論理的には、更新スレッド301毎(OSスレッド304毎)に独立した複数のキュー313(図3参照)でよい。
図10は、ログファイル管理テーブル506の構成例を示す。
ログファイル管理テーブル506は、ログファイル107に関する情報を保持する。例えば、ログファイル管理テーブル506は、ログファイル107毎にエントリを有する。各エントリが、ログファイル名1001及び状態1002を記憶する。
ログファイル名1001は、ログファイル107の名前を示す。状態1002は、ログファイル107の状態(例えば「使用中」又は「未使用」)を示す。
図10の例によれば、ログファイル7aの状態が「使用中」(例えばいずれかの更新スレッド301に既に割り当てられている状態)であり、ログファイル7cの状態が「未使用」(例えばいずれの更新スレッド301にも割り当てられていない状態)である。
以下、本実施形態で行われる処理を説明する。
図11は、スレッド割当て処理の流れの一例を示す。
スレッド割当てプログラム401は、クエリ実行定義を受け取る(S1101)。クエリ実行定義は、生成される参照スレッド302の数がSQLなどにより定義されたクエリでよい。参照スレッド302数は、予めユーザ入力により設定されてクエリに指定されてよい。クエリ実行定義で指定される参照スレッド302数は、例えば、参照スレッド302の最大数又は最小数でもよい。
スレッド割当てプログラム401は、ホスト計算機101のOS218から得られたシステム情報(例えばホスト計算機101のハードウェア構成に関する情報を含んだ情報)から、ホスト計算機101のコア211の数を取得する(S1102)。
取得されたコア211数分、S1103〜S1109が行われる。以下、1つのコア211(1つのS1103〜S1109に対応したコア211)を例に取り、そのコア211を、図11〜図14の説明において、便宜上、「対象コア211」と言う。
スレッド割当てプログラム401は、OSスレッド304(リアルスレッド)を生成し(S1103)、生成したOSスレッド304を、対象コア211に割り当てる(S1104)。生成されたOSスレッド304がいずれのコア211に割り当てられるかは、ホスト計算機101のOS218により決定されてよい。
スレッド割当てプログラム401は、参照スレッド数算出処理(図12)を行う(S1105)。これにより、対象コア211について(対象コア211により実行されるOSスレッド304について)、生成される参照スレッド302の数が算出される。
スレッド割当てプログラム401は、対象コア211について(S1103で生成されたOSスレッド304について)、更新スレッド301を生成する(S1106)。スレッド割当てプログラム401は、更新用DB領域割当て処理(図13)と、ログファイル割当て処理(図25)とを行う(S1107)。これにより、S1106で生成した更新スレッド301にDB領域303及びログファイル107が割り当てられる。
S1105で算出された参照スレッド数分、S1108及びS1109が行われる。すなわち、スレッド割当てプログラム401は、対象コア211について参照スレッド302を生成する(S1108)。そして、スレッド割当てプログラム401は、参照用DB領域割当て処理を行う(S1109)。これにより、S1108で生成した参照スレッド302にDB領域303が割り当てられる。
最後に、スレッド割当てプログラム401は、図11の一連の処理において生成されたOSスレッド304の各々の実行を開始する(S1110)。具体的には、例えば、スレッド割当てプログラム401は、ホスト計算機101のOS218に、OSスレッド304を生成したことを通知することにより、そのOS218にOSスレッド304の実行を開始させる。
図12は、参照スレッド数算出処理の流れの一例を示す。
スレッド割当てプログラム401は、ホスト計算機101のOS218から、コア211の入出力帯域を表す情報を取得する(S1201)。ここで取得される情報は、ホスト計算機101の各コア211についての情報であってもよいし、S1104でOSスレッド304が割り当てられたコア211についての情報であってもよい。
スレッド割当てプログラム401は、ホスト計算機101のOS218から、コア211の入出力平均応答時間を表す情報を取得する(S1202)。ここで取得される情報も、ホスト計算機101の各コア211についての情報であってもよいし、S1104でOSスレッド304が割り当てられたコア211についての情報であってもよい。入出力の「応答時間」とは、コア211がDB領域303(又はログ領域)に対するI/O要求を発行してからそのI/O要求に対する応答を受けるまでの時間である。入出力平均応答時間に代えて、所定期間における応答時間の最大値又は最小値等でもよい。
スレッド割当てプログラム401は、ホスト計算機101のOS218から、コア211の平均入出力長を表す情報を取得する(S1203)。ここで取得される情報も、ホスト計算機101の各コア211についての情報であってもよいし、S1104でOSスレッド304が割り当てられたコア211についての情報であってもよい。「入出力長」とは、1つの要求に応答して入出力されるデータの長さ(サイズ)である。平均入出力長に代えて、所定期間における入出力長の最大値又は最小値等でもよい。
そして、スレッド割当てプログラム401は、1コア当りの参照スレッド数を算出する(S1204)。具体的には、例えば、スレッド割当てプログラム401は、以下の式(1)により、1コア当りの参照スレッド数を算出する。
参照スレッド数=コア入出力帯域(Hz)/(入出力平均応答時間(h)×平均入出力長(byte))−1・・・(1)
式(1)は、コア211が過負荷にならない程度にそのコア211の性能を十分に使用すると考えられる参照スレッド数の計算式の一例である。この例によれば、1つのコア211に対して1つのOSスレッド304が割り当てられた場合の、1コア当りの参照スレッド数が算出される。式(1)によれば、OSスレッド304内の複数の疑似スレッドのうちの1つが更新スレッド301とされている(式(1)中の「−1」)。
なお、例えば、1つのコア211に対してn個のOSスレッド304が割り当てられる場合、式(2)により、1OSスレッド当たりの参照スレッド数が算出されてよい。
参照スレッド数={コア入出力帯域(Hz)/(入出力平均応答時間(h)×平均入出力長(byte))−n}/n・・・(2)
また、1つのコア211(OSスレッド304)についての参照スレッド数は、概略的に言えば、コア211の性能(例えばコア入出力帯域)と、1擬似スレッド当たりの性能と、更新スレッド数とに基づき得ることが可能である。
また、入出力平均応答時間及び平均入出力長は、監視により定期的又は不定期的に更新されてよい。このため、参照スレッド数は、参照スレッド数算出処理の実行タイミングによって異なることもある。故に、参照スレッド数は、複数のOSスレッド304において均一であることもあれば、複数のOSスレッド304において異なっていることもある。なお、更新スレッド数のみならず参照スレッド数も固定でもよい。例えば、OSスレッド304が有する疑似スレッドの内訳は、必ず、n個の更新スレッド301(nは1以上の整数で固定値(例えばn=1))とm個の参照スレッド302(mは1以上の整数で固定値)であってもよい。
図13は、更新用DB領域割当て処理の流れの一例を示す。
スレッド割当てプログラム401は、リソース割当てプログラムを呼び出すことで、更新用DB領域割当て処理を行う。言い換えれば、更新用DB領域割当て処理は、リソース割当てプログラムにより行われる。
リソース割当てプログラムは、スレッド管理テーブル502を参照し、更新スレッド301に割り当てられているDB領域番号808のうち最大のDB領域番号808を取得する(S1301)。
リソース割当てプログラムは、S1301で取得されたDB領域番号808が表すDB領域303の次のDB領域303を含む連続したN個(Nは1以上の整数)のDB領域303を、更新スレッド301の割当て対象として決定する(S1302)。但し、リソース割当てプログラムは、スレッド管理テーブル502、DBファイル管理テーブル501及びDB領域−ページ対応管理テーブル505のうちの少なくとも1つを参照し、N個のDB領域303の各々について、以下を行なってよい。すなわち、リソース割当てプログラムは、S1301で取得されたDB領域番号808に対応したDBファイル106の最大使用ページ番号602に、DB領域303を構成するページ数を加算し、加算後のページ番号が、そのDBファイル106の最大ページ番号603を超えるか否かを判断する。その判断の結果が否定の場合、リソース割当てプログラムは、そのDB領域303を1つの割当て対象として決定する。その判断の結果が肯定の場合、リソース割当てプログラムは、そのDB領域303を非割当て対象とする(この場合、リソース割当てプログラムは、他のDBファイル106のDB領域303を割当て対象としてもよい)。
リソース割当てプログラムは、S1302の結果に従い、スレッド管理テーブル502及びDBファイル管理テーブル501のうちの少なくとも1つを更新する(S1303)。例えば、リソース割当てプログラムは、更新スレッド301について、その更新スレッド301を実行するコア211の番号、その更新スレッド301を含むOSスレッド304の番号、その更新スレッド301の番号、種別「更新」、その更新スレッド301に割り当てられたDB領域303の番号、及び、その更新スレッド301に割り当てられたDB領域303を含んだDBファイル106の名前を、スレッド管理テーブル502のエントリに登録する。
図25は、ログファイル割当て処理の流れの一例を示す。
リソース割当てプログラム402は、空きのログバッファ214を確保し、且つ、ログファイル管理テーブル506から状態1002が「未使用」のログファイル107を選択する(S2501)。
ログバッファ214の確保及びログファイル107の選択に成功した場合(S2502:Y)、リソース割当てプログラム402は、選択したログファイル107に対応する状態1002を「使用中」に更新し、確保したログバッファ214及び選択したログファイル107を、S1006で生成された更新スレッド301に割り当てる(S2503)。S2503において、リソース割当てプログラム402は、その更新スレッド301に対応するエントリ(スレッド管理テーブル502のエントリ)に、割り当てたログバッファ214の名前と、割り当てたログファイル107の名前とを登録してよい。また、S2503において、リソース割当てプログラム402は、その更新スレッド301に、共通ログファイル307及び共通ログバッファ314も割り当ててよい。
一方、ログバッファ214の確保及びログファイル107の選択の少なくとも1つに失敗した場合(S2502:N)、リソース割当てプログラム402は、処理を終了する。すなわち、本実施形態では、全ての更新スレッド301にログファイル107及びログバッファ214が必ずしも割り当てられなくてもよい。
図14は、参照用DB領域割当て処理の流れの一例を示す。
スレッド割当てプログラム401は、リソース割当てプログラム402を呼び出すことで、参照用DB領域割当て処理を行う。言い換えれば、参照用DB領域割当て処理は、リソース割当てプログラム402により行われる。
リソース割当てプログラム402は、スレッド管理テーブル502から、参照スレッド302に割り当てられているDB領域番号808のうち最大のDB領域番号808を取得する(S1401)。
リソース割当てプログラム402は、S1401で取得されたDB領域番号808が表すDB領域303の次のDB領域303を含む連続したM個(Mは1以上の整数(ここではM=1))のDB領域303を、参照スレッド302の割当て対象として決定する(S1402)。但し、リソース割当てプログラム402は、スレッド管理テーブル502、DBファイル管理テーブル501及びDB領域−ページ対応管理テーブル505のうちの少なくとも1つを参照し、決定したDB領域303の各々について、以下を行なってよい。すなわち、リソース割当てプログラム402は、S1401で取得されたDB領域番号808に対応したDBファイル106の最大使用ページ番号602に、DB領域303を構成するページ数を加算し、加算後のページ番号が、そのDBファイル106の最大ページ番号603を超えるか否かを判断する。その判断の結果が否定の場合、リソース割当てプログラム402は、そのDB領域303を1つの割当て対象として決定する。その判断の結果が肯定の場合、リソース割当てプログラム402は、そのDB領域303を非割当て対象とする(この場合、リソース割当てプログラム402は、他のDBファイル106のDB領域303を割当て対象としてもよい)。或いは、リソース割当てプログラム402は、同一のOSスレッド304内の更新スレッド301に割り当てられたN個のDB領域303を、算出された参照スレッド数分の参照スレッド302への割当て対象としてもよい。
リソース割当てプログラム402は、S1402の結果に従い、スレッド管理テーブル502及びDBファイル管理テーブル501のうちの少なくとも1つを更新する。例えば、リソース割当てプログラム402は、参照スレッド302を実行するコア211の番号、その参照スレッド302を含むOSスレッド304の番号、その参照スレッド302の番号、種別「参照」、その参照スレッド302に割り当てられたDB領域303の番号、及び、その参照スレッド302に割り当てられたDB領域303を含んだDBファイル106の名前を、スレッド管理テーブル502のエントリに登録する。
図15は、擬似スレッド実行制御処理の流れの一例を示す。
擬似スレッド実行制御処理は、例えば図11のS1110により開始される処理であり、疑似スレッド実行制御プログラム403により行われる。図15の例によれば、キュー313に所定量以上のデータ(更新要求)があれば、更新スレッド301が実行され、キュー313に所定量以上のデータが無ければ、参照スレッド302が実行される。上述したように、更新スレッド301及び参照スレッド302は、それぞれ特定のDB領域303に対応付けられているため、更新処理又は参照処理(検索処理)を並行して実行することができる。
疑似スレッド実行制御プログラム403は、ホスト計算機101のOS218から、実行するOSスレッド304の番号を取得し、当該OSスレッド304に対応するキュー313を特定する(S1501)。疑似スレッド実行制御プログラム403は、S1501で特定したキュー313の残量が所定の閾値以上か否かを判断する(S1502)。
S1502の判断結果が肯定の場合(S1502:Y)、疑似スレッド実行制御プログラム403は、DB更新プログラム405を呼び出すことによりDB更新処理(図17)を実行する(S1503)。これにより、特定したキュー313に対応する更新スレッド301が実行される。すなわち、更新スレッド301が、キュー313内のレコード値903を、その更新スレッド301に割り当てられているDB領域303(又はログファイル107)に書き込む。疑似スレッド実行制御プログラム403は、その更新処理が終了か否か(検索終了フラグをONか否か)を判断する(S1504)。S1504の判断結果が否定の場合(S1504:N)、S1501が行われ、S1504の判断結果が肯定の場合(S1504:Y)、処理が終了する。
S1502の判断結果が否定の場合(S1502:N)、疑似スレッド実行制御プログラム403は、参照スレッド302による検索処理が終了したか否かを判断する(S1505)。S1505の判断結果が肯定の場合(S1505:Y)、疑似スレッド実行制御プログラム403は、S1503を行う。
S1505の判断結果が否定の場合(S1505:N)、疑似スレッド実行制御プログラム403は、優先して検索するデータがあるかを否かを判断する(S1506)。
S1506の判断結果が肯定の場合(S1506:Y)、疑似スレッド実行制御プログラム403は、当該優先データの検索処理を担当する参照スレッド302を選択する(S1507)。一方、S1506の判断結果が否定の場合(S1506:N)、疑似スレッド実行制御プログラム403は、DB領域303が割り当てられている参照スレッド302のうち、キュー313の残量が最も少ない参照スレッド302を選択する(S1508)。
S1507又はS1508の後、疑似スレッド実行制御プログラム403は、参照スレッド302の選択に成功したか否かを判断する(S1509)。S1509の判断結果が肯定の場合(S1509:Y)、疑似スレッド実行制御プログラム403は、DB検索プログラム404を呼び出すことによりDB検索処理(図16)を実行する(S1510)。これにより、選択された参照スレッド302が実行される。一方、S1509の判断結果が否定の場合(S1509:N)、疑似スレッド実行制御プログラム403は、検索終了フラグをONにして(S1511)、S1501を実行する。
図16は、DB検索処理の流れの一例を示す。
DB検索プログラム404は、実行対象の参照スレッド302に割り当て済みのDB領域303内のページ数分、S1601〜S1604を繰り返す(S1606)。
すなわち、DB検索プログラム404は、実行対象の参照スレッド302に割り当てられたDB領域303のDBページから検索条件に合致するレコードを取得する(S1601)。S1601で取得したレコードが入出力待ちとなる場合、DB検索プログラム404は、参照スレッド302の実行を中断する(S1602)。DB検索プログラム404は、S1601で取得したレコードをスレッド間データ受け渡しキュー503に登録する(S1603)。具体的には、例えば、DB検索プログラム404は、スレッド間データ受け渡しキュー503313のエントリに、Fromスレッド番号901として、実行した参照スレッド302の番号を登録し、Toスレッド番号902として、当該参照スレッド302と同じOSスレッド304内で実行する更新スレッド301の番号を登録し、レコード値903として、S1601で取得したレコード値903を登録する。DB検索プログラム404は、当該参照スレッド302の実行が開始されてから一定サイクルが経過した場合、当該参照スレッド302の実行を中断する(S1604)。S1604の中断処理により、1つのOSスレッド304内で、1つの参照スレッド302の検索処理が長時間実行されて、他の参照スレッド302が実行されずに待ち状態1002が継続することを避けることができる。
DB検索プログラム404は、リソース割当てプログラム402を呼び出して参照用DB領域割当て処理を実行する(S1605)。参照スレッドに割り当てられたDB領域があれば(S1606:Y)、割り当てられたDB領域の数分、S1601〜S1604が行われる。参照スレッドに割り当てられたDB領域が無ければば(S1606:N)、処理が終了する。
図17は、DB更新処理の流れの一例を示す。
DB更新処理は、DB更新プログラム405により行われる。DB更新処理は、上述したDB検索処理によりスレッド間データ受け渡しキュー503313に登録されたキュー313のレコード値903に対応するデータを更新する処理である。
DB更新プログラム405は、スレッド間データ受け渡しキュー503313が空か否かを判断する(S1701)。S1701の判断結果が肯定の場合(S1701:Y)、DB更新プログラム405は、処理を終了する。
一方、S1701の判断結果が否定の場合(S1701:N)、DB更新プログラム405は、スレッド間データ受け渡しキュー503からレコードを取得する(S1702)。DB更新プログラム405は、実行している更新スレッド301に割り当てられているDB領域303に、空きがあるか否かを判断する(S1703)。S1703の判断結果が肯定の場合(S1703:Y)、DB更新プログラム405は、S1706を実行する。
一方、S1703の判断結果が否定の場合(S1703:N)、DB更新プログラム405は、リソース割当てプログラム402を呼び出して更新用DB領域割当て処理(図13)を実行する(S1704)。これにより、更新スレッド301に新たなDB領域303が割り当てられる。S1704の割り当て処理が成功した場合(S1705:Y)、DB更新プログラム405は、S1706を実行する。一方、S1704の割り当て処理が失敗した場合(S1705:N)、DB更新プログラム405は、処理を終了する。
S1706において、DB更新プログラム405は、実行している更新スレッド301に割り当てられているログファイル107のログ領域に空きがあるか否かを判断する。S1706の判断結果が肯定の場合(S1706:Y)、DB更新プログラム405は、S1708を実行する。一方、S1706の判断結果が否定の場合(S1706:N)、DB更新プログラム405は、リソース割当てプログラム402を呼び出してログファイル割当て処理(図25)を実行する(S1707)。これにより、更新スレッド301に新たなログファイル107が割り当てられる。
DB更新プログラム405は、ログ(例えば、論理ログ)を、更新スレッド301に割り当てられているログファイル107に出力する(S1708)。その際、DB更新プログラム405は、ログ(例えば、更新前ページのデータを含んだ物理ログ)を、共通ログファイル307に出力してよい。DB更新プログラム405は、ログのログファイル107への出力処理が入出力待ちとなる場合、当該更新スレッド301の実行を中断する(S1709)。
続いて、DB更新プログラム405は、更新スレッド301に割り当てられているDB領域303内のDBページを更新する(S1710)。S1710は、少なくともコミットのときに行われてよい。すなわち、コミットの時に更新後データがDBページに即時に書き込まれてよい。DB更新プログラム405は、更新対象となるDBファイル106への出力処理が入出力待ちとなる場合、当該更新スレッド301の実行を中断する(S1711)。DB更新プログラム405は、更新対象となるDBファイル106への更新が終了した後、S1701を再度実行する。
以上が、本実施形態において行われる処理の一例である。
本実施形態では、管理端末108のCPU201(又はホスト計算機101のCPU201)が、図18に例示する管理画面を表示できる。図18に例示する管理画面は、優先的に検索するデータや、参照スレッド数を受け付けるGUI(Graphical User Interface)である。具体的には、例えば、管理画面は、優先的に検索するデータの属性の入力を受け付けるUI(User Interface)と、生成される参照スレッド数の入力を受け付けるUIとを有する。これらのUIを通じて入力された情報が、管理端末108経由又は非経由でホスト計算機101のメモリ202に設定され、その情報を基に、優先データの有無の判断(S1506)や、生成される参照スレッド302の数の算出(S1105)等が制御されてよい。
また、上述した説明では、更新用DB領域割当て処理において、異なる更新スレッド301に異なるDB領域303が割り当てられるが、その割り当ては、上述したように、第1の割り当てモードに従う割り当てである。本実施形態では、第1の割り当てモードを含む複数の割り当てモードが用意されている。更新用DB領域割当て処理又は他の処理において、複数の割り当てモードから選択された割り当てモードを、更新スレッド301に対する領域割り当てに適用できる。割り当てモードの選択は、管理端末108又はホスト計算機101のユーザにより手動で行われてもよいし、設定されたポリシーに従ってデータベース管理プログラム215により自動で行われてもよい。例えば、スレッド割当てプログラム401は、クエリを受け付けた場合等の所定のイベントを検出する都度に、割り当てモード選択処理を行ってよい。割り当てモード選択処理は、例えば、図11のS1002で行われてよい。割り当てモード選択処理において、スレッド割当てプログラム401は、下記を行ってよい。
(A1)スレッド割当てプログラム401は、DB統計情報504を参照し、索引とDB表の各々について構成等の属性を特定する。
(A2)(A1)において、索引がB木構造であることを特定した場合、スレッド割当てプログラム401は、その索引について、後述の第2の割り当てモードを選択する。
(A3)(A1)において、索引がB木構造でないことを特定した場合、スレッド割当てプログラム401は、その索引について、後述の第2の割り当てモード以外のいずれかの割り当てモード(例えば第1の割り当てモード)を選択する。
(A4)(A1)において、DB表について、キー毎の重複数のばらつきが比較的大きい場合、スレッド割当てプログラム401は、そのDB表について、後述の第4の割り当てモードを選択する。
(A5)(A1)において、DB表について、キー毎の重複数のばらつきが比較的小さい場合、スレッド割当てプログラム401は、そのDB表について、第1の割り当てモード又は後述の第3の割り当てモードを選択する。
以下、第1の割り当てモード以外の幾つかの割り当てモードを説明する。なお、更新スレッド301に異なる共有リソース部が割り当てられるが、本実施形態では、1つのOSスレッド304には1つの更新スレッド301が割り当てられるので、以下の説明では、更新スレッド301に対する割り当てを、OSスレッド304に対する割り当てとして説明する。
図19は、第2の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
第2の割り当てモードによれば、索引及び表に対応した複数のDBページのB木構造に基づきOSスレッド304にDB領域303が割り当てられる。
B木構造によれば、ページの種別804として、先頭のページであるルートページ(RO)、末端のページであるリーフページ(RE)、ルートページとリーフページ間のページである中間ページ(IN)とがある。図19の例によれば、B木構造は、3階層を有する。3階層は、ルートページが属する上位層と、中間ページが属する中間層と、リーフページが属する下位層とで構成される。本実施形態では、ページが増える場合、リーフページ及び中間ページが増えることになり、3階層は維持される。しかし、それに限らず、例えば、B木構造は、4階層以上の層を有してもよい。その場合、比較的上位の中間ページと比較的下位の中間ページとがある。言い換えれば、ルートページ及びリーフページ以外は中間ページである。
ルートページには、1つ下の階層の中間ページに対するポインタと、当該1つ下の階層のページが管理対象とするキーの最大値とを対応付けたエントリが1以上設けられる。中間ページも、同様に、1つ下の階層のページに対するポインタと、当該1つ下の階層の中間ページが管理対象とするキーの最大値とを対応付けたエントリが1つ以上設けられる。リーフページには、キーと、当該キーに対応する値の格納位置(例えば、Part表のページ番号及びの当該ページ中のスロット番号)とを対応付けたロー(行:レコード)が1つ以上格納される。
第2の割り当てモードによれば、このようなB木構造に従い、データベース管理プログラム215(例えばリソース割当てプログラム402)により、異なるOSスレッド304に、それぞれ、異なるページ集合が割り当てられる(OSスレッド304に、ページ集合が1:1又は1:nで割り当てられる)。すなわち、第2の割り当てモードによれば、ページ集合が、共有リソース部の一例であり、DB領域303に代えて、ページ集合がOSスレッド304に割り当てられる。1つのページ集合は、1以上の中間ページと、その1以上の中間ページに属する複数のリーフページとの集合である。図19の例によれば、OSスレッドT11aに、第1のページ集合(中間ページIN1と、それに属するリーフページRE11〜RE13)が割り当てられ、OSスレッドT11bに、第2のページ集合(中間ページIN2と、それに属するリーフページRE21〜23)が割り当てられる。ページ集合は、他のページ集合に重複しない。
このような割り当てにより、同一中間ページに属する異なるリーフページが更新されても異なる更新スレッド301が同一中間ページにアクセスするといった競合が生じることを避けることができる。なお、上記異なるページ集合の各々がDB領域303であってもよい。
図20は、第3の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
第3の割り当てモードによれば、データベース管理プログラム215により、異なるOSスレッド304に、それぞれ、異なるキー範囲が割り当てられる(OSスレッド304に、キー範囲が1:1又は1:nで割り当てられる)。すなわち、第3の割り当てモードによれば、キー範囲が、共有リソース部の一例であり、DB領域303に代えて、キー範囲がOSスレッド304に割り当てられる。各キー範囲は、いずれのキー範囲にも重複していない。図20の例によれば、OSスレッドT11aに、第1のキー範囲(キー01〜10)が割り当てられ、OSスレッドT11bに、第2のキー範囲(キー11〜20)が割り当てられる。
第3の割り当てモードによれば、異なる更新スレッド301が同一キーを含んだ領域にアクセスするといった競合を回避できる。
図21は、第4の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
第4の割り当てモードによれば、DB統計情報504と検索条件を基に、データベース管理プログラム215により、異なるOSスレッド304に、それぞれ、異なるキー集合が割り当てられる(OSスレッド304に、キー集合が1:1又は1:nで割り当てられる)。すなわち、第4の割り当てモードによれば、キー集合が、共有リソース部の一例であり、DB領域303に代えて、キー集合がOSスレッド304に割り当てられる。DB統計情報504は、キー毎に重複数を含む。重複数は、キーに属する値の数である。各キー集合は、1以上のキーである。各キー集合は、複数のキー集合の各々の重複数合計がなるべく均等になるように構成される。キュー313集合の重複数合計とは、そのキー集合に含まれるキーに対応した重複数の合計である。重複数合計は、例えばデータベース管理プログラム215により算出され、キュー313集合も、例えばデータベース管理プログラム215により定義される。図21の例によれば、OSスレッドT11aに、第1のキー集合(キーA及びC)が割り当てられ、OSスレッドT11bに、第2のキー集合(キーB)が割り当てられる。
第4の割り当てモードによれば、異なる更新スレッド301が同一キーを含んだ領域にアクセスするといった競合を回避でき、且つ、更新スレッド301の負荷(処理量)を略均一にできる。
さて、本実施形態では、データベースの更新に失敗した等の場合に、DBロールバックプログラム406により、ロールバック処理が行われる。ロールバック処理では、まず、未コミットの物理ログ(更新前ページを含んだログ)がデータベースに反映され、その後に、複数の論理ログが並列にデータベースに反映される。異なる複数の論理ログにそれぞれ異なる複数の更新スレッド301が割り当て、複数の更新スレッド301が並列に複数の論理ログをデータベースに反映する。
図22は、ロールバック処理の流れの一例を示す。
DBロールバックプログラム406は、共通ログファイル307から未コミットの物理ログを読み出し、読み出した物理ログをデータベースに反映する(S2201)。物理ログは、更新前ページ(更新前データ)を含んでいるので、データベースの内容は、トランザクション開始前の内容になる。
DBロールバックプログラム406は、データベースの回復を行う1以上のOSスレッド304に、1以上のコア211を割り当てる。DBロールバックプログラム406は、1以上の参照スレッド302及び1以上の更新スレッド301を、1以上のログファイル107を割り当てる(S2202)。異なるOSスレッド304に、異なるコア211が1:1又は1:nで割り当てられる。異なる更新スレッド301及び異なる参照スレッド302に、異なるログファイル107が1:1又は1:nで割り当てられる。具体的には、例えば、DBロールバックプログラム406を呼び出し、スレッド割当てプログラム401に、OSスレッド304の生成と、OSスレッド304について参照スレッド302及び更新スレッド301の生成と、生成したOSスレッド304のコア211への割り当てと、OSスレッド304(参照スレッド302及び更新スレッド301)のログファイル107への割り当てとを実行させる。ここで割り当てられるログファイル107は、使用中のログファイル107である。使用中のログファイル107に、反映されるべき論理ログが含まれており、未使用のログファイル107には、そのような論理ログは含まれていないからである。
DBロールバックプログラム406は、S2202でスレッドを、1以上のログファイル107について並列に実行する。これにより、その1以上のログファイル107の各々について、S2203〜S2205が行われる。1つのログファイル107を例に取ると、次の通りである。すなわち、ログファイル107に割り当てられている参照スレッド302が、その割り当てられているログファイル107から論理ログを読み出し(S2203)、その論理ログに従う更新先に対応した更新スレッド301を特定し(S2204)、特定した更新スレッド301に対応したキュー313に、その論理ログに従う更新の要求(更新先ページ及び更新内容を指定した要求)を格納する(S2205)。その更新スレッド301が、キュー313内の更新要求に従い、その更新要求から特定された更新先ページを更新する。
ロールバック処理によれば、ログファイル107及びコア211にOSスレッド304が割り当てられる。ログファイル107は、1以上のDB領域303が割り当てられていた更新スレッド301に1:1で割り当てられていたログファイル107であるため、ログファイル107に格納される論理ログが表す更新先ページ(例えばページ番号又はページの論理アドレス)は、更新スレッド301に割り当てられていた1以上のDB領域303のうちのいずれかである。従って、ロールバック処理において、OSスレッド304(参照スレッド302)にログファイル107が割り当てられれば、OSスレッド304(更新スレッド301)にDB領域303が割り当てられなくても、ロールバック処理において並列に動作する複数のOSスレッド304(更新スレッド301)が同一のDB領域303を更新するといった競合は発生しない。
本実施形態では、管理端末108のCPU201(又はホスト計算機101のCPU201)が、図23又は図24に例示する管理画面を表示できる。図23に例示する管理画面2300は、OSスレッド番号とOSスレッド304に割り当てられたログファイル名との対応関係の一覧を示す。図24に例示する管理画面2400は、OSスレッド番号とログファイル名と出力スループット(単位時間当たりの入出力データサイズ)との対応関係を示す。OSスレッド番号とログファイル名との対応関係の表示は、例えば、スレッド管理テーブル502を参照することにより特定された対応関係の表示でよい。出力スループットは、例えば、データベース管理プログラム215により監視され、管理データ216(例えばスレッド管理テーブル502)に記録された情報でよい。OSスレッド番号とログファイル名と出力スループットとの対応関係の表示も、例えば、スレッド管理テーブル502を参照することにより特定された対応関係の表示でよい。また、表示される対応関係は、図23又は図24に例示の関係に代えて又は加えて、スレッド管理テーブル502等に基づき、コア、OSスレッド、参照スレッド、更新スレッド及び共有リソース部(例えば、DBファイル、DB領域、DBページ、ログファイル、ログ領域及びログバッファのうちの少なくとも1つ)間の対応関係が表示されてよい。具体的には、例えば、データベース管理プログラム215が、コア、OSスレッド、参照スレッド、更新スレッド及び共有リソース部(例えば、DBファイル、DB領域、DBページ、ログファイル、ログ領域及びログバッファのうちの少なくとも1つ)間の対応関係を表示、又は、その対応関係を表示するための情報(例えばスレッド管理テーブル502を含んだ情報)を管理端末108等の外部装置に出力してもよい。
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
例えば、ホスト計算機101では、ハイパバイザが実行されることにより1又は複数のVM(仮想マシン)が生成され、各々のVMにおいて、データベース管理プログラム215が実行されてよい。VMが実行される実施形態では、例えば、上述の説明を次のように読み替えることができる。すなわち、例えば図1では、論理ボリューム105上に仮想ボリューム(VMのディスクイメージ)が配置され、DBファイル106は仮想ボリューム上に作成されてよい。OS218は、ホストOS(ホスト計算機101のOS)上で実行されるゲストOS(VMのOS)と読み替えられてよい。DBバッファ213、ログバッファ214、データベース管理プログラム215、管理データ216、スレッド状態217は、ゲストOS上に配置されてよい。OSスレッドは、ゲストOSスレッドと読み替えられてよい。コア211は、VMの仮想コア(VMに割り当てられたコア)と読み替えられてよい。