(57)【要約】  共有リソース更新装置が、複数のスレッドをそれぞれ実行する複数のプロセッサコアを有する少なくとも１つのプロセッサを含んだプロセッサ部と、プロセッサ部により実行されることにより競合回避制御を実行するプログラムを記憶する記憶部とを有する。複数のスレッドの共有リソースが、論理的に又は物理的に区切られた複数の共有リソース部を有している。複数のスレッドのうちの２以上の第１スレッドの各々が、割り当てられている共有リソース部を更新要求に応答して更新する更新スレッドである。複数のスレッドのうちの２以上の第２スレッドの各々が、更新要求の発行と共有リソース部の参照とを行う参照スレッドである。競合回避制御は、異なる更新スレッドに異なる共有リソース部を１：ｎ又は１：１で割り当てることを含む（ｎは２以上の整数）。
2016157492.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドをそれぞれ実行する複数のプロセッサコアを有する少なくとも１つのプロセッサを含んだプロセッサ部と、
前記プロセッサ部により実行されることにより競合回避制御を実行するプログラムを記憶する記憶部と
を有し、
前記複数のスレッドの共有リソースが、論理的に又は物理的に区切られた複数の共有リソース部を有しており、
前記複数のスレッドのうちの２以上の第１スレッドの各々が、割り当てられている共有リソース部を更新要求に応答して更新する更新スレッドであり、
前記複数のスレッドのうちの２以上の第２スレッドの各々が、更新要求の発行と共有リソース部の参照とを行う参照スレッドであり、
前記競合回避制御は、異なる更新スレッドに異なる共有リソース部を１：ｎ又は１：１で割り当てることを含む（ｎは２以上の整数）、
共有リソース更新装置。
【請求項２】
データベースのデータベースファイル（ＤＢファイル）が格納される２以上のデータベース領域（ＤＢ領域）があり、
各ＤＢ領域は、複数のデータベースページ（ＤＢページ）で構成されており、
ＤＢページ単位でデータの入出力が行われるようになっており、
前記複数の共有リソース部として、複数のデータベース領域（ＤＢ領域）と、複数のログバッファと、複数のログファイルとがあり、
異なる更新スレッドに、異なるＤＢ領域が１：１又は１：ｎで割り当てられ、
異なる更新スレッドに、異なるログバッファが１：１又は１：ｎで割り当てられ、
異なる更新スレッドに、異なるログファイルが１：１又は１：ｎで割り当てらる、
請求項１記載の共有リソース更新装置。
【請求項３】
前記プロセッサ部が、オペレーティングシステム（ＯＳ）とデータベース管理プログラムとを実行するようになっており、
前記ＯＳによって管理される複数のＯＳスレッドがあり、
前記複数のＯＳスレッドの各々が、前記データベース管理プログラムによって管理される２以上の擬似スレッドを含み、
前記２以上の擬似スレッドが、１以上の参照スレッドと１以上の更新スレッドである、
請求項１記載の共有リソース更新装置。
【請求項４】
前記複数のＯＳスレッドの各々において、更新スレッド以外の１以上の擬似スレッドの各々は、参照スレッドであり、
前記複数のＯＳスレッドが、それぞれ、前記複数のプロセッサコアに割り当てられるようになっており、
前記複数のＯＳスレッドの各々について、参照スレッド数が、そのＯＳスレッドの割当て先のプロセッサコアの性能と、１擬似スレッド当たりの性能と、更新スレッド数とに基づき算出される、
請求項３記載の共有リソース更新装置。
【請求項５】
前記複数のＯＳスレッドの各々におけるいずれの参照スレッドも、いずれのＯＳスレッドにおける更新スレッドに対して更新要求を発行可能である、
請求項３記載の共有リソース更新装置。
【請求項６】
データベースのデータベースファイル（ＤＢファイル）が格納される２以上のデータベース領域（ＤＢ領域）があり、
各ＤＢ領域は、複数のデータベースページ（ＤＢページ）で構成されており、
ＤＢページ単位でデータの入出力が行われるようになっており、
前記複数のＤＢページは、Ｂ木構造となっており、ルートページと、複数のリーフページと、前記ルートページと前記複数のリーフページ間の２以上の中間ページとで構成されており、
前記複数の共有リソース部が、互いに重複しない複数のページ集合であり、
前記複数のページ集合の各々は、１以上の中間ページと、その１以上の中間ページに属する２以上のリーフページとで構成されており、
異なる更新スレッドに、異なるページ集合が１：１又は１：ｎで割り当てられる、
請求項１記載の共有リソース更新装置。
【請求項７】
前記複数の共有リソース部が、データベースに存在し互いに重複しない複数のキー範囲であり、
異なる更新スレッドに、異なるキー範囲が１：１又は１：ｎで割り当てられる、
請求項１記載の共有リソース更新装置。
【請求項８】
前記記憶部が、データベース統計情報を記憶し、
前記データベース統計情報が、前記データベースにおけるキー毎に、そのキーに属する値の数である重複数を含み、
前記プロセッサ部が、前記データベース統計情報と検索条件とを基に、重複数合計がなるべく均等になるよう複数のキー集合を構築し、
前記複数のキー集合の各々は、１以上のキーであり、
前記複数のキー集合の各々の重複数合計は、そのキー集合を構成するキーにそれぞれ対応した重複数の合計であり、
前記複数の共有リソース部は、前記複数のキー集合であり、
異なる更新スレッドに、異なるキー集合が１：１又は１：ｎで割り当てられる、
請求項１記載の共有リソース更新装置。
【請求項９】
前記プロセッサ部が、オペレーティングシステム（ＯＳ）とデータベース管理プログラムとを実行するようになっており、
前記ＯＳによって管理される複数のＯＳスレッドがあり、
前記複数のＯＳスレッドの各々が、前記データベース管理プログラムによって管理される２以上の擬似スレッドを含み、
前記２以上の擬似スレッドが、１以上の参照スレッドと１以上の更新スレッドであり、
いずれの更新スレッドからもアクセス可能な共通ログファイルがあり、
前記共通ログファイルには、更新スレッドにより物理ログが書き込まれるようになっており、
異なる更新スレッドに１：１又は１：ｎで割り当てられた異なるログファイルの各々には、更新スレッドにより論理ログが書き込まれるようになっており、
前記プロセッサ部が、前記データベースのロールバック処理を実行し、
前記ロールバック処理が、
前記共通ログファイルから未コミットの物理ログを前記データベースに反映すること、
前記複数のＯＳスレッドの各々に、ログファイルを１：１又は１：ｎで割り当てること、
前記ＯＳスレッドを並列で実行することにより前記複数のログファイル内の複数の論理ログを並列に前記データベースに反映すること、
を含む、
請求項２記載の共有リソース更新装置。
【請求項１０】
前記プロセッサ部が、プロセッサコア、参照スレッド、更新スレッド及び共有リソース部間の対応関係を表示する、又は、その対応関係を表示するための情報を出力する、
請求項１記載の共有リソース更新装置。
【請求項１１】
前記プロセッサ部が、データベース管理プログラムを実行することによっており、
各更新スレッドが、コミット時に更新後データを前記データベースに書き込む、
請求項１記載の共有リソース更新装置。
【請求項１２】
異なる更新スレッドに、異なるＤＢ領域が１：ｎで割り当てられ、
異なる更新スレッドに、異なるログバッファが１：１で割り当てられ、
異なる更新スレッドに、異なるログファイルが１：１で割り当てらる、
請求項２記載の共有リソース更新装置。
【請求項１３】
複数のスレッドをそれぞれ実行する複数のプロセッサコアを有する少なくとも１つのプロセッサを含んだプロセッサ部により、異なる更新スレッドに異なる共有リソース部を１：ｎ又は１：１で割り当てることを含む競合回避制御を実行し（ｎは２以上の整数）、
前記複数のプロセッサコアが複数の更新スレッドを並列に実行し、
前記複数のスレッドの共有リソースが、論理的に又は物理的に区切られた複数の共有リソース部を有しており、
前記複数のスレッドのうちの２以上の第１スレッドの各々が、割り当てられている共有リソース部を更新要求に応答して更新する更新スレッドであり、
前記複数のスレッドのうちの２以上の第２スレッドの各々が、更新要求の発行と共有リソース部の参照とを行う参照スレッドである、
共有リソース更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、共有リソースの更新に関する。
【背景技術】
【０００２】
例えば、複数のプロセッサコア（以下、単に「コア」と言うこともある）により処理を並列に実行するマルチコアプロセッサシステムが知られている。マルチコアプロセッサシステムでは、複数のスレッドがデータベースのようなリソースを共有する。【０００３】
複数のスレッド間で共有リソースへのアクセス競合が発生した場合には、スレッドの優先順位に応じてスレッドを停止させたり、アクセス競合が発生しないようにスレッド順序をスケジュールしたりすることが行われている。【０００４】
例えば、特許文献１では、複数のスレッドが同一のリソースにアクセスする状態を検出した際に、各スレッドが対応するコアに割り当てられる時刻を変更することにより、アクセス競合を回避する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５３２１７４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１では、複数のスレッドのアクセス競合を回避するためにその複数のスレッドの各々の時刻が重ならないよう調整される。このため、複数のコアが搭載されているにも関わらず、複数のスレッドを並列に実行できないことがある。
【課題を解決するための手段】
【０００７】
共有リソース更新装置が、複数のスレッドをそれぞれ実行する複数のプロセッサコアを有する少なくとも１つのプロセッサを含んだプロセッサ部と、プロセッサ部により実行されることにより競合回避制御を実行するプログラムを記憶する記憶部とを有する。複数のスレッドの共有リソースが、論理的に又は物理的に区切られた複数の共有リソース部を有している。複数のスレッドのうちの２以上の第１スレッドの各々が、割り当てられている共有リソース部を更新要求に応答して更新する更新スレッドである。複数のスレッドのうちの２以上の第２スレッドの各々が、更新要求の発行と共有リソース部の参照とを行う参照スレッドである。競合回避制御は、異なる更新スレッドに異なる共有リソース部を１：ｎ又は１：１で割り当てることを含む（ｎは２以上の整数）。ここで言う「スレッド」は、後述のＯＳスレッドでもよいし疑似スレッドでもよい。
【発明の効果】
【０００８】
異なる更新スレッドに異なる共有リソース部が１：ｎ又は１：１で割り当てられるため、結果として、各共有リソース部にとって、割り当てられる更新スレッドは１つである。つまり、２以上の更新スレッドに同一の共有リソース部が割り当てられない。このため、複数の更新スレッドが並列に実行されても同一共有リソース部に対するアクセス競合が生じない。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係る共有リソース更新システムの構成例を示す。
【図２】ホスト計算機の構成例を示す。
【図３】第１の割り当てモードに従う共有リソース割り当ての一例を示す。
【図４】データベース管理プログラムの構成例を示す。
【図５】管理データの構成例を示す。
【図６】データベース（ＤＢ）ファイル管理テーブルの構成例を示す。
【図７】ＤＢ領域−ページ対応管理テーブルの構成例を示す。
【図８】スレッド管理テーブルの構成例を示す。
【図９】スレッド間データ受け渡しキューの構成例を示す。
【図１０】ログファイル管理テーブルの構成例を示す。
【図１１】スレッド割当て処理の流れの一例を示す。
【図１２】参照スレッド数算出処理の流れの一例を示す。
【図１３】更新用ＤＢ領域割当て処理の流れの一例を示す。
【図１４】参照用ＤＢ領域割当て処理の流れの一例を示す。
【図１５】擬似スレッド実行制御処理の流れの一例を示す。
【図１６】ＤＢ検索処理の流れの一例を示す。
【図１７】ＤＢ更新処理の流れの一例を示す。
【図１８】管理画面の一例を示す。
【図１９】第２の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
【図２０】第３の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
【図２１】第４の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
【図２２】ロールバック処理の流れの一例を示す。
【図２３】管理画面の一例を示す。
【図２４】管理画面の一例を示す。
【図２５】ログファイル割当て処理の流れの一例を示す。
【発明を実施するための形態】
【００１０】
以下、一実施形態を説明する。
【００１１】
以下の説明では、「ｋｋｋ管理テーブル」又は「ｋｋｋキュー」の表現にて情報を説明することがあるが、情報は、テーブル以外のデータ構成で表現されていてもよい。データ構成に依存しないことを示すために「ｋｋｋ管理テーブル」及び「ｋｋｋキュー」のうちの少なくとも１つを「ｋｋｋ情報」と呼ぶことができる。各テーブルの構成は一例であり、２以上のテーブルが１つのテーブルにまとめられたり、１つのテーブルが複数のテーブルに分割されたりしてもよい。
【００１２】
また、以下の説明では、要素の識別情報として、番号又は名前が使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。
【００１３】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号（又は参照符号における共通符号）を使用し、同種の要素を区別して説明する場合は、要素識別情報（要素に割り振られた番号又は名前等の識別情報）（又は参照符号）を使用することがある。
【００１４】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶部（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置又はシステムが行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶部を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１５】
また、以下の説明では、「ＯＳスレッド」は、ＯＳ（Operating  System）によって管理されるスレッド（例えばカーネルとライブラリによって管理されるスレッド）であり、リアルスレッドと言うこともできる。一方、「擬似スレッド」は、データベース管理プログラムによって管理されるスレッドである。
【００１６】
図１は、実施形態に係る共有リソース更新システムの構成例を示す。
【００１７】
共有リソース更新システムは、ホスト計算機１０１と、ストレージ装置１０２と、管理端末１０８とを有する。ホスト計算機１０１と、ストレージ装置１０２と、管理端末１０８とが、通信ネットワーク（例えばＳＡＮ（Storage  Area  Network）又はＬＡＮ（Local  Area  Network））１０３を介して相互に接続されている。図１では、各装置は、通信ネットワーク１０３に１台ずつ接続されているが、かかる例に限定されず、複数台接続されていてもよい。また、通信ネットワーク１０３に、業務システム等を利用するユーザが利用するクライアント端末（図示せず）が接続されていてもよい。
【００１８】
ホスト計算機１０１は、ＣＰＵ（Central  Processing  Unit）およびメモリ等の情報処理資源を備えた計算機であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ＣＰＵは、プロセッサの一例であり、演算処理装置として機能し、メモリに記憶されているプログラムや演算パラメータ等にしたがって、ホスト計算機１０１の動作を制御する。なお、ホスト計算機１０１は、共有リソース更新装置の一例である。ホスト計算機１０１は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の入力デバイスと、表示デバイス（例えばモニタディスプレイ）やスピーカ等の出力デバイスとを有してよい。
【００１９】
また、ホスト計算機１０１は、複数のＣＰＵ（プロセッサ部の一例）内に複数のＣＰＵコア（コア）を収めて、並列処理によって性能を向上させるマルチコアプロセッサシステムを利用している。マルチコアプロセッサシステムは、ＣＰＵに搭載された複数のコア間でリソースを共有し、複数のスレッドを並列に処理する。
【００２０】
また、ホスト計算機１０１は、Ｉ／Ｆ１１１を介して通信ネットワーク１０３と接続される。Ｉ／Ｆ１１１は、インターフェースデバイスであり、通信ネットワーク１０３を介して、ホスト計算機１０１と外部装置とのデータ入出力を制御し、例えば、ＨＢＡ（Host  Bus  Adapter）やＬＡＮアダプタなどである。
【００２１】
ストレージ装置１０２は、複数（又は１つ）の物理ディスク１０４と、物理ディスク１０４に対するＩ／Ｏ（Input/Output）を制御するストレージコントローラ１１４とを有する。ストレージコントローラ１１４は、ホスト計算機１０１からのコマンドを解釈し、ストレージ装置１０２の記憶領域内へのライト又はリード（Ｉ／Ｏ）を実行する。ストレージ装置１０２が提供する記憶領域は、複数（又は１つ）の物理ディスク１０４から構成される。物理ディスク１０４は、物理的な不揮発性記憶デバイスの一例であり、例えば、ＨＤＤ（Hard  Disk  Drive）又はＳＳＤ（Solid  State  Drive）である。
【００２２】
ストレージ装置１０２は、複数の物理ディスク１０４から構成される記憶領域上に複数（又は１つ）の論理ボリューム１０５を定義する。論理ボリューム１０５は、複数の物理ディスク１０４から構成される論理ボリューム１０５に代えて、Thin  Provisioningに仮想的な論理ボリューム１０５でもよい。論理ボリューム１０５には、データベースファイル（以下、ＤＢファイル）１０６及びログファイル１０７等が格納される。
【００２３】
また、ストレージ装置１０２は、Ｉ／Ｆ１１３を介して通信ネットワーク１０３と接続される。Ｉ／Ｆ１１３は、インターフェースデバイスであり、通信ネットワーク１０３を介して、ストレージ装置１０２と外部装置とのデータ入出力を制御し、例えば、ＨＢＡやＬＡＮアダプタなどである。
【００２４】
管理端末１０８は、ＣＰＵおよびメモリ等の情報処理資源を備えた計算機であって、オペレータ等の入力に応じてホスト計算機１０１やストレージ装置１０２を管理する計算機である。管理端末１０８は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の入力デバイスと、表示デバイス（例えばモニタディスプレイ）やスピーカ等の出力デバイスとを有する。
【００２５】
また、管理端末１０８は、Ｉ／Ｆ１１２を介して通信ネットワーク１０３と接続される。Ｉ／Ｆ１１２は、インターフェースデバイスであり、通信ネットワーク１０３を介して、管理端末１０８と外部装置とのデータ入出力を制御し、例えば、ＬＡＮアダプタなどである。
【００２６】
複数（又は１つ）の論理ボリューム１０５に、データベースが格納されており、データベースが、複数のＤＢファイル１０６を含む。データベースは、例えば、１以上の表（以下、ＤＢ表）を含み、更に、例えば、１以上の索引を含んでよい。ＤＢ表は、１以上のレコードの集合であり、レコードは１以上のカラムから構成される。索引は、ＤＢ表の１以上のカラム等を対象として作成されるデータ構造であり、当該索引が対象とするカラム等を含む選択条件によるＤＢ表へのアクセスを高速化するためのものである。例えば、ＤＢ表は、対象とするカラムの値の毎に、ＤＢ表の中で当該値を含むレコードを特定するための情報を保持するデータ構造である。データ構造としては、例えばＢ木等が用いられる。レコードを特定するための情報としては、物理アドレスや論理的な行ＩＤ等が用いられることがある。
【００２７】
図２は、ホスト計算機１０１の構成例を示す。
【００２８】
ホスト計算機１０１は、複数のＣＰＵ２０１（例えばＣＰＵ  Ｐ１、Ｐ２、Ｐ３及びＰ４）と、複数のメモリ２０２（例えばメモリＭ１、Ｍ２、Ｍ３及びＭ４）とを備える。複数のＣＰＵ２０１に、それぞれ、複数のメモリ２０２が対応付けられている。ＣＰＵ２０１もメモリ２０２もそれぞれ１つでもよい。１以上のメモリ２０２は、記憶部の一例である。
【００２９】
ＣＰＵ２０１は、対応するメモリ２０２とバス等で接続される。ＣＰＵ２０１は、対応するメモリ２０２に記憶されている各種プログラムを実行して、適宜、変化するパラメータを、メモリ２０２に格納したり、ストレージ装置１０２に記憶する各種データを一時的にメモリ２０２に格納したりする。
【００３０】
各ＣＰＵ２０１には、複数のコア２１１が搭載されている。各ＣＰＵ２０１は、複数のコア２１１を並列に起動させて、複数のスレッドを並列に処理させる。ＣＰＵ  Ｐ１〜Ｐ４の各々は、Ｉ／Ｆ−Ａ１〜Ａ４のいずれかを介して、通信ネットワーク１０３に接続されているストレージ装置１０２とデータの送受信を行う。
【００３１】
メモリＭ１には、ＤＢバッファ２１３、ログバッファ２１４、データベース管理プログラム２１５、管理データ２１６、スレッド状態２１７及びＯＳ（Operating  System）２１８などが格納される。なお、メモリＭ２〜Ｍ４の各々も、メモリＭ１と同様の構成のため、以下、メモリＭ１を例に取る。
【００３２】
ＤＢバッファ２１３は、ストレージ装置１０２内のＤＢファイル１０６に書き込まれるデータが一時的に格納される領域である。ログバッファ２１４は、ストレージ装置１０２内のログファイル１０７に書き込まれるデータが一時的に格納される領域である。
【００３３】
データベース管理プログラム２１５は、いわゆるデータベース管理システム（ＤＢＭＳ）であり、データベース（ＤＢファイル１０６）に対する検索処理や更新処理を制御するプログラムである。データベース管理プログラム２１５については、後述する。
【００３４】
管理データ２１６は、データベース管理プログラム２１５がデータベース領域（ＤＢ領域）、ログ領域及びスレッドなどを管理するための情報である。管理データ２１６については、後述する。なお、ＤＢ領域は、１以上のＤＢファイル１０６のうちの少なくとも一部でよく、１以上のページ（論理領域）の集合である。ログ領域は、１以上のログファイル１０７のうちの少なくとも一部でよい。本実施形態では、ＤＢ領域に対してはページ単位でデータが入出力される。以下、ＤＢ領域の構成要素としてのページを「ＤＢページ」と言うことがある。
【００３５】
スレッド状態２１７には、各コア２１１によって実行されているスレッドの状態を表す情報である。
【００３６】
図３は、第１の割り当てモードに従う共有リソース割り当ての一例を示す。図３に示す例は、メモリＭ１内のスレッド状態１２ａ及び管理データ１１ａに基づいている。
【００３７】
ＤＢファイル６ａ及び６ｂの各々が、複数のＤＢ領域３０３で構成されている。各ＤＢ領域３０３が、複数のＤＢページで構成されている。図示しないが、各ログファイル１０７は、複数のログ領域で構成されてよい。しかし、各ログ領域は、複数のページに論理的に分割されていなくてよい。一般に、ログは、可変長（シーケンシャルＩ／Ｏが主体）であるため、ページと言う単位で入出力することの意義が少なくともデータベースに比べて低いからである。複数のログファイル１０７に加えて、共通ログファイル３０７である。共通ログファイル３０７には、物理ログが格納される。ログファイル１０７の各々には、論理ログが格納される。物理ログは、データベースに格納される実際のデータを含んだログであり、例えば、更新対象のページ番号（例えばアドレス）及び更新前ページ（更新前イメージ）を含む。論理ログは、データベース管理プログラム２１５に対する操作を表す情報を含んだログであり、例えば、操作種別（例えば挿入や参照等）と、データＩＤと、キー値とを含む。本実施形態では、コミット時にＤＢページへコミット時のＤＢデータが書き込まれるので更新後の情報を物理ログにも論理ログにも含める必要が無い。しかし、必ずしもそうである必要は無く、物理ログ及び論理ログのいずれも、更新後の情報を含んでいてもよい。例えば、物理ログは、更新後ページ（更新後イメージ）を含んでもよい。
【００３８】
ＣＰＵ  Ｐ１が、４つのコアＣ１１〜Ｃ１４を有しているとする。１つのコア２１１で、１つのＯＳスレッド３０４を実行できる。このため、４つのコアＣ１１〜Ｃ１４により４つのＯＳスレッドＴ１１ａ、Ｔ１１ｂ、Ｔ１１ｃ及びＴ１１ｄを並列に実行できる。
【００３９】
各ＯＳスレッド３０４は、データベース管理プログラム２１５によって疑似的に細分化されることで、複数の疑似スレッドを含む。複数の疑似スレッドは、複数（又は１つ）の参照用疑似スレッド（以下、参照スレッド）３０２と、１つ（又は複数）の更新用疑似スレッド（以下、更新スレッド）３０１とを含む。参照スレッド３０２と更新スレッド３０１間の要求の受け渡しは、キュー３１３を介して行われる。１つの更新スレッド３０１につき複数（又は１つ）のキュー３１３が用意されている。１つの更新スレッド３０１につき用意されるキュー３１３の数は、その更新スレッド３０１を含んだＯＳスレッド３０４内の参照スレッド３０２と同じ数でよい。参照スレッド３０２は、更新要求の発行と共有リソース部の参照とを行う疑似スレッドである。参照スレッド３０２は、例えば、更新対象の共有リソース部に対応した更新スレッド３０１（又はその更新スレッド３０１に対応したキュー３１３）をデータベース管理プログラム２１５に問い合わせ、その回答を基に特定されたキュー３１３に、更新要求を発行する。参照スレッド３０２は、例えば、検索用疑似スレッド（検索スレッド）でよい。更新スレッド３０１は、割り当てられている共有リソース部を更新要求に応答して更新する。更新スレッド３０１は、例えば、その更新スレッド３０１に対応したキュー３１３から取り出された更新要求を処理する。
【００４０】
複数のＯＳスレッド３０４の共有リソースが、論理的に又は物理的に区切られた複数の共有リソース部を有している。共有リソースは、例えば、ＤＢ領域群（複数のＤＢ領域）、ログバッファ群（複数のログバッファ２１４）及びログファイル群（複数のログファイル１０７）のうちの少なくともＤＢ領域群である。
【００４１】
データベース管理プログラム２１５により、更新スレッド３０１に共有リソース部が１：ｎ又は１：１で割り当てられる（ｎは２以上の整数）。更新スレッド３０１は、割り当てられている共有リソース部にはアクセスできるが、割り当てられていない共有リソース部にはアクセスできない。具体的には、更新スレッド３０１にＤＢ領域３０３が１：ｎで割り当てられる。すなわち、各更新スレッド３０１には、ｎ個の複数のＤＢ領域３０３を割り当てることができるが、各ＤＢ領域３０３には、ｎ個の更新スレッド３０１を割り当てることができない。これにより、複数の更新スレッド３０１からＤＢ領域３０３への更新が競合することを回避できる。また、各更新スレッド３０１に、ログバッファ２１４及びログファイル１０７がそれぞれ１：１（又は１：ｎ）で割り当てられる。すなわち、各更新スレッド３０１には、１つのログバッファ２１４及び１つのログファイル１０７を割り当てることができ、各ログバッファ２１４及び各ログファイル１０７には、それぞれ、複数の更新スレッド３０１を割り当てることができない。これにより、複数の更新スレッド３０１を並列に実行しても、複数の更新スレッド３０１からログバッファ２１４及びログファイル１０７への更新が競合することを回避できる。なお、共通ログファイル３０７及び共通ログバッファ３１４は、全ての更新スレッド３０１に割り当てられる。つまり、いずれの更新スレッド３０１も、共通ログファイル３０７及び共通ログバッファ３１４を更新できる。
【００４２】
参照スレッド３０２及び更新スレッド３０１の実行は、例えば次の通りである。ＯＳスレッドＴ１１ａが実行されたとする。この場合、複数の参照スレッドＵ１１ａ１、…と、１つの更新スレッドＵ１１ａ４が実行される。具体的には、例えば、ＯＳ  Ｏ１（図２参照）からコアＣ１１に対して、ＤＢファイル１０６又はログファイル１０７の或る領域の更新が指示されたとする。この場合、複数の参照スレッドＵ１１ａ１、…のいずれかが、更新対象ページを検索し、見つかったページを含んだＤＢ領域に割り当てられている更新スレッド３０１（又はその更新スレッド３０１に対応したキュー３１３）をデータベース管理プログラム１０ａ（図２参照）に問い合わせ、その回答を基に特定されたキュー３１３に、更新要求を発行する。ここでは、更新スレッドＵ１１ｂ４が見つかり、キューＱ２２に更新要求が格納されたとする。更新スレッドＵ１１ｂ４は、キューＱ２２から取り出された更新要求に応答して、その更新要求から特定された更新対象ページを更新する。その際、更新スレッド３０１は、物理ログ（例えば、更新対象ページの番号、更新対象の更新前ページ）を共通ログバッファＢ１４ｅに書き込み、共通ログバッファＢ１４ｅから共通ログファイル７ｅへその物理ログを書き込む。また、更新スレッドＵ１１ｂ４は、その更新に対応した論理ログを、その更新スレッドＵ１１ｂ４に割り当てられているログバッファＢ１４ｄに書き込み、ログバッファＢ１４ｄから、その論理ログを、更新スレッドＵ１１ｂ４に割り当てられているログファイル７ｂに書き込む。なお、共通ログバッファ３１４及び共通ログファイル３０７のうちの少なくとも１つについては、排他制御が行われてもよい。例えば、更新スレッドＵ１１ｂ４は、共通ログバッファＢ１４ｅへの物理ログの書き込みの際、共通ログバッファＢ１４ｅのロックを取得し、物理ログの書き込み終了後、ロックを解放してもよい。
【００４３】
本実施形態では、データベースに関し、更新スレッド３０１に対する割当ての単位は、ＤＢファイル単位に比べて、ＤＢ領域単位が好ましい。なぜなら、ＤＢファイルのような比較的サイズの大きい範囲が割当て単位であると、その範囲に複数の更新対象が含まれている可能性が高くなり、結果として、複数の更新を並列に実行できない可能性が高くなるからである。また、ＣＰＵコア２１１の数よりもＤＢファイル１０６の数の方が少ないこともあり得るが、その場合には、更新スレッド３０１が割り当てられない余りのＣＰＵコア２１１が生じてしまうためである。
【００４４】
また、本実施形態では、データベースに関し、更新スレッド３０１に対する割当て単位は、ＤＢページ単位に比べて、ＤＢ領域単位が好ましい。なぜなら、ＤＢページのような比較的サイズの小さい範囲が割当て単位であると、その範囲に空きがなくなって再割り当てが発生することの頻度が比較的高くなるからである。
【００４５】
また、本実施形態では、ログ（特に論理ログ）に関し、更新スレッド３０１に対する割当て単位は、ログ領域単位に比べて、ログファイル単位が好ましい。なぜなら、ログファイル単位が、ログに関して最も大きな割当て単位であるため、再割り当ての頻度を最も少なくでき、且つ、一般に、ログの更新はシーケンシャルライトが主体であるため、離散した複数の更新対象が同一ログファイル１０７に存在する可能性も少ないためである。
【００４６】
更新スレッド３０１に対する割当て単位は、上述の通り、ＤＢ領域単位及びログファイル単位が好ましいが、それに限定する必要は無い。ＤＢページ単位又はＤＢファイル単位の割当てが行われてもよいし、ログ領域単位の割当てが行われてもよい。
【００４７】
次に、データベース管理プログラム２１５及び管理データ２１６の詳細を説明する。
【００４８】
図４は、データベース管理プログラム２１５の構成例を示す。
【００４９】
データベース管理プログラム２１５は、スレッド割当てプログラム４０１、リソース割り当てプログラム４０２、疑似スレッド実行制御プログラム４０３、ＤＢ検索プログラム４０４、ＤＢ更新プログラム４０５及びＤＢロールバックプログラム４０６を含む。
【００５０】
スレッド割当てプログラム４０１は、ＳＱＬ（Structured  Query  Language）等のクエリ実行定義を基に、複数のＣＰＵ２０１（コア２１１）にＯＳスレッド３０４を割り当てて、さらに、各ＯＳスレッド３０４内に複数の疑似スレッドを生成するプログラムである。コア２１１、ＯＳスレッド３０４及び疑似スレッドの対応付けは、後述するスレッド管理テーブル５０２で管理される。
【００５１】
リソース割当てプログラム４０２は、生成された更新スレッド３０１にＤＢ領域３０３等の共有リソース部を割り当てるプログラムである。疑似スレッドと共有リソース部との対応付けも、スレッド管理テーブル５０２で管理される。
【００５２】
疑似スレッド実行制御プログラム４０３は、参照スレッド３０２と更新スレッド３０１間におけるデータの受け渡しキューを基に、いずれの更新スレッド３０１を実行させるかを制御するプログラムである。
【００５３】
ＤＢ検索プログラム４０４は、複数の参照スレッド３０２のいずれかの参照スレッド３０２を実行させて、各参照スレッド３０２に割り当て済みのＤＢ領域３０３から検索対象のレコードを取得するプログラムである。
【００５４】
ＤＢ更新プログラム４０５は、参照スレッド３０２から提供される情報を基に、更新スレッド３０１を実行させて、データベースの割り当て済みの領域を更新するプログラムである。
【００５５】
ＤＢロールバックプログラム４０６は、ロールバックを制御するプログラムである。
【００５６】
図５は、管理データ２１６の構成例を示す。
【００５７】
管理データ２１６は、ＤＢファイル管理テーブル５０１、スレッド管理テーブル５０２、スレッド間データ受け渡しキュー５０３、ＤＢ統計情報５０４、ＤＢ領域−ページ対応管理テーブル５０５及びログファイル管理テーブル５０６を含む。ＤＢ統計情報５０４は、例えば、索引の構成を表す情報、索引のエントリ数をＤＢ表す情報、ＤＢ表のレコード数を表す情報、カラム毎の値の最大値、平均値、最小値、カラム毎の値分布等、データベースが含むデータに関する情報を含んでよい。
【００５８】
図６は、ＤＢファイル管理テーブル５０１の構成例を示す。
【００５９】
ＤＢファイル管理テーブル５０１は、ＤＢファイル１０６に関する情報を保持する。例えば、ＤＢファイル管理テーブル５０１は、ＤＢファイル１０６毎にエントリを有する。各エントリが、ＤＢファイル名６０１、最大使用ページ番号６０２及び最大ページ番号６０３を記憶する。
【００６０】
ＤＢファイル名６０１は、ＤＢファイル１０６の名前を示す。最大使用ページ番号６０２は、ＤＢファイル１０６のデータが実際に格納されているページにそれぞれ対応したページ番号のうちの最大のページ番号を示す。最大ページ番号６０３は、ＤＢファイル１０６の格納先となり得る複数のページにそれぞれ対応した複数のページ番号のうちの最大のページ番号を示す。
【００６１】
図６の例によれば、ＤＢファイル６ａが、最大３０００個のページを占める大きさであり、そのうち１２０番目のページにまでＤＢファイル６ａのデータが格納されている。
【００６２】
図７は、ＤＢ領域−ページ対応管理テーブル５０５の構成例を示す。
【００６３】
ＤＢ領域−ページ対応管理テーブル５０５は、ＤＢファイル１０６、ＤＢ領域３０３及びＤＢページの対応関係を表す。例えば、ＤＢ領域−ページ対応管理テーブル５０５は、ＤＢ領域３０３毎にエントリを有する。各エントリが、ＤＢファイル名７０１、ＤＢ領域番号７０２、開始ページ番号７０３及び終了ページ番号７０４を記憶する。
【００６４】
ＤＢファイル名７０１は、ＤＢ領域３０３に格納されるＤＢファイル１０６の名前を示す。ＤＢ領域番号７０２は、ＤＢ領域３０３の番号を示す。開始ページ番号７０３は、ＤＢ領域３０３を構成する連続した複数のページのうちの先頭のページの番号を示す。終了ページ番号７０４は、ＤＢ領域３０３を構成する連続した複数のページのうちの末端のページの番号を示す。
【００６５】
図７の例によれば、ＤＢファイル６ａが、ＤＢ領域Ａａ１、Ａａ２、…に格納されている。各ＤＢ領域３０３は、１０００個のページで構成されている。ＤＢ領域Ａａ１が、ページ１〜ページ１０００で構成されており、ＤＢ領域Ａａ２が、ページ１００１〜ページ２０００で構成されている。
【００６６】
図８は、スレッド管理テーブル５０２の構成例を示す。
【００６７】
スレッド管理テーブル５０２は、疑似スレッドと、ＯＳスレッド３０４、ＣＰＵ２０１コア２１１、種別及び共有リソース部（ログバッファ２１４、ログファイル１０７、ＤＢファイル１０６及びＤＢ領域３０３）との対応関係を表す。例えば、スレッド管理テーブル５０２は、疑似スレッド毎にエントリを有する。各エントリが、コア番号８０１、ＯＳスレッド番号８０２、疑似スレッド番号８０３、種別８０４、ログバッファ名８０５、ログファイル名８０６、ＤＢファイル名８０７及びＤＢ領域番号８０８を記憶する。
【００６８】
コア番号８０１は、疑似スレッドを実行するコア２１１の番号を示す。ＯＳスレッド番号８０２は、疑似スレッドを含んだＯＳスレッド３０４の番号を示す。疑似スレッド番号８０３は、疑似スレッドの番号を示す。種別８０４は、疑似スレッドの種別８０４（例えば、「参照」又は「更新」）を示す。ログバッファ名８０５は、疑似スレッドに割り当てられているログバッファ２１４の名前を示す。ログファイル名８０６は、疑似スレッドに割り当てられているログファイル１０７の名前を示す。ＤＢファイル名８０７は、疑似スレッドに割り当てられているＤＢ領域に格納されているＤＢファイル１０６の名前を示す。ＤＢ領域番号８０８は、疑似スレッドに割り当てられているＤＢ領域３０３の番号を示す。
【００６９】
図８の例によれば、ＯＳスレッドＴ１１ａは、３つの参照スレッドＵ１１ａ１〜Ｕ１１ａ３と、１つの更新スレッドＵ１１ａ４とを含む。ＯＳスレッドＴ１１ａ（参照スレッドＵ１１ａ１〜Ｕ１１ａ３、及び、更新スレッドＵ１１ａ４）は、コアＣ１１で実行される。３つの参照スレッドＵ１１ａ１〜Ｕ１１ａ３に、それぞれ、３つのＤＢ領域Ａａ１〜Ａａ３が割り当てられている。このため、参照スレッドＵ１１ａ１は、ＤＢ領域Ａａ１を参照し、他のＤＢ領域３０３を参照しない。更新スレッドＵ１１ａ４に、ＯＳスレッドＴ１１ａ（参照スレッドＵ１１ａ１〜Ｕ１１ａ３）が参照する３つのＤＢ領域Ａａ１〜Ａａ３が割り当てられている。更新スレッドＵ１１ａ４は、ＤＢ領域Ａａ１〜Ａａ３のいずれも更新し得るが、ＤＢ領域Ａａ１〜Ａａ３以外のＤＢ領域３０３を更新しない。また、更新スレッドＵ１１ａ４（ＯＳスレッドＴ１１ａ）に、ログバッファＢ１４ａとログファイル７ａが割り当てられている。更新スレッドＵ１１ａ４は、ログバッファＢ１４ａとログファイル７ａを更新し得るが、ログバッファＢ１４ａ以外のログバッファ２１４、及び、ログファイル７ａ以外のログファイル１０７を更新しない。
【００７０】
図８の例によれば、同一ＯＳスレッド３０４について、更新スレッド３０１に割り当てられている１以上のＤＢ領域３０３と、１以上の参照スレッド３０２にそれぞれ割り当てられている１以上のＤＢ領域３０３とが同じである。しかし、必ずしもそうである必要は無く、同一スレッドについて、更新スレッド３０１に割り当てられた１以上のＤＢ領域３０３と、１以上の参照スレッド３０２にそれぞれ割り当てられた１以上のＤＢ領域３０３とが部分的に又は完全に異なっていてもよい。
【００７１】
図９は、スレッド間データ受け渡しキュー５０３の構成例を示す。
【００７２】
スレッド間データ受け渡しキュー５０３は、疑似スレッド間で受け渡しされるデータ（更新要求）が格納されるキューである。スレッド間データ受け渡しキュー５０３は、受け渡し対象のデータ毎にエントリを有する。各エントリが、Ｆｒｏｍスレッド番号９０１、Ｔｏスレッド番号９０２及びレコード値９０３を記憶する。
【００７３】
Ｆｒｏｍスレッド番号９０１は、提供元の疑似スレッドの番号を示す。Ｔｏスレッド番号９０２は、提供先の疑似スレッドの番号を示す。レコード値９０３は、受け渡し対象のデータ（例えば更新要求）に含まれる値を示す。例えば、レコード値９０３は、更新要求で指定された更新先を表す情報（例えば更新先のアドレス又はページ番号）と、更新後データ（例えばページに書き込まれるデータ）とを含んでよい。
【００７４】
図９の例によれば、参照スレッドＵ１１ａ１から更新スレッドＵ１１ａ４へ提供されたレコード値ｘｘｘｘが蓄積されている。なお、図９に例示の構成は、論理的な構成であって、スレッド間データ受け渡しキュー５０３は、論理的には、更新スレッド３０１毎（ＯＳスレッド３０４毎）に独立した複数のキュー３１３（図３参照）でよい。
【００７５】
図１０は、ログファイル管理テーブル５０６の構成例を示す。
【００７６】
ログファイル管理テーブル５０６は、ログファイル１０７に関する情報を保持する。例えば、ログファイル管理テーブル５０６は、ログファイル１０７毎にエントリを有する。各エントリが、ログファイル名１００１及び状態１００２を記憶する。
【００７７】
ログファイル名１００１は、ログファイル１０７の名前を示す。状態１００２は、ログファイル１０７の状態（例えば「使用中」又は「未使用」）を示す。
【００７８】
図１０の例によれば、ログファイル７ａの状態が「使用中」（例えばいずれかの更新スレッド３０１に既に割り当てられている状態）であり、ログファイル７ｃの状態が「未使用」（例えばいずれの更新スレッド３０１にも割り当てられていない状態）である。
【００７９】
以下、本実施形態で行われる処理を説明する。
【００８０】
図１１は、スレッド割当て処理の流れの一例を示す。
【００８１】
スレッド割当てプログラム４０１は、クエリ実行定義を受け取る（Ｓ１１０１）。クエリ実行定義は、生成される参照スレッド３０２の数がＳＱＬなどにより定義されたクエリでよい。参照スレッド３０２数は、予めユーザ入力により設定されてクエリに指定されてよい。クエリ実行定義で指定される参照スレッド３０２数は、例えば、参照スレッド３０２の最大数又は最小数でもよい。
【００８２】
スレッド割当てプログラム４０１は、ホスト計算機１０１のＯＳ２１８から得られたシステム情報（例えばホスト計算機１０１のハードウェア構成に関する情報を含んだ情報）から、ホスト計算機１０１のコア２１１の数を取得する（Ｓ１１０２）。
【００８３】
取得されたコア２１１数分、Ｓ１１０３〜Ｓ１１０９が行われる。以下、１つのコア２１１（１つのＳ１１０３〜Ｓ１１０９に対応したコア２１１）を例に取り、そのコア２１１を、図１１〜図１４の説明において、便宜上、「対象コア２１１」と言う。
【００８４】
スレッド割当てプログラム４０１は、ＯＳスレッド３０４（リアルスレッド）を生成し（Ｓ１１０３）、生成したＯＳスレッド３０４を、対象コア２１１に割り当てる（Ｓ１１０４）。生成されたＯＳスレッド３０４がいずれのコア２１１に割り当てられるかは、ホスト計算機１０１のＯＳ２１８により決定されてよい。
【００８５】
スレッド割当てプログラム４０１は、参照スレッド数算出処理（図１２）を行う（Ｓ１１０５）。これにより、対象コア２１１について（対象コア２１１により実行されるＯＳスレッド３０４について）、生成される参照スレッド３０２の数が算出される。
【００８６】
スレッド割当てプログラム４０１は、対象コア２１１について（Ｓ１１０３で生成されたＯＳスレッド３０４について）、更新スレッド３０１を生成する（Ｓ１１０６）。スレッド割当てプログラム４０１は、更新用ＤＢ領域割当て処理（図１３）と、ログファイル割当て処理（図２５）とを行う（Ｓ１１０７）。これにより、Ｓ１１０６で生成した更新スレッド３０１にＤＢ領域３０３及びログファイル１０７が割り当てられる。
【００８７】
Ｓ１１０５で算出された参照スレッド数分、Ｓ１１０８及びＳ１１０９が行われる。すなわち、スレッド割当てプログラム４０１は、対象コア２１１について参照スレッド３０２を生成する（Ｓ１１０８）。そして、スレッド割当てプログラム４０１は、参照用ＤＢ領域割当て処理を行う（Ｓ１１０９）。これにより、Ｓ１１０８で生成した参照スレッド３０２にＤＢ領域３０３が割り当てられる。
【００８８】
最後に、スレッド割当てプログラム４０１は、図１１の一連の処理において生成されたＯＳスレッド３０４の各々の実行を開始する（Ｓ１１１０）。具体的には、例えば、スレッド割当てプログラム４０１は、ホスト計算機１０１のＯＳ２１８に、ＯＳスレッド３０４を生成したことを通知することにより、そのＯＳ２１８にＯＳスレッド３０４の実行を開始させる。
【００８９】
図１２は、参照スレッド数算出処理の流れの一例を示す。
【００９０】
スレッド割当てプログラム４０１は、ホスト計算機１０１のＯＳ２１８から、コア２１１の入出力帯域を表す情報を取得する（Ｓ１２０１）。ここで取得される情報は、ホスト計算機１０１の各コア２１１についての情報であってもよいし、Ｓ１１０４でＯＳスレッド３０４が割り当てられたコア２１１についての情報であってもよい。
【００９１】
スレッド割当てプログラム４０１は、ホスト計算機１０１のＯＳ２１８から、コア２１１の入出力平均応答時間を表す情報を取得する（Ｓ１２０２）。ここで取得される情報も、ホスト計算機１０１の各コア２１１についての情報であってもよいし、Ｓ１１０４でＯＳスレッド３０４が割り当てられたコア２１１についての情報であってもよい。入出力の「応答時間」とは、コア２１１がＤＢ領域３０３（又はログ領域）に対するＩ／Ｏ要求を発行してからそのＩ／Ｏ要求に対する応答を受けるまでの時間である。入出力平均応答時間に代えて、所定期間における応答時間の最大値又は最小値等でもよい。
【００９２】
スレッド割当てプログラム４０１は、ホスト計算機１０１のＯＳ２１８から、コア２１１の平均入出力長を表す情報を取得する（Ｓ１２０３）。ここで取得される情報も、ホスト計算機１０１の各コア２１１についての情報であってもよいし、Ｓ１１０４でＯＳスレッド３０４が割り当てられたコア２１１についての情報であってもよい。「入出力長」とは、１つの要求に応答して入出力されるデータの長さ（サイズ）である。平均入出力長に代えて、所定期間における入出力長の最大値又は最小値等でもよい。
【００９３】
そして、スレッド割当てプログラム４０１は、１コア当りの参照スレッド数を算出する（Ｓ１２０４）。具体的には、例えば、スレッド割当てプログラム４０１は、以下の式（１）により、１コア当りの参照スレッド数を算出する。
参照スレッド数＝コア入出力帯域（Hz）／（入出力平均応答時間（h）×平均入出力長（byte））−１・・・（１）
【００９４】
式（１）は、コア２１１が過負荷にならない程度にそのコア２１１の性能を十分に使用すると考えられる参照スレッド数の計算式の一例である。この例によれば、１つのコア２１１に対して１つのＯＳスレッド３０４が割り当てられた場合の、１コア当りの参照スレッド数が算出される。式（１）によれば、ＯＳスレッド３０４内の複数の疑似スレッドのうちの１つが更新スレッド３０１とされている（式（１）中の「−１」）。
【００９５】
なお、例えば、１つのコア２１１に対してｎ個のＯＳスレッド３０４が割り当てられる場合、式（２）により、１ＯＳスレッド当たりの参照スレッド数が算出されてよい。
参照スレッド数＝｛コア入出力帯域（Hz）／（入出力平均応答時間（h）×平均入出力長（byte））−ｎ｝／ｎ・・・（２）
【００９６】
また、１つのコア２１１（ＯＳスレッド３０４）についての参照スレッド数は、概略的に言えば、コア２１１の性能（例えばコア入出力帯域）と、１擬似スレッド当たりの性能と、更新スレッド数とに基づき得ることが可能である。
【００９７】
また、入出力平均応答時間及び平均入出力長は、監視により定期的又は不定期的に更新されてよい。このため、参照スレッド数は、参照スレッド数算出処理の実行タイミングによって異なることもある。故に、参照スレッド数は、複数のＯＳスレッド３０４において均一であることもあれば、複数のＯＳスレッド３０４において異なっていることもある。なお、更新スレッド数のみならず参照スレッド数も固定でもよい。例えば、ＯＳスレッド３０４が有する疑似スレッドの内訳は、必ず、ｎ個の更新スレッド３０１（ｎは１以上の整数で固定値（例えばｎ＝１））とｍ個の参照スレッド３０２（ｍは１以上の整数で固定値）であってもよい。
【００９８】
図１３は、更新用ＤＢ領域割当て処理の流れの一例を示す。
【００９９】
スレッド割当てプログラム４０１は、リソース割当てプログラムを呼び出すことで、更新用ＤＢ領域割当て処理を行う。言い換えれば、更新用ＤＢ領域割当て処理は、リソース割当てプログラムにより行われる。
【０１００】
リソース割当てプログラムは、スレッド管理テーブル５０２を参照し、更新スレッド３０１に割り当てられているＤＢ領域番号８０８のうち最大のＤＢ領域番号８０８を取得する（Ｓ１３０１）。
【０１０１】
リソース割当てプログラムは、Ｓ１３０１で取得されたＤＢ領域番号８０８が表すＤＢ領域３０３の次のＤＢ領域３０３を含む連続したＮ個（Ｎは１以上の整数）のＤＢ領域３０３を、更新スレッド３０１の割当て対象として決定する（Ｓ１３０２）。但し、リソース割当てプログラムは、スレッド管理テーブル５０２、ＤＢファイル管理テーブル５０１及びＤＢ領域−ページ対応管理テーブル５０５のうちの少なくとも１つを参照し、Ｎ個のＤＢ領域３０３の各々について、以下を行なってよい。すなわち、リソース割当てプログラムは、Ｓ１３０１で取得されたＤＢ領域番号８０８に対応したＤＢファイル１０６の最大使用ページ番号６０２に、ＤＢ領域３０３を構成するページ数を加算し、加算後のページ番号が、そのＤＢファイル１０６の最大ページ番号６０３を超えるか否かを判断する。その判断の結果が否定の場合、リソース割当てプログラムは、そのＤＢ領域３０３を１つの割当て対象として決定する。その判断の結果が肯定の場合、リソース割当てプログラムは、そのＤＢ領域３０３を非割当て対象とする（この場合、リソース割当てプログラムは、他のＤＢファイル１０６のＤＢ領域３０３を割当て対象としてもよい）。
【０１０２】
リソース割当てプログラムは、Ｓ１３０２の結果に従い、スレッド管理テーブル５０２及びＤＢファイル管理テーブル５０１のうちの少なくとも１つを更新する（Ｓ１３０３）。例えば、リソース割当てプログラムは、更新スレッド３０１について、その更新スレッド３０１を実行するコア２１１の番号、その更新スレッド３０１を含むＯＳスレッド３０４の番号、その更新スレッド３０１の番号、種別「更新」、その更新スレッド３０１に割り当てられたＤＢ領域３０３の番号、及び、その更新スレッド３０１に割り当てられたＤＢ領域３０３を含んだＤＢファイル１０６の名前を、スレッド管理テーブル５０２のエントリに登録する。
【０１０３】
図２５は、ログファイル割当て処理の流れの一例を示す。
【０１０４】
リソース割当てプログラム４０２は、空きのログバッファ２１４を確保し、且つ、ログファイル管理テーブル５０６から状態１００２が「未使用」のログファイル１０７を選択する（Ｓ２５０１）。
【０１０５】
ログバッファ２１４の確保及びログファイル１０７の選択に成功した場合（Ｓ２５０２：Ｙ）、リソース割当てプログラム４０２は、選択したログファイル１０７に対応する状態１００２を「使用中」に更新し、確保したログバッファ２１４及び選択したログファイル１０７を、Ｓ１００６で生成された更新スレッド３０１に割り当てる（Ｓ２５０３）。Ｓ２５０３において、リソース割当てプログラム４０２は、その更新スレッド３０１に対応するエントリ（スレッド管理テーブル５０２のエントリ）に、割り当てたログバッファ２１４の名前と、割り当てたログファイル１０７の名前とを登録してよい。また、Ｓ２５０３において、リソース割当てプログラム４０２は、その更新スレッド３０１に、共通ログファイル３０７及び共通ログバッファ３１４も割り当ててよい。
【０１０６】
一方、ログバッファ２１４の確保及びログファイル１０７の選択の少なくとも１つに失敗した場合（Ｓ２５０２：Ｎ）、リソース割当てプログラム４０２は、処理を終了する。すなわち、本実施形態では、全ての更新スレッド３０１にログファイル１０７及びログバッファ２１４が必ずしも割り当てられなくてもよい。
【０１０７】
図１４は、参照用ＤＢ領域割当て処理の流れの一例を示す。
【０１０８】
スレッド割当てプログラム４０１は、リソース割当てプログラム４０２を呼び出すことで、参照用ＤＢ領域割当て処理を行う。言い換えれば、参照用ＤＢ領域割当て処理は、リソース割当てプログラム４０２により行われる。
【０１０９】
リソース割当てプログラム４０２は、スレッド管理テーブル５０２から、参照スレッド３０２に割り当てられているＤＢ領域番号８０８のうち最大のＤＢ領域番号８０８を取得する（Ｓ１４０１）。
【０１１０】
リソース割当てプログラム４０２は、Ｓ１４０１で取得されたＤＢ領域番号８０８が表すＤＢ領域３０３の次のＤＢ領域３０３を含む連続したＭ個（Ｍは１以上の整数（ここではＭ＝１））のＤＢ領域３０３を、参照スレッド３０２の割当て対象として決定する（Ｓ１４０２）。但し、リソース割当てプログラム４０２は、スレッド管理テーブル５０２、ＤＢファイル管理テーブル５０１及びＤＢ領域−ページ対応管理テーブル５０５のうちの少なくとも１つを参照し、決定したＤＢ領域３０３の各々について、以下を行なってよい。すなわち、リソース割当てプログラム４０２は、Ｓ１４０１で取得されたＤＢ領域番号８０８に対応したＤＢファイル１０６の最大使用ページ番号６０２に、ＤＢ領域３０３を構成するページ数を加算し、加算後のページ番号が、そのＤＢファイル１０６の最大ページ番号６０３を超えるか否かを判断する。その判断の結果が否定の場合、リソース割当てプログラム４０２は、そのＤＢ領域３０３を１つの割当て対象として決定する。その判断の結果が肯定の場合、リソース割当てプログラム４０２は、そのＤＢ領域３０３を非割当て対象とする（この場合、リソース割当てプログラム４０２は、他のＤＢファイル１０６のＤＢ領域３０３を割当て対象としてもよい）。或いは、リソース割当てプログラム４０２は、同一のＯＳスレッド３０４内の更新スレッド３０１に割り当てられたＮ個のＤＢ領域３０３を、算出された参照スレッド数分の参照スレッド３０２への割当て対象としてもよい。
【０１１１】
リソース割当てプログラム４０２は、Ｓ１４０２の結果に従い、スレッド管理テーブル５０２及びＤＢファイル管理テーブル５０１のうちの少なくとも１つを更新する。例えば、リソース割当てプログラム４０２は、参照スレッド３０２を実行するコア２１１の番号、その参照スレッド３０２を含むＯＳスレッド３０４の番号、その参照スレッド３０２の番号、種別「参照」、その参照スレッド３０２に割り当てられたＤＢ領域３０３の番号、及び、その参照スレッド３０２に割り当てられたＤＢ領域３０３を含んだＤＢファイル１０６の名前を、スレッド管理テーブル５０２のエントリに登録する。
【０１１２】
図１５は、擬似スレッド実行制御処理の流れの一例を示す。
【０１１３】
擬似スレッド実行制御処理は、例えば図１１のＳ１１１０により開始される処理であり、疑似スレッド実行制御プログラム４０３により行われる。図１５の例によれば、キュー３１３に所定量以上のデータ（更新要求）があれば、更新スレッド３０１が実行され、キュー３１３に所定量以上のデータが無ければ、参照スレッド３０２が実行される。上述したように、更新スレッド３０１及び参照スレッド３０２は、それぞれ特定のＤＢ領域３０３に対応付けられているため、更新処理又は参照処理（検索処理）を並行して実行することができる。
【０１１４】
疑似スレッド実行制御プログラム４０３は、ホスト計算機１０１のＯＳ２１８から、実行するＯＳスレッド３０４の番号を取得し、当該ＯＳスレッド３０４に対応するキュー３１３を特定する（Ｓ１５０１）。疑似スレッド実行制御プログラム４０３は、Ｓ１５０１で特定したキュー３１３の残量が所定の閾値以上か否かを判断する（Ｓ１５０２）。
【０１１５】
Ｓ１５０２の判断結果が肯定の場合（Ｓ１５０２：Ｙ）、疑似スレッド実行制御プログラム４０３は、ＤＢ更新プログラム４０５を呼び出すことによりＤＢ更新処理（図１７）を実行する（Ｓ１５０３）。これにより、特定したキュー３１３に対応する更新スレッド３０１が実行される。すなわち、更新スレッド３０１が、キュー３１３内のレコード値９０３を、その更新スレッド３０１に割り当てられているＤＢ領域３０３（又はログファイル１０７）に書き込む。疑似スレッド実行制御プログラム４０３は、その更新処理が終了か否か（検索終了フラグをＯＮか否か）を判断する（Ｓ１５０４）。Ｓ１５０４の判断結果が否定の場合（Ｓ１５０４：Ｎ）、Ｓ１５０１が行われ、Ｓ１５０４の判断結果が肯定の場合（Ｓ１５０４：Ｙ）、処理が終了する。
【０１１６】
Ｓ１５０２の判断結果が否定の場合（Ｓ１５０２：Ｎ）、疑似スレッド実行制御プログラム４０３は、参照スレッド３０２による検索処理が終了したか否かを判断する（Ｓ１５０５）。Ｓ１５０５の判断結果が肯定の場合（Ｓ１５０５：Ｙ）、疑似スレッド実行制御プログラム４０３は、Ｓ１５０３を行う。
【０１１７】
Ｓ１５０５の判断結果が否定の場合（Ｓ１５０５：Ｎ）、疑似スレッド実行制御プログラム４０３は、優先して検索するデータがあるかを否かを判断する（Ｓ１５０６）。
【０１１８】
Ｓ１５０６の判断結果が肯定の場合（Ｓ１５０６：Ｙ）、疑似スレッド実行制御プログラム４０３は、当該優先データの検索処理を担当する参照スレッド３０２を選択する（Ｓ１５０７）。一方、Ｓ１５０６の判断結果が否定の場合（Ｓ１５０６：Ｎ）、疑似スレッド実行制御プログラム４０３は、ＤＢ領域３０３が割り当てられている参照スレッド３０２のうち、キュー３１３の残量が最も少ない参照スレッド３０２を選択する（Ｓ１５０８）。
【０１１９】
Ｓ１５０７又はＳ１５０８の後、疑似スレッド実行制御プログラム４０３は、参照スレッド３０２の選択に成功したか否かを判断する（Ｓ１５０９）。Ｓ１５０９の判断結果が肯定の場合（Ｓ１５０９：Ｙ）、疑似スレッド実行制御プログラム４０３は、ＤＢ検索プログラム４０４を呼び出すことによりＤＢ検索処理（図１６）を実行する（Ｓ１５１０）。これにより、選択された参照スレッド３０２が実行される。一方、Ｓ１５０９の判断結果が否定の場合（Ｓ１５０９：Ｎ）、疑似スレッド実行制御プログラム４０３は、検索終了フラグをＯＮにして（Ｓ１５１１）、Ｓ１５０１を実行する。
【０１２０】
図１６は、ＤＢ検索処理の流れの一例を示す。
【０１２１】
ＤＢ検索プログラム４０４は、実行対象の参照スレッド３０２に割り当て済みのＤＢ領域３０３内のページ数分、Ｓ１６０１〜Ｓ１６０４を繰り返す（Ｓ１６０６）。
【０１２２】
すなわち、ＤＢ検索プログラム４０４は、実行対象の参照スレッド３０２に割り当てられたＤＢ領域３０３のＤＢページから検索条件に合致するレコードを取得する（Ｓ１６０１）。Ｓ１６０１で取得したレコードが入出力待ちとなる場合、ＤＢ検索プログラム４０４は、参照スレッド３０２の実行を中断する（Ｓ１６０２）。ＤＢ検索プログラム４０４は、Ｓ１６０１で取得したレコードをスレッド間データ受け渡しキュー５０３に登録する（Ｓ１６０３）。具体的には、例えば、ＤＢ検索プログラム４０４は、スレッド間データ受け渡しキュー５０３３１３のエントリに、Ｆｒｏｍスレッド番号９０１として、実行した参照スレッド３０２の番号を登録し、Ｔｏスレッド番号９０２として、当該参照スレッド３０２と同じＯＳスレッド３０４内で実行する更新スレッド３０１の番号を登録し、レコード値９０３として、Ｓ１６０１で取得したレコード値９０３を登録する。ＤＢ検索プログラム４０４は、当該参照スレッド３０２の実行が開始されてから一定サイクルが経過した場合、当該参照スレッド３０２の実行を中断する（Ｓ１６０４）。Ｓ１６０４の中断処理により、１つのＯＳスレッド３０４内で、１つの参照スレッド３０２の検索処理が長時間実行されて、他の参照スレッド３０２が実行されずに待ち状態１００２が継続することを避けることができる。
【０１２３】
ＤＢ検索プログラム４０４は、リソース割当てプログラム４０２を呼び出して参照用ＤＢ領域割当て処理を実行する（Ｓ１６０５）。参照スレッドに割り当てられたＤＢ領域があれば（Ｓ１６０６：Ｙ）、割り当てられたＤＢ領域の数分、Ｓ１６０１〜Ｓ１６０４が行われる。参照スレッドに割り当てられたＤＢ領域が無ければば（Ｓ１６０６：Ｎ）、処理が終了する。
【０１２４】
図１７は、ＤＢ更新処理の流れの一例を示す。
【０１２５】
ＤＢ更新処理は、ＤＢ更新プログラム４０５により行われる。ＤＢ更新処理は、上述したＤＢ検索処理によりスレッド間データ受け渡しキュー５０３３１３に登録されたキュー３１３のレコード値９０３に対応するデータを更新する処理である。
【０１２６】
ＤＢ更新プログラム４０５は、スレッド間データ受け渡しキュー５０３３１３が空か否かを判断する（Ｓ１７０１）。Ｓ１７０１の判断結果が肯定の場合（Ｓ１７０１：Ｙ）、ＤＢ更新プログラム４０５は、処理を終了する。
【０１２７】
一方、Ｓ１７０１の判断結果が否定の場合（Ｓ１７０１：Ｎ）、ＤＢ更新プログラム４０５は、スレッド間データ受け渡しキュー５０３からレコードを取得する（Ｓ１７０２）。ＤＢ更新プログラム４０５は、実行している更新スレッド３０１に割り当てられているＤＢ領域３０３に、空きがあるか否かを判断する（Ｓ１７０３）。Ｓ１７０３の判断結果が肯定の場合（Ｓ１７０３：Ｙ）、ＤＢ更新プログラム４０５は、Ｓ１７０６を実行する。
【０１２８】
一方、Ｓ１７０３の判断結果が否定の場合（Ｓ１７０３：Ｎ）、ＤＢ更新プログラム４０５は、リソース割当てプログラム４０２を呼び出して更新用ＤＢ領域割当て処理（図１３）を実行する（Ｓ１７０４）。これにより、更新スレッド３０１に新たなＤＢ領域３０３が割り当てられる。Ｓ１７０４の割り当て処理が成功した場合（Ｓ１７０５：Ｙ）、ＤＢ更新プログラム４０５は、Ｓ１７０６を実行する。一方、Ｓ１７０４の割り当て処理が失敗した場合（Ｓ１７０５：Ｎ）、ＤＢ更新プログラム４０５は、処理を終了する。
【０１２９】
Ｓ１７０６において、ＤＢ更新プログラム４０５は、実行している更新スレッド３０１に割り当てられているログファイル１０７のログ領域に空きがあるか否かを判断する。Ｓ１７０６の判断結果が肯定の場合（Ｓ１７０６：Ｙ）、ＤＢ更新プログラム４０５は、Ｓ１７０８を実行する。一方、Ｓ１７０６の判断結果が否定の場合（Ｓ１７０６：Ｎ）、ＤＢ更新プログラム４０５は、リソース割当てプログラム４０２を呼び出してログファイル割当て処理（図２５）を実行する（Ｓ１７０７）。これにより、更新スレッド３０１に新たなログファイル１０７が割り当てられる。
【０１３０】
ＤＢ更新プログラム４０５は、ログ（例えば、論理ログ）を、更新スレッド３０１に割り当てられているログファイル１０７に出力する（Ｓ１７０８）。その際、ＤＢ更新プログラム４０５は、ログ（例えば、更新前ページのデータを含んだ物理ログ）を、共通ログファイル３０７に出力してよい。ＤＢ更新プログラム４０５は、ログのログファイル１０７への出力処理が入出力待ちとなる場合、当該更新スレッド３０１の実行を中断する（Ｓ１７０９）。
【０１３１】
続いて、ＤＢ更新プログラム４０５は、更新スレッド３０１に割り当てられているＤＢ領域３０３内のＤＢページを更新する（Ｓ１７１０）。Ｓ１７１０は、少なくともコミットのときに行われてよい。すなわち、コミットの時に更新後データがＤＢページに即時に書き込まれてよい。ＤＢ更新プログラム４０５は、更新対象となるＤＢファイル１０６への出力処理が入出力待ちとなる場合、当該更新スレッド３０１の実行を中断する（Ｓ１７１１）。ＤＢ更新プログラム４０５は、更新対象となるＤＢファイル１０６への更新が終了した後、Ｓ１７０１を再度実行する。
【０１３２】
以上が、本実施形態において行われる処理の一例である。
【０１３３】
本実施形態では、管理端末１０８のＣＰＵ２０１（又はホスト計算機１０１のＣＰＵ２０１）が、図１８に例示する管理画面を表示できる。図１８に例示する管理画面は、優先的に検索するデータや、参照スレッド数を受け付けるＧＵＩ（Graphical  User  Interface）である。具体的には、例えば、管理画面は、優先的に検索するデータの属性の入力を受け付けるＵＩ（User  Interface）と、生成される参照スレッド数の入力を受け付けるＵＩとを有する。これらのＵＩを通じて入力された情報が、管理端末１０８経由又は非経由でホスト計算機１０１のメモリ２０２に設定され、その情報を基に、優先データの有無の判断（Ｓ１５０６）や、生成される参照スレッド３０２の数の算出（Ｓ１１０５）等が制御されてよい。
【０１３４】
また、上述した説明では、更新用ＤＢ領域割当て処理において、異なる更新スレッド３０１に異なるＤＢ領域３０３が割り当てられるが、その割り当ては、上述したように、第１の割り当てモードに従う割り当てである。本実施形態では、第１の割り当てモードを含む複数の割り当てモードが用意されている。更新用ＤＢ領域割当て処理又は他の処理において、複数の割り当てモードから選択された割り当てモードを、更新スレッド３０１に対する領域割り当てに適用できる。割り当てモードの選択は、管理端末１０８又はホスト計算機１０１のユーザにより手動で行われてもよいし、設定されたポリシーに従ってデータベース管理プログラム２１５により自動で行われてもよい。例えば、スレッド割当てプログラム４０１は、クエリを受け付けた場合等の所定のイベントを検出する都度に、割り当てモード選択処理を行ってよい。割り当てモード選択処理は、例えば、図１１のＳ１００２で行われてよい。割り当てモード選択処理において、スレッド割当てプログラム４０１は、下記を行ってよい。
（Ａ１）スレッド割当てプログラム４０１は、ＤＢ統計情報５０４を参照し、索引とＤＢ表の各々について構成等の属性を特定する。
（Ａ２）（Ａ１）において、索引がＢ木構造であることを特定した場合、スレッド割当てプログラム４０１は、その索引について、後述の第２の割り当てモードを選択する。
（Ａ３）（Ａ１）において、索引がＢ木構造でないことを特定した場合、スレッド割当てプログラム４０１は、その索引について、後述の第２の割り当てモード以外のいずれかの割り当てモード（例えば第１の割り当てモード）を選択する。
（Ａ４）（Ａ１）において、ＤＢ表について、キー毎の重複数のばらつきが比較的大きい場合、スレッド割当てプログラム４０１は、そのＤＢ表について、後述の第４の割り当てモードを選択する。
（Ａ５）（Ａ１）において、ＤＢ表について、キー毎の重複数のばらつきが比較的小さい場合、スレッド割当てプログラム４０１は、そのＤＢ表について、第１の割り当てモード又は後述の第３の割り当てモードを選択する。
【０１３５】
以下、第１の割り当てモード以外の幾つかの割り当てモードを説明する。なお、更新スレッド３０１に異なる共有リソース部が割り当てられるが、本実施形態では、１つのＯＳスレッド３０４には１つの更新スレッド３０１が割り当てられるので、以下の説明では、更新スレッド３０１に対する割り当てを、ＯＳスレッド３０４に対する割り当てとして説明する。
【０１３６】
図１９は、第２の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
【０１３７】
第２の割り当てモードによれば、索引及び表に対応した複数のＤＢページのＢ木構造に基づきＯＳスレッド３０４にＤＢ領域３０３が割り当てられる。
【０１３８】
Ｂ木構造によれば、ページの種別８０４として、先頭のページであるルートページ（ＲＯ）、末端のページであるリーフページ（ＲＥ）、ルートページとリーフページ間のページである中間ページ（ＩＮ）とがある。図１９の例によれば、Ｂ木構造は、３階層を有する。３階層は、ルートページが属する上位層と、中間ページが属する中間層と、リーフページが属する下位層とで構成される。本実施形態では、ページが増える場合、リーフページ及び中間ページが増えることになり、３階層は維持される。しかし、それに限らず、例えば、Ｂ木構造は、４階層以上の層を有してもよい。その場合、比較的上位の中間ページと比較的下位の中間ページとがある。言い換えれば、ルートページ及びリーフページ以外は中間ページである。
【０１３９】
ルートページには、１つ下の階層の中間ページに対するポインタと、当該１つ下の階層のページが管理対象とするキーの最大値とを対応付けたエントリが１以上設けられる。中間ページも、同様に、１つ下の階層のページに対するポインタと、当該１つ下の階層の中間ページが管理対象とするキーの最大値とを対応付けたエントリが１つ以上設けられる。リーフページには、キーと、当該キーに対応する値の格納位置（例えば、Ｐａｒｔ表のページ番号及びの当該ページ中のスロット番号）とを対応付けたロー（行：レコード）が１つ以上格納される。
【０１４０】
第２の割り当てモードによれば、このようなＢ木構造に従い、データベース管理プログラム２１５（例えばリソース割当てプログラム４０２）により、異なるＯＳスレッド３０４に、それぞれ、異なるページ集合が割り当てられる（ＯＳスレッド３０４に、ページ集合が１：１又は１：ｎで割り当てられる）。すなわち、第２の割り当てモードによれば、ページ集合が、共有リソース部の一例であり、ＤＢ領域３０３に代えて、ページ集合がＯＳスレッド３０４に割り当てられる。１つのページ集合は、１以上の中間ページと、その１以上の中間ページに属する複数のリーフページとの集合である。図１９の例によれば、ＯＳスレッドＴ１１ａに、第１のページ集合（中間ページＩＮ１と、それに属するリーフページＲＥ１１〜ＲＥ１３）が割り当てられ、ＯＳスレッドＴ１１ｂに、第２のページ集合（中間ページＩＮ２と、それに属するリーフページＲＥ２１〜２３）が割り当てられる。ページ集合は、他のページ集合に重複しない。
【０１４１】
このような割り当てにより、同一中間ページに属する異なるリーフページが更新されても異なる更新スレッド３０１が同一中間ページにアクセスするといった競合が生じることを避けることができる。なお、上記異なるページ集合の各々がＤＢ領域３０３であってもよい。
【０１４２】
図２０は、第３の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
【０１４３】
第３の割り当てモードによれば、データベース管理プログラム２１５により、異なるＯＳスレッド３０４に、それぞれ、異なるキー範囲が割り当てられる（ＯＳスレッド３０４に、キー範囲が１：１又は１：ｎで割り当てられる）。すなわち、第３の割り当てモードによれば、キー範囲が、共有リソース部の一例であり、ＤＢ領域３０３に代えて、キー範囲がＯＳスレッド３０４に割り当てられる。各キー範囲は、いずれのキー範囲にも重複していない。図２０の例によれば、ＯＳスレッドＴ１１ａに、第１のキー範囲（キー０１〜１０）が割り当てられ、ＯＳスレッドＴ１１ｂに、第２のキー範囲（キー１１〜２０）が割り当てられる。
【０１４４】
第３の割り当てモードによれば、異なる更新スレッド３０１が同一キーを含んだ領域にアクセスするといった競合を回避できる。
【０１４５】
図２１は、第４の割り当てモードが採用された場合の割り当て結果の一例を示す模式図である。
【０１４６】
第４の割り当てモードによれば、ＤＢ統計情報５０４と検索条件を基に、データベース管理プログラム２１５により、異なるＯＳスレッド３０４に、それぞれ、異なるキー集合が割り当てられる（ＯＳスレッド３０４に、キー集合が１：１又は１：ｎで割り当てられる）。すなわち、第４の割り当てモードによれば、キー集合が、共有リソース部の一例であり、ＤＢ領域３０３に代えて、キー集合がＯＳスレッド３０４に割り当てられる。ＤＢ統計情報５０４は、キー毎に重複数を含む。重複数は、キーに属する値の数である。各キー集合は、１以上のキーである。各キー集合は、複数のキー集合の各々の重複数合計がなるべく均等になるように構成される。キュー３１３集合の重複数合計とは、そのキー集合に含まれるキーに対応した重複数の合計である。重複数合計は、例えばデータベース管理プログラム２１５により算出され、キュー３１３集合も、例えばデータベース管理プログラム２１５により定義される。図２１の例によれば、ＯＳスレッドＴ１１ａに、第１のキー集合（キーＡ及びＣ）が割り当てられ、ＯＳスレッドＴ１１ｂに、第２のキー集合（キーＢ）が割り当てられる。
【０１４７】
第４の割り当てモードによれば、異なる更新スレッド３０１が同一キーを含んだ領域にアクセスするといった競合を回避でき、且つ、更新スレッド３０１の負荷（処理量）を略均一にできる。
【０１４８】
さて、本実施形態では、データベースの更新に失敗した等の場合に、ＤＢロールバックプログラム４０６により、ロールバック処理が行われる。ロールバック処理では、まず、未コミットの物理ログ（更新前ページを含んだログ）がデータベースに反映され、その後に、複数の論理ログが並列にデータベースに反映される。異なる複数の論理ログにそれぞれ異なる複数の更新スレッド３０１が割り当て、複数の更新スレッド３０１が並列に複数の論理ログをデータベースに反映する。
【０１４９】
図２２は、ロールバック処理の流れの一例を示す。
【０１５０】
ＤＢロールバックプログラム４０６は、共通ログファイル３０７から未コミットの物理ログを読み出し、読み出した物理ログをデータベースに反映する（Ｓ２２０１）。物理ログは、更新前ページ（更新前データ）を含んでいるので、データベースの内容は、トランザクション開始前の内容になる。
【０１５１】
ＤＢロールバックプログラム４０６は、データベースの回復を行う１以上のＯＳスレッド３０４に、１以上のコア２１１を割り当てる。ＤＢロールバックプログラム４０６は、１以上の参照スレッド３０２及び１以上の更新スレッド３０１を、１以上のログファイル１０７を割り当てる（Ｓ２２０２）。異なるＯＳスレッド３０４に、異なるコア２１１が１：１又は１：ｎで割り当てられる。異なる更新スレッド３０１及び異なる参照スレッド３０２に、異なるログファイル１０７が１：１又は１：ｎで割り当てられる。具体的には、例えば、ＤＢロールバックプログラム４０６を呼び出し、スレッド割当てプログラム４０１に、ＯＳスレッド３０４の生成と、ＯＳスレッド３０４について参照スレッド３０２及び更新スレッド３０１の生成と、生成したＯＳスレッド３０４のコア２１１への割り当てと、ＯＳスレッド３０４（参照スレッド３０２及び更新スレッド３０１）のログファイル１０７への割り当てとを実行させる。ここで割り当てられるログファイル１０７は、使用中のログファイル１０７である。使用中のログファイル１０７に、反映されるべき論理ログが含まれており、未使用のログファイル１０７には、そのような論理ログは含まれていないからである。
【０１５２】
ＤＢロールバックプログラム４０６は、Ｓ２２０２でスレッドを、１以上のログファイル１０７について並列に実行する。これにより、その１以上のログファイル１０７の各々について、Ｓ２２０３〜Ｓ２２０５が行われる。１つのログファイル１０７を例に取ると、次の通りである。すなわち、ログファイル１０７に割り当てられている参照スレッド３０２が、その割り当てられているログファイル１０７から論理ログを読み出し（Ｓ２２０３）、その論理ログに従う更新先に対応した更新スレッド３０１を特定し（Ｓ２２０４）、特定した更新スレッド３０１に対応したキュー３１３に、その論理ログに従う更新の要求（更新先ページ及び更新内容を指定した要求）を格納する（Ｓ２２０５）。その更新スレッド３０１が、キュー３１３内の更新要求に従い、その更新要求から特定された更新先ページを更新する。
【０１５３】
ロールバック処理によれば、ログファイル１０７及びコア２１１にＯＳスレッド３０４が割り当てられる。ログファイル１０７は、１以上のＤＢ領域３０３が割り当てられていた更新スレッド３０１に１：１で割り当てられていたログファイル１０７であるため、ログファイル１０７に格納される論理ログが表す更新先ページ（例えばページ番号又はページの論理アドレス）は、更新スレッド３０１に割り当てられていた１以上のＤＢ領域３０３のうちのいずれかである。従って、ロールバック処理において、ＯＳスレッド３０４（参照スレッド３０２）にログファイル１０７が割り当てられれば、ＯＳスレッド３０４（更新スレッド３０１）にＤＢ領域３０３が割り当てられなくても、ロールバック処理において並列に動作する複数のＯＳスレッド３０４（更新スレッド３０１）が同一のＤＢ領域３０３を更新するといった競合は発生しない。
【０１５４】
本実施形態では、管理端末１０８のＣＰＵ２０１（又はホスト計算機１０１のＣＰＵ２０１）が、図２３又は図２４に例示する管理画面を表示できる。図２３に例示する管理画面２３００は、ＯＳスレッド番号とＯＳスレッド３０４に割り当てられたログファイル名との対応関係の一覧を示す。図２４に例示する管理画面２４００は、ＯＳスレッド番号とログファイル名と出力スループット（単位時間当たりの入出力データサイズ）との対応関係を示す。ＯＳスレッド番号とログファイル名との対応関係の表示は、例えば、スレッド管理テーブル５０２を参照することにより特定された対応関係の表示でよい。出力スループットは、例えば、データベース管理プログラム２１５により監視され、管理データ２１６（例えばスレッド管理テーブル５０２）に記録された情報でよい。ＯＳスレッド番号とログファイル名と出力スループットとの対応関係の表示も、例えば、スレッド管理テーブル５０２を参照することにより特定された対応関係の表示でよい。また、表示される対応関係は、図２３又は図２４に例示の関係に代えて又は加えて、スレッド管理テーブル５０２等に基づき、コア、ＯＳスレッド、参照スレッド、更新スレッド及び共有リソース部（例えば、ＤＢファイル、ＤＢ領域、ＤＢページ、ログファイル、ログ領域及びログバッファのうちの少なくとも１つ）間の対応関係が表示されてよい。具体的には、例えば、データベース管理プログラム２１５が、コア、ＯＳスレッド、参照スレッド、更新スレッド及び共有リソース部（例えば、ＤＢファイル、ＤＢ領域、ＤＢページ、ログファイル、ログ領域及びログバッファのうちの少なくとも１つ）間の対応関係を表示、又は、その対応関係を表示するための情報（例えばスレッド管理テーブル５０２を含んだ情報）を管理端末１０８等の外部装置に出力してもよい。
【０１５５】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１５６】
例えば、ホスト計算機１０１では、ハイパバイザが実行されることにより１又は複数のＶＭ（仮想マシン）が生成され、各々のＶＭにおいて、データベース管理プログラム２１５が実行されてよい。ＶＭが実行される実施形態では、例えば、上述の説明を次のように読み替えることができる。すなわち、例えば図１では、論理ボリューム１０５上に仮想ボリューム（ＶＭのディスクイメージ）が配置され、ＤＢファイル１０６は仮想ボリューム上に作成されてよい。ＯＳ２１８は、ホストＯＳ（ホスト計算機１０１のＯＳ）上で実行されるゲストＯＳ（ＶＭのＯＳ）と読み替えられてよい。ＤＢバッファ２１３、ログバッファ２１４、データベース管理プログラム２１５、管理データ２１６、スレッド状態２１７は、ゲストＯＳ上に配置されてよい。ＯＳスレッドは、ゲストＯＳスレッドと読み替えられてよい。コア２１１は、ＶＭの仮想コア（ＶＭに割り当てられたコア）と読み替えられてよい。
【符号の説明】
【０１５７】
１０１：ホスト計算機、１０２：ストレージ装置
【図１】
2016157492.tif 000003
【図２】
2016157492.tif 000004
【図３】
2016157492.tif 000005
【図４】
2016157492.tif 000006
【図５】
2016157492.tif 000007
【図６】
2016157492.tif 000008
【図７】
2016157492.tif 000009
【図８】
2016157492.tif 000010
【図９】
2016157492.tif 000011
【図１０】
2016157492.tif 000012
【図１１】
2016157492.tif 000013
【図１２】
2016157492.tif 000014
【図１３】
2016157492.tif 000015
【図１４】
2016157492.tif 000016
【図１５】
2016157492.tif 000017
【図１６】
2016157492.tif 000018
【図１７】
2016157492.tif 000019
【図１８】
2016157492.tif 000020
【図１９】
2016157492.tif 000021
【図２０】
2016157492.tif 000022
【図２１】
2016157492.tif 000023
【図２２】
2016157492.tif 000024
【図２３】
2016157492.tif 000025
【図２４】
2016157492.tif 000026
【図２５】
2016157492.tif 000027
【国際調査報告】
2016157492.tif 000028
2016157492.tif 000029
2016157492.tif 000030
2016157492.tif 000031