(57)【要約】【課題】更新が行われる共有リソースを各スレッド間で論理的に分割して、複数のコア間で並列に更新処理を行う。【解決手段】共有リソース更新装置は、複数のスレッドで構成されるプログラムの実行を制御し、前記複数のスレッドに対応付けられる複数の領域を有する共有リソースの更新を行うプロセッサを備え、前記プロセッサは、前記複数のスレッドのうち少なくとも１つのスレッドを、前記スレッドに対応付けられた前記共有リソースの領域の更新を行う更新スレッドとし、前記更新スレッドと異なるスレッドを、前記共有リソースの更新の際に前記更新スレッドに更新要求を送付し、前記共有リソースの参照の際に前記共有リソースを直接参照する参照スレッドとする。
2015162705.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドで構成されるプログラムの実行を制御し、前記複数のスレッドに対応付けられる複数の領域を有する共有リソースの更新を行うプロセッサを備え、
前記プロセッサは、
前記複数のスレッドのうち少なくとも１つのスレッドを、前記スレッドに対応付けられた前記共有リソースの領域の更新を行う更新スレッドとし、
前記更新スレッドと異なるスレッドを、前記共有リソースの更新の際に前記更新スレッドに更新要求を送付し、前記共有リソースの参照の際に前記共有リソースを直接参照する参照スレッドとする
ことを特徴とする、共有リソース更新装置。
【請求項２】
前記プロセッサは、
前記共有リソースの複数の領域のうち、一の領域を前記更新スレッドによる更新対象の領域とし、他の領域を前記参照スレッドによる参照対象の領域とする
ことを特徴とする、請求項１に記載の共有リソース更新装置。
【請求項３】
前記プロセッサは、
前記参照スレッドから前記更新スレッドに送付された更新要求をデータ受け渡しキューに格納し、前記データ受け渡しキューに格納された順序に従って、前記更新スレッドに前記共有リソースの領域を更新させる
ことを特徴とする、請求項１に記載の共有リソース更新装置。
【請求項４】
前記プロセッサは、
前記共有リソースを共有し、前記複数のスレッドを並列に処理する複数のコアを制御し、
前記複数のコアに実行させる複数のスレッドの１つのスレッドは、少なくとも１つの前記更新スレッドと複数の前記参照スレッドを含む
ことを特徴とする、請求項１に記載の共有リソース更新装置。
【請求項５】
前記プロセッサは、
前記複数のコアに実行させる複数のスレッドの１つのスレッドと、前記スレッドに含まれる少なくとも１つの前記更新スレッドと、前記更新スレッドの更新対象となる前記共有リソースの領域とを対応付ける
ことを特徴とする、請求項４に記載の共有リソース更新装置。
【請求項６】
前記プロセッサは、
前記複数のコアに実行させる複数のスレッドの１つのスレッドと、前記スレッドに含まれる複数の前記参照スレッドと、前記参照スレッドの参照対象となる前記共有リソースの領域とを対応付ける
することを特徴とする、請求項５に記載の共有リソース更新装置。
【請求項７】
複数のスレッドで構成されるプログラムの実行を制御し、前記複数のスレッドに対応付けられる複数の領域を有する共有リソースの更新を行う共有リソース更新装置における共有リソース更新方法であって、
前記複数のスレッドのうちの１つのスレッドに含まれる少なくとも１つの更新スレッド及び複数の参照スレッドが含まれ、前記更新スレッドと前記更新スレッドの更新対象となる前記共有リソースの領域とが対応付けられており、
前記参照スレッドが、前記共有リソースの更新の際に前記更新スレッドに更新要求を送付するステップと、
前記参照スレッドが、前記共有リソースの参照の際に前記共有リソースを直接参照する参照スレッドとするステップと、
前記更新スレッドが、前記送付された更新要求をデータ受け渡しキューに格納するステップと、
前記更新スレッドが、前記データ受け渡しキューに格納された順序に従って、前記共有リソースの領域を更新するステップと、
を含むことを特徴とする、共有リソース更新方法。
【請求項８】
前記共有リソースの複数の領域のうち、一の領域を前記更新スレッドによる更新対象の領域であり、他の領域を前記参照スレッドによる参照対象の領域である
ことを特徴とする、請求項７に記載の共有リソース更新方法。
【請求項９】
前記共有リソースを共有し、前記複数のスレッドを並列に処理する複数のコアと、前記複数のコアに実行させる複数のスレッドの１つのスレッドと、前記更新スレッドまたは前記参照スレッドとが対応付けられている
ことを特徴とする、請求項７に記載の共有リソース更新方法。
【請求項１０】
前記更新スレッドと、前記更新スレッドの更新対象となる前記共有リソースの領域とが対応付けられ、前記参照スレッドと、前記参照スレッドの参照対象となる前記共有リソースの領域とが対応付けられている
ことを特徴とする、請求項９に記載のリソース更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有リソース更新装置及び共有リソース更新方法に関し、マルチコアプロセッサによる共有リソースの更新を制御する共有リソースの更新装置及び共有リソース更新方法に適用して好適なるものである。
【背景技術】
【０００２】
近年、１つのプロセッサパッケージに複数のプロセッサコア（以下単にコアと称して説明する場合もある。）を収めて、並列処理によって性能を向上させるマルチコアプロセッサシステムが利用されている。マルチコアプロセッサシステムでは、各コアや各スレッドでハードウェア資源であるリソースを共有しながら運用されている。【０００３】
複数のスレッド間で共有リソースへのアクセス競合が発生した場合には、スレッドの優先順位に応じてスレッドを停止させたり、アクセス競合が発生しないようにスレッド順序をスケジュールしたりすることが行われている。【０００４】
例えば、特許文献１では、複数のスレッドが同一のリソースにアクセスする状態を検出した際に、各スレッドが対応するコアに割り当てられる時刻を変更することにより、アクセス競合を回避する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５３２１７４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１では、スレッド間のアクセス競合は回避されるが、複数のスレッドが同一のリソースにアクセスする状態は解消されていない。このため、複数のコアを搭載しているにも関わらず、複数のコアを並列に処理させることができず、更新処理性能をコア数に比例させて増加させることができないという問題があった。【０００７】
本発明は以上の点を考慮してなされたもので、更新が行われる共有リソースを各スレッド間で論理的に分割して、複数のコア間で並列に更新処理を行うことが可能な共有リソース更新装置及び共有リソース更新方法を提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するために本発明においては、複数のスレッドで構成されるプログラムの実行を制御し、前記複数のスレッドに対応付けられる複数の領域を有する共有リソースの更新を行うプロセッサを備え、前記プロセッサは、前記複数のスレッドのうち少なくとも１つのスレッドを、前記スレッドに対応付けられた前記共有リソースの領域の更新を行う更新スレッドとし、前記更新スレッドと異なるスレッドを、前記共有リソースの更新の際に前記更新スレッドに更新要求を送付し、前記共有リソースの参照の際に前記共有リソースを直接参照する参照スレッドとすることを特徴とする、共有リソース更新装置が提供される。【０００９】
また、かかる課題を解決するために本発明においては、複複数のスレッドで構成されるプログラムの実行を制御し、前記複数のスレッドに対応付けられる複数の領域を有する共有リソースの更新を行うプロセッサを備える共有リソース更新装置における共有リソース更新方法であって、前記複数のスレッドのうちの１つのスレッドに含まれる少なくとも１つの更新スレッド及び複数の参照スレッドが含まれ、前記更新スレッドと前記更新スレッドの更新対象となる前記共有リソースの領域とが対応付けられており、前記参照スレッドが、前記共有リソースの更新の際に前記更新スレッドに更新要求を送付するステップと、前記参照スレッドが、前記共有リソースの参照の際に前記共有リソースを直接参照する参照スレッドとするステップと、前記更新スレッドが、前記送付された更新要求をデータ受け渡しキューに格納するステップと、前記更新スレッドが、前記データ受け渡しキューに格納された順序に従って、前記共有リソースの領域を更新するステップと、を含むことを特徴とする、共有リソース更新方法が提供される。
【発明の効果】
【００１０】
本発明によれば、更新が行われる共有リソースを各スレッド間で論理的に分割して、複数のコア間で並列に更新処理を行うことにより、更新処理性能を高めることができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に係る共有リソース更新システムの構成を示すブロック図である。
【図２】同実施形態にかかるホスト計算機の構成を示すブロック図である。
【図３】同実施形態にかかるスレッド状態の内容を説明する概念図である。
【図４】同実施形態にかかるデータベース管理プログラムの構成を示すブロック図である。
【図５】同実施形態にかかる管理データの構成を示すブロック図である。
【図６】同実施形態にかかるＤＢ領域管理テーブルの一例を示す図表である。
【図７】同実施形態にかかるログ領域管理テーブルの一例を示す図表である。
【図８】同実施形態にかかるスレッド管理テーブルの一例を示す図表である。
【図９】同実施形態にかかるスレッド間データ受け渡しキューの一例を示す図表である。
【図１０】同実施形態にかかるスレッド割当て処理の詳細を示すフローチャートである。
【図１１】同実施形態にかかる検索用サブスレッドの生成数の計算処理の詳細を示すフローチャートである。
【図１２】同実施形態にかかるリソース割当て処理の詳細を示すフローチャートである。
【図１３】同実施形態にかかる参照用ＤＢ領域割当て処理の詳細を示すフローチャートである。
【図１４】同実施形態にかかる更新用ＤＢ領域割当て処理の詳細を示すフローチャートである。
【図１５】同実施形態にかかるログ領域割当て処理の詳細を示すフローチャートである。
【図１６】同実施形態にかかるサブスレッド実行制御処理を示すフローチャートである。
【図１７】同実施形態にかかるＤＢ検索処理を示すフローチャートである。
【図１８】同実施形態にかかるＤＢ更新処理を示すフローチャートである。
【図１９】同実施形態にかかる管理画面の一例を説明する説明図である。
【発明を実施するための形態】
【００１２】
以下図面について、本発明の一実施の形態を詳述する。
【００１３】
（１）共有リソース更新システムの構成
まず、図１を参照して、共有リソース更新システムの構成について説明する。図１に示すように、共有リソース更新システムは、ホスト計算機１と、ストレージ装置２と、管理端末８とが、データネットワーク３を介して相互に接続されている。
【００１４】
なお、図１では、各装置はデータネットワーク３に１台ずつ接続されているが、かかる例に限定されず、複数台接続されていてもよい。また、データネットワーク３に業務システム等を利用するユーザが利用するクライアント端末（図示せず）が接続されていてもよい。
【００１５】
ホスト計算機１は、ＣＰＵ（Central  Processing  Unit）およびメモリ等の情報処理資源を備えたコンピュータ装置であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ＣＰＵは、演算処理装置として機能し、メモリに記憶されているプログラムや演算パラメータ等にしたがって、ホスト計算機１の動作を制御する。なお、ホスト計算機１は、本発明の共有リソース更新装置の一例である。
【００１６】
また、ホスト計算機１は、複数のＣＰＵ（プロセッサパッケージ、以下プロセッサパッケージを単にプロセッサと称して説明する場合もある。）内に複数のプロセッサコア（コア）を収めて、並列処理によって性能を向上させるマルチコアプロセッサシステムを利用している。マルチコアプロセッサシステムは、プロセッサに搭載された複数のコア間でハードウェア資源であるリソースを共有し、複数のスレッドを並列に処理するコンピュータシステムである。
【００１７】
また、ホスト計算機１は、Ｉ／Ｆ−Ａを介してデータネットワーク３と接続される。Ｉ／Ｆ−Ａは、データネットワーク３を介して、ホスト計算機１と外部装置とのデータ入出力を制御し、例えば、モデムやＬＡＮアダプタなどを例示できる。
【００１８】
ストレージ装置２は、ホスト計算機１から送信されたコマンドを解釈して、ストレージ装置２の記憶領域内へのリード／ライトを実行する。ストレージ装置２が提供する記憶領域は、複数の物理ディスク４から構成される。
【００１９】
ストレージ装置２は、複数の物理ディスク４から構成される記憶領域上に１または複数の論理ボリューム５ａ、５ｂ（以降、論理ボリューム５ａ、５ｂを単に論理ボリューム５と称して説明する場合もある。）を定義する。各論理ボリューム５には、データベースファイル（図中ＤＢファイルと表記）６ａ、６ｂ（以降、単にＤＢファイル６と称して説明する場合もある。）や、ログファイル７ａ、７ｂ（以降、単にログファイル７と称して説明する場合もある。）などが含まれる。
【００２０】
また、ストレージ装置２は、Ｉ／Ｆ−Ｂを介してデータネットワーク３と接続される。Ｉ／Ｆ−Ｂは、データネットワーク３を介して、ストレージ装置２と外部装置とのデータ入出力を制御し、例えば、モデムやＬＡＮアダプタなどを例示できる。
【００２１】
管理端末８は、ＣＰＵおよびメモリ等の情報処理資源を備えたコンピュータ装置であって、オペレータ等の入力に応じてホスト計算機１やストレージ装置２を管理するコンピュータ装置である。管理端末８は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の入力装置と、モニタディスプレイやスピーカ等の出力装置とを備えている。
【００２２】
また、管理端末８は、Ｉ／Ｆ−Ｃを介してデータネットワーク３と接続される。Ｉ／Ｆ−Ｃは、データネットワーク３を介して、管理端末８と外部装置とのデータ入出力を制御し、例えば、モデムやＬＡＮアダプタなどを例示できる。
【００２３】
（２）ホスト計算機の構成
次に、図２を参照して、本発明の共有リソース更新装置の一例であるホスト計算機１の詳細な構成について説明する。図２に示すように、ホスト計算機１は、複数のプロセッサＰ１、Ｐ２、Ｐ３及びＰ４を備え、各プロセッサにメモリＭ１、Ｍ２、Ｍ３及びＭ４が対応付けられている。
【００２４】
また、各プロセッサＰ１、Ｐ２、Ｐ３及びＰ４は、それぞれ、対応するメモリＭ１、Ｍ２、Ｍ３及びＭ４とバス等で接続され、プロセッサＰ１〜Ｐ４は、対応するメモリＭ１〜Ｍ４に記憶されている各種プログラムを実行して、適宜変化するパラメータを記憶したり、ストレージ装置２に記憶する各種データを一時的に記憶したりする。
【００２５】
各プロセッサＰ１〜Ｐ４のそれぞれには、複数のコアが搭載されており、各プロセッサは、複数のコアを並列に起動させて、複数のスレッドを並列に処理させる。各プロセッサＰ１〜Ｐ４は、ＩＦ−Ａ１〜Ａ４を介してデータネットワーク３に接続されているストレージ装置２とデータの送受信を行う。
【００２６】
メモリＭ１には、ＤＢバッファ１３ａ、ログバッファ１４ａ、データベース管理プログラム１０ａ、管理データ１１ａ及びスレッド状態１２ａなどが含まれる。なお、メモリＭ２〜Ｍ４もメモリＭ１と同様の構成のため、以下では、メモリＭ１の構成について詳細に説明する。
【００２７】
ＤＢバッファ１３ａは、ストレージ装置２のＤＢファイル６に書き込むデータを一時的に記憶する領域である。また、ログバッファ１４ａは、ストレージ装置２のログファイル７に書き込むデータを一時的に記憶する領域である。
【００２８】
データベース管理プログラム１０ａは、データベース（ＤＢファイル６）に対する検索処理や更新処理を制御するプログラムである。データベース管理プログラム１０ａについては、後で詳細に説明する。管理データ１１ａは、データベース管理プログラム１０がデータベース領域（ＤＢファイル６）やログ領域（ログファイル７）やスレッドなどを管理するための情報である。管理データ１１ａについては、後で詳細に説明する。
【００２９】
スレッド状態１２ａには、プロセッサＰ１の各コアによって実行されているスレッドの状態情報が格納されている。図３を参照して、スレッド状態１２について説明する。
【００３０】
図３では、プロセッサＰ１のうち、コアＣ１１により実行されるスレッドの状態について説明する。図３では、プロセッサＰ１のコアＣ１１について説明するが、プロセッサＰ１内の他のコア及び他のプロセッサ内の各コアもコアＣ１１でも同様の処理が実行される。
【００３１】
図３では、ホスト計算機１のハードウェアを管理するＯＳ（Operating  System）によって管理されているスレッドをスレッドＴ１１ａ、Ｔ１１ｂ及びＴ１１ｃとしている。そして、ユーザプログラムであるデータベース管理プログラム１０によって、１つのスレッドを疑似的に細分化して管理されているスレッドをサブスレッドＵ１１ａ１、Ｕ１１ａ２、Ｕ１１ａ３及びＵ１１ａ４としている。
【００３２】
スレッドＴ１１ａ、Ｔ１１ｂ及びＴ１１ｃは、コアＣ１１によって実行され、コアＣ１１に対応付けられているＤＢファイル６ａまたはログファイル７ａに対してデータのリード／ライトが実行される。
【００３３】
上記したように、１つのスレッドは、複数のサブスレッドに疑似的に細分化されて管理され、例えば、スレッドＴ１１ａが実行されると、複数の検索用サブスレッドＵ１１ａ１、Ｕ１１ａ２及びＵ１１ａ３と、更新用サブスレッドＵ１１ａ４が実行される。
【００３４】
例えば、ＯＳからコアＣ１１に対して、ＤＢファイル６ａまたはログファイル７ａのある領域の更新が指示されたとする。この場合、検索用サブスレッドＵ１１ａ１、Ｕ１１ａ２またはＵ１１ａ３のいずれかが更新対象となる領域を検索して、更新用サブスレッドＵ１１ａ４に更新を要求する。更新を要求された更新用サブスレッドＵ１１ａ４は、更新対象となるＤＢファイル６ａまたはログファイル７ａの指定された領域を更新する。
【００３５】
各サブスレッドは、それぞれＤＢファイル６ａまたはログファイル７ａの特定の領域に対応付けられている。例えば、図３では、検索用サブスレッドＵ１１ａ１、Ｕ１１ａ２またはＵ１１ａ３のいずれかが、領域６ａ４、６ａ５または６ａ６のいずれかに対応付けられている。また、更新用サブスレッドＵ１１ａ４は、領域６ａ１に対応付けられている。同様に、領域６ａ２及び領域７ａ２は、スレッドＴ１１ｂの更新用サブスレッドに対応付けられている。
【００３６】
このように、本実施の形態では、各コアにより実行されるスレッドが疑似的に細分化され、各スレッドに記憶領域の特定の領域が対応付けられている。特に、各スレッド内の複数のサブスレッドのうち、更新を行うサブスレッドを１つに限定して、更新用サブスレッドに対して更新対象となる共有リソースを論理的に分割して対応付けている。これにより、複数のコア間で同一のリソースにアクセスする場合に、複数の更新用サブスレッド間で同一の領域にアクセスすることを回避することができるため、コア間で並列に更新処理を行って、更新処理性能をコア数に比例させて増加させることが可能となる。
【００３７】
なお、上記更新用サブスレッドは、本発明の更新スレッドの一例であり、上記検索用サブスレッドは、本発明の参照スレッドの一例である。また、本実施の形態では、検索用サブスレッドも、更新用サブスレッドと同様に、１つの検索用サブスレッドにＤＢファイルの特定の領域が対応付けられているが、かかる例に限定されない。例えば、複数の検索用サブスレッドの検索対象となるＤＢファイルの領域が重複していてもよい。この場合、管理者等がＤＢファイルの構成を設計する際に、検索対象の領域を更新対象の領域としないように、ＤＢファイルの特定の領域を検索対象の領域として指定する必要がある。
【００３８】
次に、図４〜図９を参照して、ホスト計算機１のデータベース管理プログラム１０及び管理データ１１の詳細について説明する。
【００３９】
図４に示すように、データベース管理プログラム１０は、スレッド割当てプログラム１５、リソース割当てプログラム１６、サブスレッド実行制御プログラム１７、ＤＢ検索プログラム１８及びＤＢ更新プログラム１９などから構成される。
【００４０】
スレッド割当てプログラム１５は、ＳＱＬ（Structured  Query  Language）等のクエリ実行定義をもとに、複数のＣＰＵ（コア）にスレッドを割り当てて、さらに、各スレッド内で疑似的に細分化されて実行される複数の検索用サブスレッド及び１つの更新用サブスレッドを生成するプログラムである。コア、スレッド及びサブスレッドの対応付けは、後述するスレッド管理テーブル２２で管理される。
【００４１】
リソース割当てプログラム１６は、スレッド割当てプログラム１５により生成されたサブスレッドにデータベースの特定の領域を割り当てるプログラムである。リソース割当てプログラム１６により割り当てられたサブスレッドとデータベースの特定の領域との対応付けも、スレッド管理テーブル２２で管理される。
【００４２】
サブスレッド実行制御プログラム１７は、コアに対応付けられたスレッドのスレッド間におけるデータの受け渡しキュー情報をもとに、いずれのサブスレッドを実行させるかを制御するプログラムである。
【００４３】
ＤＢ検索プログラム１８は、複数の検索用サブスレッドのいずれかの検索用サブスレッドを実行させて、各検索用サブスレッドに割り当て済みのＤＢ領域から検索対象のレコードを取得するプログラムである。
【００４４】
ＤＢ更新プログラム１９は、検索用サブスレッドから提供される情報をもとに、更新用サブスレッドを実行させて、データベースの割り当て済みの領域を更新するプログラムである。
【００４５】
次に、管理データ１１について説明する。図５に示すように、管理データ１１は、ＤＢ領域管理テーブル２０、ログ領域管理テーブル２１、スレッド管理テーブル２２及びスレッド間データ受け渡しキュー２３を含む。
【００４６】
ＤＢ領域管理テーブル２０は、ストレージ装置２の複数の物理ディスク４の記憶領域を論理的に分割して、当該領域をＤＢファイルとして管理するためのテーブルである。図６に示すように、ＤＢ領域管理テーブル２０は、テーブルの項番２０１、ＤＢファイル名２０２、最大使用ページ番号２０３及び最大ページ番号２０４から構成される。
【００４７】
テーブルの項番２０１は、ＤＢ領域管理テーブル２０のデータの項番である。ＤＢファイル名２０２は、ストレージ装置２の複数の物理ディスク４の記憶領域であって、各コアに対応付けられるデータベースのファイル名称である。また、最大使用ページ番号２０３は、各ＤＢファイルの領域のうち、使用されている領域の最大使用ページの番号である。また、最大ページ番号２０４は、各ＤＢファイルの領域の最大ページの番号である。ここで、ページとは、データがリード／ライトされる物理ディスク４の領域の単位であって、論理ボリュームは複数のページで構成される。
【００４８】
図６では、例えば、ＤＢファイル６ａの最大使用ページ番号は１２０で、最大ページ番号は１０００であることがわかる。最大ページ番号が１０００であることは、ＤＢファイル６ａが生成される際に決定される番号である。また、最大使用ページ番号が１２０であることは、データ更新処理などによりＤＢファイル６ａが更新される際に更新される番号である。
【００４９】
ログ領域管理テーブル２１１は、ストレージ装置２の複数の物理ディスク４の記憶領域を論理的に分割して、当該領域をログファイルとして管理するためのテーブルである。図７に示すように、ログ領域管理テーブル２１は、テーブルの項番２１１、ログファイル名２１２、最大使用ページ番号２２３及び最大ページ番号２１４から構成される。
【００５０】
テーブルの項番２１１は、ログ領域管理テーブル２１のデータの項番である。ログファイル名２１２は、ストレージ装置２の複数の物理ディスク４の記憶領域であって、各コアに対応付けられるログのファイル名称である。また、最大使用ページ番号２１３は、各ログファイルの領域のうち、使用されている領域の最大使用ページの番号である。また、最大ページ番号２１４は、各ログファイルの領域の最大ページの番号である。
【００５１】
例えば、図７では、ログファイル７ａの最大使用ページ番号は１０で、最大ページ番号は１００であることがわかる。最大ページ番号が１００であることは、ログファイル７ａが生成される際に決定される番号である。また、最大使用ページ番号が１０であることは、データ更新処理などによりログファイル７ａが更新される際に更新される番号である。
【００５２】
スレッド管理テーブル２２は、ホスト計算機１のＣＰＵにより実行されるスレッド及びサブスレッドを管理するテーブルであって、図８に示すように、ＣＰＵ番号（ＣＰＵ＃）２２１、スレッド番号（スレッド＃）２２２、サブスレッド番号（サブスレッド＃）２２３、種別２２４、ＤＢ領域２２５及びログ領域２２６から構成される。
【００５３】
ＣＰＵ番号２２１は、ホスト計算機１に搭載されているＣＰＵを識別する番号である。スレッド番号２２２は、各ＣＰＵに対応付けられているスレッドを識別する番号である。サブスレッド番号２２３は、各スレッドを論理的に細分化されて管理されるサブスレッドを識別する番号である。種別２２４は、サブスレッドの種別を示し、例えば参照か更新かを示す情報である。ＤＢ領域２２５は、各サブスレッドが参照または更新するＤＢファイルの領域を特定する情報である。ログ領域２２６は、更新用のサブスレッドが更新するログファイルの領域を特定する情報である。
【００５４】
例えば、図８では、ＣＰＵ番号がＣ１であるＣＰＵにスレッドＴ１が割り当てられ、スレッドＴ１は参照用のサブスレッドＳ１ａ及びＳ１ｂと、更新用のサブスレッドＳ１ｃに細分化される。そして、参照用のサブスレッドＳ１ａの参照対象となるＤＢファイルの領域は１−０００であり、参照用のサブスレッドＳ１ｂの参照対象となるＤＢファイルの領域は１−０２０であり、更新用のサブスレッドＳ１ｃの更新対象となるＤＢファイルの領域は１−１２１であることがわかる。また、更新用のサブスレッドＳ１ｃの更新対象となるログファイルの領域は１−１１であることがわかる。
【００５５】
なお、図８では、予め１つの更新用のサブスレッドにＤＢファイルまたはログファイルの指定された領域が割り当てられているが、係る例に限定されない。例えば、１つの更新用のサブスレッドに割り当てられるＤＢファイルの領域の更新量を予め定めて、当該更新量を超えた場合に、更新用のサブスレッドにＤＢファイルの他の領域を割り当てるようにしてもよい。これにより、ＤＢファイルまたはログファイルの所定の領域について、一定の更新量を超えないようにすることができる。
【００５６】
スレッド間データ受け渡しキュー２３は、サブスレッド間で受け渡しされるデータが格納されるキューであって、図９に示すように、データの受け渡し元であるサブスレッド（Ｆｒｏｍスレッド＃）２３１と、データの受け渡し先であるサブスレッド（Ｔｏスレッド＃）２３２と、受け渡すデータのレコード値２３３が対応付けられて格納される。
【００５７】
ＤＢ検索プログラム１８は、検索用サブスレッドを実行させてデータベースを検索した結果をスレッド間データ受け渡しキュー２３に格納し、ＤＢ更新プログラム１９は、スレッド間データ受け渡しキュー２３を参照して、指定された更新用サブスレッドを実行させてデータベースを更新する。
【００５８】
例えば図９では、参照用のサブスレッドＳ１ａから、更新用のサブスレッドＳ１ｃにレコード値ｘｘｘｘが受け渡されることがわかる。すなわち、ＤＢ検索プログラム１８によって参照用サブスレッドＳ１ａが実行された結果がスレッド間データ受け渡しキュー２３に格納され、ＤＢ更新プログラム１９によって、更新用サブスレッドＳ１ｃが実行されることがわかる。
【００５９】
また、複数の更新用サブスレッドを並列に実行させる場合には、各更新用サブスレッドに対応するスレッド間データ受け渡しキュー２３の更新要求の数に基づいて、ＤＢファイルまたはログファイルへの更新要求を実行するようにしてもよい例えば、更新要求の数が少ない更新用サブスレッドを優先して実行させるようにしてもよい。
【００６０】
（３）共有リソース更新処理
次に、図１０〜図１８を参照して、ホスト計算機１における共有リソース更新処理について説明する。以下では、各種処理の処理主体を「プログラム」として説明するが、実際には、そのプログラムに基づいてホスト計算機１のＣＰＵがその処理を実行することは言うまでもない。
【００６１】
まず、図１０を参照して、スレッド割当てプログラム１５によるスレッド割当て処理について説明する。スレッド割当て処理では、ＯＳにより管理されるスレッドを生成し、さらに、当該スレッドを疑似的に細分化してサブスレッドを生成する。
【００６２】
図１０に示すように、スレッド割当てプログラム１５は、クエリ実行定義を受け取る（Ｓ１０１）。ステップＳ１０１で受け取るクエリ実行定義は、ＳＱＬなどにより検索用サブスレッドの生成数が定義されたクエリを受け取る。検索用サブスレッドの生成数は、予めユーザ入力により設定されてクエリに指定される。クエリ実行定義で指定される検索用サブスレッドの生成数は、例えば、検索用サブスレッドの生成数の最大数や最小数が指定されてもよい。
【００６３】
スレッド割当てプログラム１５は、ホスト計算機１のＯＳからホスト計算機１のＣＰＵの数を取得して（Ｓ１０２）、ステップＳ１０３〜ステップＳ１０９までの処理をＣＰＵの個数分実行する（Ｓ１０３）。
【００６４】
スレッド割当てプログラム１５は、ホスト計算機１のＯＳに管理されるスレッドを生成して（Ｓ１０４）、生成したスレッドを当該スレッドに対応するＣＰＵに割り当てる（Ｓ１０５）。ステップＳ１０５において、いずれのＣＰＵにスレッドを割当てるかは、ホスト計算機１のＯＳにより決定される。
【００６５】
そして、スレッド割当てプログラム１５は、検索用サブスレッドの生成数を計算する（Ｓ１０６）。図１１を参照して、検索用サブスレッドの生成数の計算処理の詳細について説明する。
【００６６】
図１１に示すように、スレッド割当てプログラム１５は、ホスト計算機１のＯＳからコアの入出力帯域を取得する（Ｓ１２１）。さらに、スレッド割当てプログラム１５は、コアの入出力平均応答時間を取得し（Ｓ１２２）、平均入出力長を取得する（Ｓ１２３）。
【００６７】
そして、スレッド割当てプログラム１５は、コア当りの検索用疑似スレッド数を算出する（Ｓ１２４）。具体的に、スレッド割当てプログラム１５は、以下の式（１）によりコア当りの検索用サブスレッド数を算出する。
【００６８】
検索用サブスレッド数＝コア入出力帯域（Hz）／（入出力平均応答時間（h）×平均入出力長（byte）−１・・・（１）
【００６９】
上記では、１つのコアに対して１つのスレッドが割り当てられた場合の、コア当りの検索用サブスレッド数を算出している。また、スレッド内で疑似的に分割される複数のサブスレッドのうちの１つを更新用サブスレッドとして割り当てている。例えば、１つのコアに対してｎ個のスレッドが割り当てられた場合には、式（２）により１つのスレッド当たりの検索用サブスレッド数を算出する。
【００７０】
検索用サブスレッド数＝（コア入出力帯域（Hz）／（入出力平均応答時間（h）×平均入出力長（byte）−ｎ）／ｎ・・・（２）
【００７１】
また、上記ではスレッド内のサブスレッドのうちの１つを更新用サブスレッドとしているが、複数のサブスレッドを更新用サブスレッドとしてもよい。
【００７２】
図１０に戻り、スレッド割当てプログラム１５は、更新用サブスレッドを生成する（Ｓ１０７）。具体的に、スレッド割当てプログラム１５は、１つのスレッドに対して１つの更新用サブスレッドを生成する。また、スレッド割当てプログラム１５は、生成した更新用サブスレッドの情報をスレッド管理テーブル２２に設定する。
【００７３】
続いて、スレッド割当てプログラム１５は、ステップＳ１０６で算出した数分の検索用サブスレッドを生成する（Ｓ１０８、Ｓ１０９）。また、スレッド割当てプログラム１５は、生成した検索用サブスレッドの情報をスレッド管理テーブル２２に設定する。したがって、ステップＳ１０７〜ステップＳ１０９のサブスレッド生成処理により、スレッド管理テーブル２２に、ＣＰＵ番号、スレッド番号、サブスレッド番号、及び、当該サブスレッドが検索用（参照）か更新用（更新）かの情報が対応付けられることとなる。
【００７４】
そして、スレッド割当てプログラム１５は、ホスト計算機１のＯＳにサブスレッドを生成したことを通知して、スレッドの実行を開始させる（Ｓ１１０）。
【００７５】
次に、図１２〜図１５を参照して、リソース割当てプログラム１６によるリソース割当て処理について説明する。リソース割当て処理では、上記スレッド割当て処理により生成されたサブスレッドにストレージ装置２のリソースを割り当てる。
【００７６】
図１２に示すように、リソース割当てプログラム１６は、リソースを割り当てるサブスレッドの番号を受け取る（Ｓ２０１）。ステップＳ２０１において、リソース割当てプログラム１６は、スレッド割当てプログラム１５から生成されたサブスレッドの番号を受け取る。
【００７７】
リソース割当てプログラム１６は、スレッド管理テーブル２２を参照して、ステップＳ２０１で受け取ったサブスレッドの番号に対応するサブスレッドの種別が参照か更新かを判定する（Ｓ２０２）。
【００７８】
ステップＳ２０２において、サブスレッドの種別が参照であると判定された場合には、リソース割当てプログラム１６は、参照用ＤＢ領域割当て処理を実行する（Ｓ２０３）。
【００７９】
一方、ステップＳ２０２において、サブスレッドの種別が更新であると判定された場合には、リソース割当てプログラム１６は、更新用ＤＢ領域割当て処理（Ｓ２０４）及びログ領域割当て処理（Ｓ２０５）を実行する。
【００８０】
ステップＳ２０３〜ステップＳ２０５におけるリソース割当て処理の詳細について説明する。図１３は、ステップＳ２０３における参照用ＤＢ領域割当て処理の詳細である。参照用ＤＢ領域割当て処理では、検索用に割り当てられているサブスレッドにＤＢ領域のうちの参照用の領域を割り当てる。
【００８１】
図１３に示すように、リソース割当てプログラム１６は、スレッド管理テーブル２２の該当サブスレッドに割り当てられている最大ＤＢ領域番号を取得する（Ｓ２１１）。ステップＳ２１１で取得するサブスレッドに割り当てられている最大ＤＢ領域番号とは、ＯＳで管理される１つのスレッドに割り当てられているＤＢ領域の最大ＤＢ領域番号を意味する。
【００８２】
例えば、ＳＱＬなどでファイル名が定義されている場合に、ホスト計算機１のＯＳは、当該ファイルの使用状態とスレッドの起動状態を把握し、当該ファイルを起動しているスレッド数で除算して、１つのスレッドに割り当てられたＤＢファイルの領域を算出する。この１つのスレッドに割り当てられたＤＢファイルの最大ＤＢ領域番号がステップＳ２１１で取得される。
【００８３】
そして、リソース割当てプログラム１６は、検索用サブスレッドに割り当てるＤＢファイルの番号及びページ番号を計算する（Ｓ２１２）。具体的に、リソース割当てプログラム１６は、スレッド割当て処理により算出したサブスレッドの数で１つのスレッドに割り当てられたＤＢ領域を分割して、分割されたＤＢ領域のＤＢファイルの番号及びページ番号を計算する。
【００８４】
そして、リソース割当てプログラム１６は、ステップＳ２１２で計算したＤＢファイルのページ番号が、ＤＢ領域管理テーブル２０の対応するＤＢファイルの最大使用ページ番号より大きいかを判定する（Ｓ２１３）。
【００８５】
ステップＳ２１３において、ステップＳ２１２で計算してＤＢファイルのページ番号がＤＢ領域管理テーブル２０の最大使用ページ番号より大きい場合には、当該ＤＢファイルに割り当てる領域がないことを意味する。したがって、リソース管理プログラム１６は、ステップＳ２１２で計算したＤＢファイルのページ番号が、ＤＢ領域管理テーブル２０の対応するＤＢファイルの最大使用ページ番号より大きい場合には、次に割当て可能なＤＢファイルがあるかを判定する（Ｓ２１４）。
【００８６】
一方、ステップＳ２１３において、ステップＳ２１２で計算したＤＢファイルのページ番号が、ＤＢ領域管理テーブル２０の対応するＤＢファイルの最大使用ページ番号より小さい場合には、リソース割当てプログラム１６は、当該ＤＢファイルの次のページ番号を検索用サブスレッドに割り当てるページ番号とする（Ｓ２１６）。
【００８７】
ステップＳ２１４において、次に割当て可能なＤＢファイルがあると判定された場合には、リソース割当てプログラム１６は、次のＤＢファイルのページ番号を検索用サブスレッドに割り当てるページ番号とする（Ｓ２１５）。
【００８８】
そして、リソース割当てプログラム１６は、スレッド管理テーブル２２のＤＢ領域を割り当てた検索用サブスレッドのＤＢ領域２２５に、ステップＳ２１５またはステップＳ２１６で割り当てたページ番号に該当するＤＢ領域番号を設定する（Ｓ２１７）。
【００８９】
一方、ステップＳ２１４において、次に割当て可能なＤＢファイルがないと判定された場合には、リソース割当てプログラム１６は、スレッド管理テーブルのＤＢ領域番号の値をクリアする（Ｓ２１８）。
【００９０】
次に、図１４を参照して、ステップＳ２０４における更新用ＤＢ領域割当て処理の詳細について説明する。更新用ＤＢ領域割当て処理では、更新用に割り当てられているサブスレッドにＤＢ領域のうちの更新用のＤＢ領域を割り当てる。
【００９１】
図１４に示すように、リソース割当てプログラム１６は、スレッド管理テーブル２２の該当サブスレッドに割り当てられている最大ＤＢ領域番号を取得する（Ｓ２２１）。ステップＳ２２１で取得するサブスレッドに割り当てられている最大ＤＢ領域番号とは、ＯＳで管理される１つのスレッドに割り当てられているＤＢ領域の最大ＤＢ領域番号を意味する。
【００９２】
そして、リソース割当てプログラム１６は、更新用サブスレッドに割り当てるＤＢファイルの番号及びページ番号を計算する（Ｓ２２２）。具体的に、ソース割当てプログラム１６は、スレッド割当て処理により算出したサブスレッドの数で１つのスレッドに割り当てられたＤＢ領域を分割して、分割されたＤＢ領域のＤＢファイルの番号及びページ番号を計算する。
【００９３】
そして、リソース割当てプログラム１６は、ステップＳ２２１で取得した最大ＤＢ領域番号に、更新用サブスレッドに割り当てたＤＢ領域に対応する領域番号Ｎを足す。これにより、他の更新用サブスレッドにＤＢ領域が割り当てられる場合に、最大領域番号にＮを足した領域番号のＤＢ領域が割り当てられるため、ステップＳ２２２で計算されたＤＢ領域に他の更新用サブスレッドを割当てないようにすることができる。
【００９４】
そして、リソース割当てプログラム１６は、ステップＳ２２２で計算したＤＢファイルのページ番号が、ＤＢ領域管理テーブル２０の対応するＤＢファイルの最大使用ページ番号より大きいかを判定する（Ｓ２２３）。
【００９５】
ステップＳ２２３において、ステップＳ２２２で計算してＤＢファイルのページ番号がＤＢ領域管理テーブル２０の最大使用ページ番号より大きい場合には、当該ＤＢファイルに割り当てる領域がないことを意味する。したがって、リソース管理プログラム１６は、ステップＳ２２２で計算したＤＢファイルのページ番号が、ＤＢ領域管理テーブル２０の対応するＤＢファイルの最大使用ページ番号より大きい場合には、次に割当て可能なＤＢファイルがあるかを判定する（Ｓ２２４）。
【００９６】
一方、ステップＳ２２３において、ステップＳ２１２で計算したＤＢファイルのページ番号が、ＤＢ領域管理テーブル２０の対応するＤＢファイルの最大使用ページ番号より小さい場合には、リソース割当てプログラム１６は、当該ＤＢファイルの次のページ番号を更新用サブスレッドに割り当てるページ番号とする（Ｓ２２６）。
【００９７】
ステップＳ２２４において、次に割当て可能なＤＢファイルがあると判定された場合には、リソース割当てプログラム１６は、次のＤＢファイルのページ番号を更新用サブスレッドに割り当てるページ番号とする（Ｓ２２５）。
【００９８】
そして、リソース割当てプログラム１６は、スレッド管理テーブル２２のＤＢ領域を割り当てた更新用サブスレッドのＤＢ領域２２５に、ステップＳ２１５またはステップＳ２１６で割り当てたページ番号に該当するＤＢ領域番号を設定する（Ｓ２２７）。
【００９９】
一方、ステップＳ２２４において、次に割当て可能なＤＢファイルがないと判定された場合には、リソース割当てプログラム１６は、スレッド管理テーブルのＤＢ領域番号の値をクリアする（Ｓ２２８）。
【０１００】
次に、図１５を参照して、ステップＳ２０５におけるログ領域割当て処理の詳細について説明する。ログ領域割当て処理では、更新用に割り当てられているサブスレッドにＤＢ領域のうちのログ用のＤＢ領域を割り当てる。
【０１０１】
図１５に示すように、リソース割当てプログラム１６は、スレッド管理テーブル２２の該当サブスレッドに割り当てられている最大ログ領域番号を取得する（Ｓ２３１）。ステップＳ２３１で取得するサブスレッドに割り当てられている最大ログ領域番号とは、ＯＳで管理される１つのスレッドに割り当てられているログ領域の最大ログ領域番号を意味する。
【０１０２】
そして、リソース割当てプログラム１６は、更新用サブスレッドに割り当てるログファイルの番号及びページ番号を計算する（Ｓ２３２）。具体的に、スレッド割当て処理により算出したサブスレッドの数で１つのスレッドに割り当てられたログ領域を分割して、分割されたログ領域のログファイルの番号及びページ番号を計算する。
【０１０３】
そして、リソース割当てプログラム１６は、ステップＳ２３１で取得した最大ログ領域番号に、更新用サブスレッドに割り当てたログ領域に対応する領域番号Ｍを足す。これにより、他の更新用サブスレッドにログ領域を割り当てる場合に、最大領域番号にＭを足した領域番号のログ領域が割り当てられるため、ステップＳ２３２で計算されたログ領域に他の更新用サブスレッドを割当てないようにすることができる。
【０１０４】
そして、リソース割当てプログラム１６は、ステップＳ２３２で計算したログファイルのページ番号が、ログ領域管理テーブル２１の対応するログファイルの最大使用ページ番号より大きいかを判定する（Ｓ２３３）。
【０１０５】
ステップＳ２３３において、ステップＳ２１２で計算してログファイルのページ番号がログ領域管理テーブル２１の最大使用ページ番号より大きい場合には、当該ログファイルに割り当てる領域がないことを意味する。したがって、リソース管理プログラム１６は、ステップＳ２３２で計算したログファイルのページ番号が、ログ領域管理テーブル２１の対応するログファイルの最大使用ページ番号より大きい場合には、次に割当て可能なログファイルがあるかを判定する（Ｓ２３４）。
【０１０６】
一方、ステップＳ２３３において、ステップＳ２３２で計算したログファイルのページ番号が、ログ領域管理テーブル２１の対応するログファイルの最大使用ページ番号より小さい場合には、リソース割当てプログラム１６は、当該ログファイルの次のページ番号を更新用サブスレッドに割り当てるページ番号とする（Ｓ２３６）。
【０１０７】
ステップＳ２３４において、次に割当て可能なログファイルがあると判定された場合には、リソース割当てプログラム１６は、次のログファイルのページ番号を更新用サブスレッドに割り当てるページ番号とする（Ｓ２３５）。
【０１０８】
そして、リソース割当てプログラム１６は、ログ領域管理テーブル２１の対応するログファイルの最大使用ページ番号を割り当てた領域番号に更新する（Ｓ２３７）。
【０１０９】
そして、リソース割当てプログラム１６は、スレッド管理テーブル２２のログ領域を割り当てた更新用サブスレッドのログ領域２２６に、ステップＳ２３５またはステップＳ２３６で割り当てたページ番号に該当するＤＢ領域番号を設定する（Ｓ２３８）。
【０１１０】
一方、ステップＳ２３４において、次に割当て可能なログファイルがないと判定された場合には、リソース管理プログラム１６は、スレッド管理テーブル２２のログ領域番号の値をクリアする（Ｓ２３９）。
【０１１１】
上記ログ領域割当て処理では、ログ領域にログデータを追記しているが、かかる例に限定されず、ログ領域にログデータを上書きするようにしてもよい。
【０１１２】
次に、図１６を参照して、サブスレッド実行制御プログラム１７によるサブスレッド実行制御処理について説明する。サブスレッド実行制御処理は、ホスト計算機１のＯＳの制御のもとスレッドが実行されて、当該スレッドに対応付けられたサブスレッドの実行を制御する処理である。
【０１１３】
以下に説明するサブスレッドの実行処理では、スレッド間データ受け渡しキュー２３に所定量の更新対象のキューがある場合には更新用サブスレッドを実行させて更新処理を実行し、スレッド間データ受け渡しキュー２３に更新対象のキューがない場合には、検索用サブスレッドを実行させて検索処理を実行する。上記したように、更新用サブスレッド及び検索用サブスレッドは、それぞれ特定のＤＢ領域またはログ領域に対応付けられているため、サブスレッドによる更新処理または検索処理を並行して実行させることができる。
【０１１４】
図１６に示すように、サブスレッド実行制御プログラム１７は、ホスト計算機１のＯＳから実行するスレッドの番号を取得し、当該スレッドに対応するスレッド間データ受け渡しキュー２３の情報を取得する（Ｓ３０１）。
【０１１５】
そして、サブスレッド実行制御プログラム１７は、ステップＳ３０１で取得したスレッド間データ受け渡しキュー２３の残量が所定の閾値以上かを判定する（Ｓ３０２）。
【０１１６】
ステップＳ３０２において、スレッド間データ受け渡しキュー２３の残量が所定の閾値以上であると判定された場合には、サブスレッド実行制御プログラム１７は、データ更新用サブスレッドを実行する（Ｓ３０３）。具体的に、スレッド間データ受け渡しキュー２３のＴｏスレッド番号に対応するデータ更新用サブスレッドを実行して、スレッド間データ受け渡しキュー２３のレコード値で、実行するデータ更新サブスレッドに対応付けられたＤＢ領域またはログ領域を更新する。
【０１１７】
そして、サブスレッド実行制御プログラム１７は、スレッド間データ受け渡しキュー２３の更新処理が終了かを判定して（Ｓ３１１）、更新が終了していない場合には、ステップＳ３０１以降の処理を繰り返す。一方、ステップＳ３１１において、更新処理が終了したと判定された場合には、サブスレッド実行制御プログラム１７は、処理を終了する。
【０１１８】
一方、ステップＳ３０２において、スレッド間データ受け渡しキュー２３の残量が所定の閾値より小さいと判定された場合には、サブスレッド実行制御プログラム１７は、検索用サブスレッドによる検索処理が終了したかを判定する（Ｓ３０４）。
【０１１９】
ステップＳ３０４において、検索用サブスレッドによる検索処理が終了していると判定された場合には、サブスレッド実行制御プログラム１７は、ステップＳ３０３のデータ更新用サブスレッドの実行処理を行う。
【０１２０】
一方、ステップＳ３０４において、検索用サブスレッドによる検索処理が終了していないと判定された場合には、サブスレッド実行制御プログラム１７は、優先して検索するデータがあるかを判定する（Ｓ３０５）。
【０１２１】
ステップＳ３０５において、優先して検索するデータがあると判定された場合には、サブスレッド実行制御プログラム１７は、当該優先データの検索処理を担当するサブスレッドを選択する（Ｓ３０７）。一方、ステップＳ３０５において、優先して検索するデータがないと判定された場合には、サブスレッド実行制御プログラム１７は、ＤＢ領域が設定された検索用サブスレッドのうち、キューの残量が最も少ない検索用サブスレッドを選択する（Ｓ３０６）。
【０１２２】
そして、サブスレッド実行制御プログラム１７は、サブスレッドが選択されたかを判定して（Ｓ３０８）、サブスレッドが選択されている場合には、当該検索用サブスレッドを実行して（Ｓ３０９）、ステップＳ３０１以降の処理を繰り返す。一方、ステップＳ３０８において、サブスレッドが選択されなかった場合には、サブスレッド実行制御プログラム１７は、検索終了フラグをＯＮにして、ステップＳ３０１以降の処理を繰り返す。
【０１２３】
次に、図１７を参照して、ＤＢ検索プログラム１８によるＤＢ検索処理について説明する。ＤＢ検索処理は、上記したリソース割当て処理により、リソースが割り当てられた検索用サブスレッドについて、サブスレッド実行制御プログラム１７が当該検索用サブスレッドを選択することにより開始される処理である。
【０１２４】
図１７に示すように、ＤＢ検索プログラム１８は、実行対象の検索用サブスレッドに割り当て済みのＤＢ領域内のページ数分、ステップＳ４０２〜ステップＳ４０５の処理を繰り返す（Ｓ４０１）。
【０１２５】
ＤＢ検索プログラム１８は、実行対象の検索用サブスレッドに割り当てられたＤＢ領域のＤＢページから検索条件に合致するレコードを取得する（Ｓ４０２）。ステップＳ４０２で取得したレコードが入出力待ちとなる場合には、検索用サブスレッドの実行を中断する（Ｓ４０３）。
【０１２６】
そして、ＤＢ検索プログラム１８は、ステップＳ４０２で取得したレコードをスレッド間データ受け渡しキュー２３に登録する（Ｓ４０４）。具体的に、ＤＢ検索プログラム１８は、スレッド間データ受け渡しキュー２３のＦｒｏｍスレッド番号２３１に実行した検索用サブスレッドの番号を登録し、Ｔｏスレッド番号２３２に当該検索用サブスレッドと同じスレッド内で実行する更新用サブスレッドの番号を登録し、レコード値２３３にステップＳ４０２で取得したレコード値を登録する。
【０１２７】
ＤＢ検索プログラム１８は、当該検索用サブスレッドの実行が開始されてから一定サイクルが経過した場合には、当該検索用サブスレッドの実行を中断する（Ｓ４０５）。ステップＳ４０５の中断処理により、１つのスレッド内で、１つの検索用サブスレッドの検索処理が長時間実行されて、他の検索用サブスレッドが実行されずに待ち状態が継続することを避けることができる。
【０１２８】
次に、図１８を参照して、ＤＢ更新プログラム１９によるＤＢ更新処理について説明する。ＤＢ更新処理は、上記したＤＢ検索処理によりスレッド間データ受け渡しキュー２３に登録されたキューのレコードに対応するデータを更新する処理である。
【０１２９】
図１８に示すように、ＤＢ更新プログラム１９は、スレッド間データ受け渡しキュー２３が空かを判定する（Ｓ４１１）。ステップＳ４１１において、スレッド間データ受け渡しキュー２３が空である場合には、ＤＢ更新プログラム１９は、処理を終了する。
【０１３０】
一方、ステップＳ４１１において、スレッド間データ受け渡しキュー２３が空ではないと判定された場合には、ＤＢ更新プログラム１９は、スレッド間データ受け渡しキュー２３からレコードを取得する（Ｓ４１２）。
【０１３１】
そして、ＤＢ更新プログラム１９は、実行している更新用サブスレッドに対応付けられた更新用ＤＢ領域に、空きがあるかを判定する（Ｓ４１３）。
【０１３２】
ステップＳ４１３において、更新用ＤＢ領域に空きがあると判定された場合には、ステップＳ４１６の処理を実行する。一方、ステップＳ４１３において、更新用ＤＢ領域に空きがないと判定された場合には、上記したリソース割当てプログラム１６を呼び出して、更新用サブスレッドに新たな更新用ＤＢ領域の割当てる（Ｓ４１４）。
【０１３３】
ステップＳ４１４の割り当て処理が成功した場合には（Ｓ４１５）、ＤＢ更新プログラム１９は、ステップＳ４１６の処理を実行する。一方、ステップＳ４１４の割り当て処理が成功しなかった場合には（Ｓ４１５）、ＤＢ更新プログラム１９は、処理を終了する。
【０１３４】
ステップＳ４１６において、ＤＢ更新プログラム１９は、実行している更新用サブスレッドに対応付けられたログ領域に空きがあるかを判定する（Ｓ４１６）。
【０１３５】
ステップＳ４１６において、ログ領域に空きがあると判定された場合には、ステップＳ４１８の処理を実行する。一方、ステップＳ４１６において、ログ領域に空きがないと判定された場合には、上記したリソース割当てプログラム１６を呼び出して、更新用サブスレッドに新たなログ領域の割当てる（Ｓ４１７）。
【０１３６】
ステップＳ４１８において、ＤＢ更新プログラム１９は、ログを更新用サブスレッドに対応付けられたログファイルに出力する（Ｓ４１８）。ＤＢ更新プログラム１９は、ログのログファイルへの出力処理が入出力待ちとなる場合には、当該更新用サブスレッドの実行を中断する（Ｓ４１９）。
【０１３７】
続いて、ＤＢ更新プログラム１９は、更新用サブスレッドに対応付けられたＤＢページを更新する（Ｓ４２０）。ＤＢ更新プログラム１０は、更新対象となるＤＢファイルへの出力処理が入出力待ちとなる場合には、当該更新用サブスレッドの実行を中断する（Ｓ４２１）。ＤＢ更新プログラム１９は、更新対象となるＤＢファイルへの更新が終了した後、ステップＳ４１１以降の処理を繰り返す。
【０１３８】
以上、ホスト計算機１における共有リソース更新処理について説明した。次に、管理端末８の管理画面９０について説明する。上記したホスト計算機１における共有リソース更新処理を実行するに際して、優先的に検索するデータや、検索用サブスレッド数を予め設定することができる。
【０１３９】
例えば、図１９に示す管理画面９０に、優先的に検索するデータの情報を入力させる入力フィールド９１や、検索用サブスレッドの指定数を入力させる入力フィールド９２を設ける。
【０１４０】
入力フィールド９１には、優先的に検索するデータの情報として、ＤＢファイル名やブロック番号などが入力される。また、入力フィールド９２には検索用サブスレッドの数が入力される。
【０１４１】
（４）本実施の形態の効果
上記したように、本実施の形態によれば、ホスト計算機１のプロセッサは、複数のスレッドで構成されるプログラムの実行を制御して、複数のスレッドに対応付けられる複数の領域を有する共有リソースを更新する。具体的に、プロセッサは、複数のサブスレッドのうち少なくとも１つのサブスレッドを、当該サブスレッドに対応付けられた共有リソースの領域の更新を行う更新用サブスレッドとし、更新用サブスレッドと異なるサブスレッドを、共有リソースの更新の際に更新用サブスレッドに更新要求を送付し、共有リソースの参照の際に共有リソースを直接参照する検索用サブスレッドとする。これにより、更新が行われる共有リソースを各サブスレッド間で論理的に分割して、複数のコア間で並列に更新処理を行うことにより、更新処理性能を高めることができる。
【符号の説明】
【０１４２】
１      ホスト計算機
２      ストレージ装置
３      データネットワーク
４      論理ディスク
５      論理ボリューム
６      ＤＢファイル
７      ログファイル
８      管理端末
【図１】
2015162705.tif 000003
【図２】
2015162705.tif 000004
【図３】
2015162705.tif 000005
【図４】
2015162705.tif 000006
【図５】
2015162705.tif 000007
【図６】
2015162705.tif 000008
【図７】
2015162705.tif 000009
【図８】
2015162705.tif 000010
【図９】
2015162705.tif 000011
【図１０】
2015162705.tif 000012
【図１１】
2015162705.tif 000013
【図１２】
2015162705.tif 000014
【図１３】
2015162705.tif 000015
【図１４】
2015162705.tif 000016
【図１５】
2015162705.tif 000017
【図１６】
2015162705.tif 000018
【図１７】
2015162705.tif 000019
【図１８】
2015162705.tif 000020
【図１９】
2015162705.tif 000021
【国際調査報告】
2015162705.tif 000022
2015162705.tif 000023
2015162705.tif 000024