(58)【調査した分野】(Int.Cl.,DB名)
複数のスレッドで構成されるプログラムの実行を制御し、前記複数のスレッドに対応付けられる複数の領域を有する共有リソースの更新を行う共有リソース更新装置における共有リソース更新方法であって、
前記複数のスレッドのうちの1つのスレッドに含まれる少なくとも1つの更新スレッド及び複数の参照スレッドが含まれ、前記更新スレッドと前記更新スレッドの更新対象となる前記共有リソースの領域とが対応付けられており、
前記参照スレッドが、前記共有リソースの更新の際に前記更新スレッドに更新要求を送付するステップと、
前記参照スレッドが、前記共有リソースの参照の際に前記共有リソースを直接参照する参照スレッドとするステップと、
前記更新スレッドが、前記送付された更新要求をデータ受け渡しキューに格納するステップと、
前記更新スレッドが、前記データ受け渡しキューに格納された順序に従って、前記共有リソースの領域を更新するステップと、
を含むことを特徴とする、共有リソース更新方法。
前記共有リソースを共有し、前記複数のスレッドを並列に処理する複数のコアと、前記複数のコアに実行させる複数のスレッドの1つのスレッドと、前記更新スレッドまたは前記参照スレッドとが対応付けられている
ことを特徴とする、請求項5に記載の共有リソース更新方法。
前記更新スレッドと、前記更新スレッドの更新対象となる前記共有リソースの領域とが対応付けられ、前記参照スレッドと、前記参照スレッドの参照対象となる前記共有リソースの領域とが対応付けられている
ことを特徴とする、請求項7に記載のリソース更新方法。
【発明を実施するための形態】
【0012】
以下図面について、本発明の一実施の形態を詳述する。
【0013】
(1)共有リソース更新システムの構成
まず、
図1を参照して、共有リソース更新システムの構成について説明する。
図1に示すように、共有リソース更新システムは、ホスト計算機1と、ストレージ装置2と、管理端末8とが、データネットワーク3を介して相互に接続されている。
【0014】
なお、
図1では、各装置はデータネットワーク3に1台ずつ接続されているが、かかる例に限定されず、複数台接続されていてもよい。また、データネットワーク3に業務システム等を利用するユーザが利用するクライアント端末(図示せず)が接続されていてもよい。
【0015】
ホスト計算機1は、CPU(Central Processing Unit)およびメモリ等の情報処理資源を備えたコンピュータ装置であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。CPUは、演算処理装置として機能し、メモリに記憶されているプログラムや演算パラメータ等にしたがって、ホスト計算機1の動作を制御する。なお、ホスト計算機1は、本発明の共有リソース更新装置の一例である。
【0016】
また、ホスト計算機1は、複数のCPU(プロセッサパッケージ、以下プロセッサパッケージを単にプロセッサと称して説明する場合もある。)内に複数のプロセッサコア(コア)を収めて、並列処理によって性能を向上させるマルチコアプロセッサシステムを利用している。マルチコアプロセッサシステムは、プロセッサに搭載された複数のコア間でハードウェア資源であるリソースを共有し、複数のスレッドを並列に処理するコンピュータシステムである。
【0017】
また、ホスト計算機1は、I/F−Aを介してデータネットワーク3と接続される。I/F−Aは、データネットワーク3を介して、ホスト計算機1と外部装置とのデータ入出力を制御し、例えば、モデムやLANアダプタなどを例示できる。
【0018】
ストレージ装置2は、ホスト計算機1から送信されたコマンドを解釈して、ストレージ装置2の記憶領域内へのリード/ライトを実行する。ストレージ装置2が提供する記憶領域は、複数の物理ディスク4から構成される。
【0019】
ストレージ装置2は、複数の物理ディスク4から構成される記憶領域上に1または複数の論理ボリューム5a、5b(以降、論理ボリューム5a、5bを単に論理ボリューム5と称して説明する場合もある。)を定義する。各論理ボリューム5には、データベースファイル(図中DBファイルと表記)6a、6b(以降、単にDBファイル6と称して説明する場合もある。)や、ログファイル7a、7b(以降、単にログファイル7と称して説明する場合もある。)などが含まれる。
【0020】
また、ストレージ装置2は、I/F−Bを介してデータネットワーク3と接続される。I/F−Bは、データネットワーク3を介して、ストレージ装置2と外部装置とのデータ入出力を制御し、例えば、モデムやLANアダプタなどを例示できる。
【0021】
管理端末8は、CPUおよびメモリ等の情報処理資源を備えたコンピュータ装置であって、オペレータ等の入力に応じてホスト計算機1やストレージ装置2を管理するコンピュータ装置である。管理端末8は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の入力装置と、モニタディスプレイやスピーカ等の出力装置とを備えている。
【0022】
また、管理端末8は、I/F−Cを介してデータネットワーク3と接続される。I/F−Cは、データネットワーク3を介して、管理端末8と外部装置とのデータ入出力を制御し、例えば、モデムやLANアダプタなどを例示できる。
【0023】
(2)ホスト計算機の構成
次に、
図2を参照して、本発明の共有リソース更新装置の一例であるホスト計算機1の詳細な構成について説明する。
図2に示すように、ホスト計算機1は、複数のプロセッサP1、P2、P3及びP4を備え、各プロセッサにメモリM1、M2、M3及びM4が対応付けられている。
【0024】
また、各プロセッサP1、P2、P3及びP4は、それぞれ、対応するメモリM1、M2、M3及びM4とバス等で接続され、プロセッサP1〜P4は、対応するメモリM1〜M4に記憶されている各種プログラムを実行して、適宜変化するパラメータを記憶したり、ストレージ装置2に記憶する各種データを一時的に記憶したりする。
【0025】
各プロセッサP1〜P4のそれぞれには、複数のコアが搭載されており、各プロセッサは、複数のコアを並列に起動させて、複数のスレッドを並列に処理させる。各プロセッサP1〜P4は、IF−A1〜A4を介してデータネットワーク3に接続されているストレージ装置2とデータの送受信を行う。
【0026】
メモリM1には、DBバッファ13a、ログバッファ14a、データベース管理プログラム10a、管理データ11a及びスレッド状態12aなどが含まれる。なお、メモリM2〜M4もメモリM1と同様の構成のため、以下では、メモリM1の構成について詳細に説明する。
【0027】
DBバッファ13aは、ストレージ装置2のDBファイル6に書き込むデータを一時的に記憶する領域である。また、ログバッファ14aは、ストレージ装置2のログファイル7に書き込むデータを一時的に記憶する領域である。
【0028】
データベース管理プログラム10aは、データベース(DBファイル6)に対する検索処理や更新処理を制御するプログラムである。データベース管理プログラム10aについては、後で詳細に説明する。管理データ11aは、データベース管理プログラム10がデータベース領域(DBファイル6)やログ領域(ログファイル7)やスレッドなどを管理するための情報である。管理データ11aについては、後で詳細に説明する。
【0029】
スレッド状態12aには、プロセッサP1の各コアによって実行されているスレッドの状態情報が格納されている。
図3を参照して、スレッド状態12について説明する。
【0030】
図3では、プロセッサP1のうち、コアC11により実行されるスレッドの状態について説明する。
図3では、プロセッサP1のコアC11について説明するが、プロセッサP1内の他のコア及び他のプロセッサ内の各コアもコアC11でも同様の処理が実行される。
【0031】
図3では、ホスト計算機1のハードウェアを管理するOS(Operating System)によって管理されているスレッドをスレッドT11a、T11b及びT11cとしている。そして、ユーザプログラムであるデータベース管理プログラム10によって、1つのスレッドを疑似的に細分化して管理されているスレッドをサブスレッドU11a1、U11a2、U11a3及びU11a4としている。
【0032】
スレッドT11a、T11b及びT11cは、コアC11によって実行され、コアC11に対応付けられているDBファイル6aまたはログファイル7aに対してデータのリード/ライトが実行される。
【0033】
上記したように、1つのスレッドは、複数のサブスレッドに疑似的に細分化されて管理され、例えば、スレッドT11aが実行されると、複数の検索用サブスレッドU11a1、U11a2及びU11a3と、更新用サブスレッドU11a4が実行される。
【0034】
例えば、OSからコアC11に対して、DBファイル6aまたはログファイル7aのある領域の更新が指示されたとする。この場合、検索用サブスレッドU11a1、U11a2またはU11a3のいずれかが更新対象となる領域を検索して、更新用サブスレッドU11a4に更新を要求する。更新を要求された更新用サブスレッドU11a4は、更新対象となるDBファイル6aまたはログファイル7aの指定された領域を更新する。
【0035】
各サブスレッドは、それぞれDBファイル6aまたはログファイル7aの特定の領域に対応付けられている。例えば、
図3では、検索用サブスレッドU11a1、U11a2またはU11a3のいずれかが、領域6a4、6a5または6a6のいずれかに対応付けられている。また、更新用サブスレッドU11a4は、領域6a1に対応付けられている。同様に、領域6a2及び領域7a2は、スレッドT11bの更新用サブスレッドに対応付けられている。
【0036】
このように、本実施の形態では、各コアにより実行されるスレッドが疑似的に細分化され、各スレッドに記憶領域の特定の領域が対応付けられている。特に、各スレッド内の複数のサブスレッドのうち、更新を行うサブスレッドを1つに限定して、更新用サブスレッドに対して更新対象となる共有リソースを論理的に分割して対応付けている。これにより、複数のコア間で同一のリソースにアクセスする場合に、複数の更新用サブスレッド間で同一の領域にアクセスすることを回避することができるため、コア間で並列に更新処理を行って、更新処理性能をコア数に比例させて増加させることが可能となる。
【0037】
なお、上記更新用サブスレッドは、本発明の更新スレッドの一例であり、上記検索用サブスレッドは、本発明の参照スレッドの一例である。また、本実施の形態では、検索用サブスレッドも、更新用サブスレッドと同様に、1つの検索用サブスレッドにDBファイルの特定の領域が対応付けられているが、かかる例に限定されない。例えば、複数の検索用サブスレッドの検索対象となるDBファイルの領域が重複していてもよい。この場合、管理者等がDBファイルの構成を設計する際に、検索対象の領域を更新対象の領域としないように、DBファイルの特定の領域を検索対象の領域として指定する必要がある。
【0038】
次に、
図4〜
図9を参照して、ホスト計算機1のデータベース管理プログラム10及び管理データ11の詳細について説明する。
【0039】
図4に示すように、データベース管理プログラム10は、スレッド割当てプログラム15、リソース割当てプログラム16、サブスレッド実行制御プログラム17、DB検索プログラム18及びDB更新プログラム19などから構成される。
【0040】
スレッド割当てプログラム15は、SQL(Structured Query Language)等のクエリ実行定義をもとに、複数のCPU(コア)にスレッドを割り当てて、さらに、各スレッド内で疑似的に細分化されて実行される複数の検索用サブスレッド及び1つの更新用サブスレッドを生成するプログラムである。コア、スレッド及びサブスレッドの対応付けは、後述するスレッド管理テーブル22で管理される。
【0041】
リソース割当てプログラム16は、スレッド割当てプログラム15により生成されたサブスレッドにデータベースの特定の領域を割り当てるプログラムである。リソース割当てプログラム16により割り当てられたサブスレッドとデータベースの特定の領域との対応付けも、スレッド管理テーブル22で管理される。
【0042】
サブスレッド実行制御プログラム17は、コアに対応付けられたスレッドのスレッド間におけるデータの受け渡しキュー情報をもとに、いずれのサブスレッドを実行させるかを制御するプログラムである。
【0043】
DB検索プログラム18は、複数の検索用サブスレッドのいずれかの検索用サブスレッドを実行させて、各検索用サブスレッドに割り当て済みのDB領域から検索対象のレコードを取得するプログラムである。
【0044】
DB更新プログラム19は、検索用サブスレッドから提供される情報をもとに、更新用サブスレッドを実行させて、データベースの割り当て済みの領域を更新するプログラムである。
【0045】
次に、管理データ11について説明する。
図5に示すように、管理データ11は、DB領域管理テーブル20、ログ領域管理テーブル21、スレッド管理テーブル22及びスレッド間データ受け渡しキュー23を含む。
【0046】
DB領域管理テーブル20は、ストレージ装置2の複数の物理ディスク4の記憶領域を論理的に分割して、当該領域をDBファイルとして管理するためのテーブルである。
図6に示すように、DB領域管理テーブル20は、テーブルの項番201、DBファイル名202、最大使用ページ番号203及び最大ページ番号204から構成される。
【0047】
テーブルの項番201は、DB領域管理テーブル20のデータの項番である。DBファイル名202は、ストレージ装置2の複数の物理ディスク4の記憶領域であって、各コアに対応付けられるデータベースのファイル名称である。また、最大使用ページ番号203は、各DBファイルの領域のうち、使用されている領域の最大使用ページの番号である。また、最大ページ番号204は、各DBファイルの領域の最大ページの番号である。ここで、ページとは、データがリード/ライトされる物理ディスク4の領域の単位であって、論理ボリュームは複数のページで構成される。
【0048】
図6では、例えば、DBファイル6aの最大使用ページ番号は120で、最大ページ番号は1000であることがわかる。最大ページ番号が1000であることは、DBファイル6aが生成される際に決定される番号である。また、最大使用ページ番号が120であることは、データ更新処理などによりDBファイル6aが更新される際に更新される番号である。
【0049】
ログ領域管理テーブル211は、ストレージ装置2の複数の物理ディスク4の記憶領域を論理的に分割して、当該領域をログファイルとして管理するためのテーブルである。
図7に示すように、ログ領域管理テーブル21は、テーブルの項番211、ログファイル名212、最大使用ページ番号223及び最大ページ番号214から構成される。
【0050】
テーブルの項番211は、ログ領域管理テーブル21のデータの項番である。ログファイル名212は、ストレージ装置2の複数の物理ディスク4の記憶領域であって、各コアに対応付けられるログのファイル名称である。また、最大使用ページ番号213は、各ログファイルの領域のうち、使用されている領域の最大使用ページの番号である。また、最大ページ番号214は、各ログファイルの領域の最大ページの番号である。
【0051】
例えば、
図7では、ログファイル7aの最大使用ページ番号は10で、最大ページ番号は100であることがわかる。最大ページ番号が100であることは、ログファイル7aが生成される際に決定される番号である。また、最大使用ページ番号が10であることは、データ更新処理などによりログファイル7aが更新される際に更新される番号である。
【0052】
スレッド管理テーブル22は、ホスト計算機1のCPUにより実行されるスレッド及びサブスレッドを管理するテーブルであって、
図8に示すように、CPU番号(CPU#)221、スレッド番号(スレッド#)222、サブスレッド番号(サブスレッド#)223、種別224、DB領域225及びログ領域226から構成される。
【0053】
CPU番号221は、ホスト計算機1に搭載されているCPUを識別する番号である。スレッド番号222は、各CPUに対応付けられているスレッドを識別する番号である。サブスレッド番号223は、各スレッドを論理的に細分化されて管理されるサブスレッドを識別する番号である。種別224は、サブスレッドの種別を示し、例えば参照か更新かを示す情報である。DB領域225は、各サブスレッドが参照または更新するDBファイルの領域を特定する情報である。ログ領域226は、更新用のサブスレッドが更新するログファイルの領域を特定する情報である。
【0054】
例えば、
図8では、CPU番号がC1であるCPUにスレッドT1が割り当てられ、スレッドT1は参照用のサブスレッドS1a及びS1bと、更新用のサブスレッドS1cに細分化される。そして、参照用のサブスレッドS1aの参照対象となるDBファイルの領域は1−000であり、参照用のサブスレッドS1bの参照対象となるDBファイルの領域は1−020であり、更新用のサブスレッドS1cの更新対象となるDBファイルの領域は1−121であることがわかる。また、更新用のサブスレッドS1cの更新対象となるログファイルの領域は1−11であることがわかる。
【0055】
なお、
図8では、予め1つの更新用のサブスレッドにDBファイルまたはログファイルの指定された領域が割り当てられているが、係る例に限定されない。例えば、1つの更新用のサブスレッドに割り当てられるDBファイルの領域の更新量を予め定めて、当該更新量を超えた場合に、更新用のサブスレッドにDBファイルの他の領域を割り当てるようにしてもよい。これにより、DBファイルまたはログファイルの所定の領域について、一定の更新量を超えないようにすることができる。
【0056】
スレッド間データ受け渡しキュー23は、サブスレッド間で受け渡しされるデータが格納されるキューであって、
図9に示すように、データの受け渡し元であるサブスレッド(Fromスレッド#)231と、データの受け渡し先であるサブスレッド(Toスレッド#)232と、受け渡すデータのレコード値233が対応付けられて格納される。
【0057】
DB検索プログラム18は、検索用サブスレッドを実行させてデータベースを検索した結果をスレッド間データ受け渡しキュー23に格納し、DB更新プログラム19は、スレッド間データ受け渡しキュー23を参照して、指定された更新用サブスレッドを実行させてデータベースを更新する。
【0058】
例えば
図9では、参照用のサブスレッドS1aから、更新用のサブスレッドS1cにレコード値xxxxが受け渡されることがわかる。すなわち、DB検索プログラム18によって参照用サブスレッドS1aが実行された結果がスレッド間データ受け渡しキュー23に格納され、DB更新プログラム19によって、更新用サブスレッドS1cが実行されることがわかる。
【0059】
また、複数の更新用サブスレッドを並列に実行させる場合には、各更新用サブスレッドに対応するスレッド間データ受け渡しキュー23の更新要求の数に基づいて、DBファイルまたはログファイルへの更新要求を実行するようにしてもよい例えば、更新要求の数が少ない更新用サブスレッドを優先して実行させるようにしてもよい。
【0060】
(3)共有リソース更新処理
次に、
図10〜
図18を参照して、ホスト計算機1における共有リソース更新処理について説明する。以下では、各種処理の処理主体を「プログラム」として説明するが、実際には、そのプログラムに基づいてホスト計算機1のCPUがその処理を実行することは言うまでもない。
【0061】
まず、
図10を参照して、スレッド割当てプログラム15によるスレッド割当て処理について説明する。スレッド割当て処理では、OSにより管理されるスレッドを生成し、さらに、当該スレッドを疑似的に細分化してサブスレッドを生成する。
【0062】
図10に示すように、スレッド割当てプログラム15は、クエリ実行定義を受け取る(S101)。ステップS101で受け取るクエリ実行定義は、SQLなどにより検索用サブスレッドの生成数が定義されたクエリを受け取る。検索用サブスレッドの生成数は、予めユーザ入力により設定されてクエリに指定される。クエリ実行定義で指定される検索用サブスレッドの生成数は、例えば、検索用サブスレッドの生成数の最大数や最小数が指定されてもよい。
【0063】
スレッド割当てプログラム15は、ホスト計算機1のOSからホスト計算機1のCPUの数を取得して(S102)、ステップS103〜ステップS109までの処理をCPUの個数分実行する(S103)。
【0064】
スレッド割当てプログラム15は、ホスト計算機1のOSに管理されるスレッドを生成して(S104)、生成したスレッドを当該スレッドに対応するCPUに割り当てる(S105)。ステップS105において、いずれのCPUにスレッドを割当てるかは、ホスト計算機1のOSにより決定される。
【0065】
そして、スレッド割当てプログラム15は、検索用サブスレッドの生成数を計算する(S106)。
図11を参照して、検索用サブスレッドの生成数の計算処理の詳細について説明する。
【0066】
図11に示すように、スレッド割当てプログラム15は、ホスト計算機1のOSからコアの入出力帯域を取得する(S121)。さらに、スレッド割当てプログラム15は、コアの入出力平均応答時間を取得し(S122)、平均入出力長を取得する(S123)。
【0067】
そして、スレッド割当てプログラム15は、コア当りの検索用疑似スレッド数を算出する(S124)。具体的に、スレッド割当てプログラム15は、以下の式(1)によりコア当りの検索用サブスレッド数を算出する。
【0068】
検索用サブスレッド数=コア入出力帯域(Hz)/(入出力平均応答時間(h)×平均入出力長(byte)
)−1・・・(1)
【0069】
上記では、1つのコアに対して1つのスレッドが割り当てられた場合の、コア当りの検索用サブスレッド数を算出している。また、スレッド内で疑似的に分割される複数のサブスレッドのうちの1つを更新用サブスレッドとして割り当てている。例えば、1つのコアに対してn個のスレッドが割り当てられた場合には、式(2)により1つのスレッド当たりの検索用サブスレッド数を算出する。
【0070】
検索用サブスレッド数=(コア入出力帯域(Hz)/(入出力平均応答時間(h)×平均入出力長(byte)
)−n)/n・・・(2)
【0071】
また、上記ではスレッド内のサブスレッドのうちの1つを更新用サブスレッドとしているが、複数のサブスレッドを更新用サブスレッドとしてもよい。
【0072】
図10に戻り、スレッド割当てプログラム15は、更新用サブスレッドを生成する(S107)。具体的に、スレッド割当てプログラム15は、1つのスレッドに対して1つの更新用サブスレッドを生成する。また、スレッド割当てプログラム15は、生成した更新用サブスレッドの情報をスレッド管理テーブル22に設定する。
【0073】
続いて、スレッド割当てプログラム15は、ステップS106で算出した数分の検索用サブスレッドを生成する(S108、S109)。また、スレッド割当てプログラム15は、生成した検索用サブスレッドの情報をスレッド管理テーブル22に設定する。したがって、ステップS107〜ステップS109のサブスレッド生成処理により、スレッド管理テーブル22に、CPU番号、スレッド番号、サブスレッド番号、及び、当該サブスレッドが検索用(参照)か更新用(更新)かの情報が対応付けられることとなる。
【0074】
そして、スレッド割当てプログラム15は、ホスト計算機1のOSにサブスレッドを生成したことを通知して、スレッドの実行を開始させる(S110)。
【0075】
次に、
図12〜
図15を参照して、リソース割当てプログラム16によるリソース割当て処理について説明する。リソース割当て処理では、上記スレッド割当て処理により生成されたサブスレッドにストレージ装置2のリソースを割り当てる。
【0076】
図12に示すように、リソース割当てプログラム16は、リソースを割り当てるサブスレッドの番号を受け取る(S201)。ステップS201において、リソース割当てプログラム16は、スレッド割当てプログラム15から生成されたサブスレッドの番号を受け取る。
【0077】
リソース割当てプログラム16は、スレッド管理テーブル22を参照して、ステップS201で受け取ったサブスレッドの番号に対応するサブスレッドの種別が参照か更新かを判定する(S202)。
【0078】
ステップS202において、サブスレッドの種別が参照であると判定された場合には、リソース割当てプログラム16は、参照用DB領域割当て処理を実行する(S203)。
【0079】
一方、ステップS202において、サブスレッドの種別が更新であると判定された場合には、リソース割当てプログラム16は、更新用DB領域割当て処理(S204)及びログ領域割当て処理(S205)を実行する。
【0080】
ステップS203〜ステップS205におけるリソース割当て処理の詳細について説明する。
図13は、ステップS203における参照用DB領域割当て処理の詳細である。参照用DB領域割当て処理では、検索用に割り当てられているサブスレッドにDB領域のうちの参照用の領域を割り当てる。
【0081】
図13に示すように、リソース割当てプログラム16は、スレッド管理テーブル22の該当サブスレッドに割り当てられている最大DB領域番号を取得する(S211)。ステップS211で取得するサブスレッドに割り当てられている最大DB領域番号とは、OSで管理される1つのスレッドに割り当てられているDB領域の最大DB領域番号を意味する。
【0082】
例えば、SQLなどでファイル名が定義されている場合に、ホスト計算機1のOSは、当該ファイルの使用状態とスレッドの起動状態を把握し、当該ファイルを起動しているスレッド数で除算して、1つのスレッドに割り当てられたDBファイルの領域を算出する。この1つのスレッドに割り当てられたDBファイルの最大DB領域番号がステップS211で取得される。
【0083】
そして、リソース割当てプログラム16は、検索用サブスレッドに割り当てるDBファイルの番号及びページ番号を計算する(S212)。具体的に、リソース割当てプログラム16は、スレッド割当て処理により算出したサブスレッドの数で1つのスレッドに割り当てられたDB領域を分割して、分割されたDB領域のDBファイルの番号及びページ番号を計算する。
【0084】
そして、リソース割当てプログラム16は、ステップS212で計算したDBファイルのページ番号が、DB領域管理テーブル20の対応するDBファイルの最大使用ページ番号より大きいかを判定する(S213)。
【0085】
ステップS213において、ステップS212で計算してDBファイルのページ番号がDB領域管理テーブル20の最大使用ページ番号より大きい場合には、当該DBファイルに割り当てる領域がないことを意味する。したがって、リソース管理プログラム16は、ステップS212で計算したDBファイルのページ番号が、DB領域管理テーブル20の対応するDBファイルの最大使用ページ番号より大きい場合には、次に割当て可能なDBファイルがあるかを判定する(S214)。
【0086】
一方、ステップS213において、ステップS212で計算したDBファイルのページ番号が、DB領域管理テーブル20の対応するDBファイルの最大使用ページ番号より小さい場合には、リソース割当てプログラム16は、当該DBファイルの次のページ番号を検索用サブスレッドに割り当てるページ番号とする(S216)。
【0087】
ステップS214において、次に割当て可能なDBファイルがあると判定された場合には、リソース割当てプログラム16は、次のDBファイルのページ番号を検索用サブスレッドに割り当てるページ番号とする(S215)。
【0088】
そして、リソース割当てプログラム16は、スレッド管理テーブル22のDB領域を割り当てた検索用サブスレッドのDB領域225に、ステップS215またはステップS216で割り当てたページ番号に該当するDB領域番号を設定する(S217)。
【0089】
一方、ステップS214において、次に割当て可能なDBファイルがないと判定された場合には、リソース割当てプログラム16は、スレッド管理テーブルのDB領域番号の値をクリアする(S218)。
【0090】
次に、
図14を参照して、ステップS204における更新用DB領域割当て処理の詳細について説明する。更新用DB領域割当て処理では、更新用に割り当てられているサブスレッドにDB領域のうちの更新用のDB領域を割り当てる。
【0091】
図14に示すように、リソース割当てプログラム16は、スレッド管理テーブル22の該当サブスレッドに割り当てられている最大DB領域番号を取得する(S221)。ステップS221で取得するサブスレッドに割り当てられている最大DB領域番号とは、OSで管理される1つのスレッドに割り当てられているDB領域の最大DB領域番号を意味する。
【0092】
そして、リソース割当てプログラム16は、更新用サブスレッドに割り当てるDBファイルの番号及びページ番号を計算する(S222)。具体的に、ソース割当てプログラム16は、スレッド割当て処理により算出したサブスレッドの数で1つのスレッドに割り当てられたDB領域を分割して、分割されたDB領域のDBファイルの番号及びページ番号を計算する。
【0093】
そして、リソース割当てプログラム16は、ステップS221で取得した最大DB領域番号に、更新用サブスレッドに割り当てたDB領域に対応する領域番号Nを足す。これにより、他の更新用サブスレッドにDB領域が割り当てられる場合に、最大領域番号にNを足した領域番号のDB領域が割り当てられるため、ステップS222で計算されたDB領域に他の更新用サブスレッドを割当てないようにすることができる。
【0094】
そして、リソース割当てプログラム16は、ステップS222で計算したDBファイルのページ番号が、DB領域管理テーブル20の対応するDBファイルの最大使用ページ番号より大きいかを判定する(S223)。
【0095】
ステップS223において、ステップS222で計算してDBファイルのページ番号がDB領域管理テーブル20の最大使用ページ番号より大きい場合には、当該DBファイルに割り当てる領域がないことを意味する。したがって、リソース管理プログラム16は、ステップS222で計算したDBファイルのページ番号が、DB領域管理テーブル20の対応するDBファイルの最大使用ページ番号より大きい場合には、次に割当て可能なDBファイルがあるかを判定する(S224)。
【0096】
一方、ステップS223において、ステップS212で計算したDBファイルのページ番号が、DB領域管理テーブル20の対応するDBファイルの最大使用ページ番号より小さい場合には、リソース割当てプログラム16は、当該DBファイルの次のページ番号を更新用サブスレッドに割り当てるページ番号とする(S226)。
【0097】
ステップS224において、次に割当て可能なDBファイルがあると判定された場合には、リソース割当てプログラム16は、次のDBファイルのページ番号を更新用サブスレッドに割り当てるページ番号とする(S225)。
【0098】
そして、リソース割当てプログラム16は、スレッド管理テーブル22のDB領域を割り当てた更新用サブスレッドのDB領域225に、ステップS215またはステップS216で割り当てたページ番号に該当するDB領域番号を設定する(S227)。
【0099】
一方、ステップS224において、次に割当て可能なDBファイルがないと判定された場合には、リソース割当てプログラム16は、スレッド管理テーブルのDB領域番号の値をクリアする(S228)。
【0100】
次に、
図15を参照して、ステップS205におけるログ領域割当て処理の詳細について説明する。ログ領域割当て処理では、更新用に割り当てられているサブスレッドにDB領域のうちのログ用のDB領域を割り当てる。
【0101】
図15に示すように、リソース割当てプログラム16は、スレッド管理テーブル22の該当サブスレッドに割り当てられている最大ログ領域番号を取得する(S231)。ステップS231で取得するサブスレッドに割り当てられている最大ログ領域番号とは、OSで管理される1つのスレッドに割り当てられているログ領域の最大ログ領域番号を意味する。
【0102】
そして、リソース割当てプログラム16は、更新用サブスレッドに割り当てるログファイルの番号及びページ番号を計算する(S232)。具体的に、スレッド割当て処理により算出したサブスレッドの数で1つのスレッドに割り当てられたログ領域を分割して、分割されたログ領域のログファイルの番号及びページ番号を計算する。
【0103】
そして、リソース割当てプログラム16は、ステップS231で取得した最大ログ領域番号に、更新用サブスレッドに割り当てたログ領域に対応する領域番号Mを足す。これにより、他の更新用サブスレッドにログ領域を割り当てる場合に、最大領域番号にMを足した領域番号のログ領域が割り当てられるため、ステップS232で計算されたログ領域に他の更新用サブスレッドを割当てないようにすることができる。
【0104】
そして、リソース割当てプログラム16は、ステップS232で計算したログファイルのページ番号が、ログ領域管理テーブル21の対応するログファイルの最大使用ページ番号より大きいかを判定する(S233)。
【0105】
ステップS233において、ステップS212で計算してログファイルのページ番号がログ領域管理テーブル21の最大使用ページ番号より大きい場合には、当該ログファイルに割り当てる領域がないことを意味する。したがって、リソース管理プログラム16は、ステップS232で計算したログファイルのページ番号が、ログ領域管理テーブル21の対応するログファイルの最大使用ページ番号より大きい場合には、次に割当て可能なログファイルがあるかを判定する(S234)。
【0106】
一方、ステップS233において、ステップS232で計算したログファイルのページ番号が、ログ領域管理テーブル21の対応するログファイルの最大使用ページ番号より小さい場合には、リソース割当てプログラム16は、当該ログファイルの次のページ番号を更新用サブスレッドに割り当てるページ番号とする(S236)。
【0107】
ステップS234において、次に割当て可能なログファイルがあると判定された場合には、リソース割当てプログラム16は、次のログファイルのページ番号を更新用サブスレッドに割り当てるページ番号とする(S235)。
【0108】
そして、リソース割当てプログラム16は、ログ領域管理テーブル21の対応するログファイルの最大使用ページ番号を割り当てた領域番号に更新する(S237)。
【0109】
そして、リソース割当てプログラム16は、スレッド管理テーブル22のログ領域を割り当てた更新用サブスレッドのログ領域226に、ステップS235またはステップS236で割り当てたページ番号に該当するDB領域番号を設定する(S238)。
【0110】
一方、ステップS234において、次に割当て可能なログファイルがないと判定された場合には、リソース管理プログラム16は、スレッド管理テーブル22のログ領域番号の値をクリアする(S239)。
【0111】
上記ログ領域割当て処理では、ログ領域にログデータを追記しているが、かかる例に限定されず、ログ領域にログデータを上書きするようにしてもよい。
【0112】
次に、
図16を参照して、サブスレッド実行制御プログラム17によるサブスレッド実行制御処理について説明する。サブスレッド実行制御処理は、ホスト計算機1のOSの制御のもとスレッドが実行されて、当該スレッドに対応付けられたサブスレッドの実行を制御する処理である。
【0113】
以下に説明するサブスレッドの実行処理では、スレッド間データ受け渡しキュー23に所定量の更新対象のキューがある場合には更新用サブスレッドを実行させて更新処理を実行し、スレッド間データ受け渡しキュー23に更新対象のキューがない場合には、検索用サブスレッドを実行させて検索処理を実行する。上記したように、更新用サブスレッド及び検索用サブスレッドは、それぞれ特定のDB領域またはログ領域に対応付けられているため、サブスレッドによる更新処理または検索処理を並行して実行させることができる。
【0114】
図16に示すように、サブスレッド実行制御プログラム17は、ホスト計算機1のOSから実行するスレッドの番号を取得し、当該スレッドに対応するスレッド間データ受け渡しキュー23の情報を取得する(S301)。
【0115】
そして、サブスレッド実行制御プログラム17は、ステップS301で取得したスレッド間データ受け渡しキュー23の残量が所定の閾値以上かを判定する(S302)。
【0116】
ステップS302において、スレッド間データ受け渡しキュー23の残量が所定の閾値以上であると判定された場合には、サブスレッド実行制御プログラム17は、データ更新用サブスレッドを実行する(S303)。具体的に、スレッド間データ受け渡しキュー23のToスレッド番号に対応するデータ更新用サブスレッドを実行して、スレッド間データ受け渡しキュー23のレコード値で、実行するデータ更新サブスレッドに対応付けられたDB領域またはログ領域を更新する。
【0117】
そして、サブスレッド実行制御プログラム17は、スレッド間データ受け渡しキュー23の更新処理が終了かを判定して(S311)、更新が終了していない場合には、ステップS301以降の処理を繰り返す。一方、ステップS311において、更新処理が終了したと判定された場合には、サブスレッド実行制御プログラム17は、処理を終了する。
【0118】
一方、ステップS302において、スレッド間データ受け渡しキュー23の残量が所定の閾値より小さいと判定された場合には、サブスレッド実行制御プログラム17は、検索用サブスレッドによる検索処理が終了したかを判定する(S304)。
【0119】
ステップS304において、検索用サブスレッドによる検索処理が終了していると判定された場合には、サブスレッド実行制御プログラム17は、ステップS303のデータ更新用サブスレッドの実行処理を行う。
【0120】
一方、ステップS304において、検索用サブスレッドによる検索処理が終了していないと判定された場合には、サブスレッド実行制御プログラム17は、優先して検索するデータがあるかを判定する(S305)。
【0121】
ステップS305において、優先して検索するデータがあると判定された場合には、サブスレッド実行制御プログラム17は、当該優先データの検索処理を担当するサブスレッドを選択する(S307)。一方、ステップS305において、優先して検索するデータがないと判定された場合には、サブスレッド実行制御プログラム17は、DB領域が設定された検索用サブスレッドのうち、キューの残量が最も少ない検索用サブスレッドを選択する(S306)。
【0122】
そして、サブスレッド実行制御プログラム17は、サブスレッドが選択されたかを判定して(S308)、サブスレッドが選択されている場合には、当該検索用サブスレッドを実行して(S309)、ステップS301以降の処理を繰り返す。一方、ステップS308において、サブスレッドが選択されなかった場合には、サブスレッド実行制御プログラム17は、検索終了フラグをONにして、ステップS301以降の処理を繰り返す。
【0123】
次に、
図17を参照して、DB検索プログラム18によるDB検索処理について説明する。DB検索処理は、上記したリソース割当て処理により、リソースが割り当てられた検索用サブスレッドについて、サブスレッド実行制御プログラム17が当該検索用サブスレッドを選択することにより開始される処理である。
【0124】
図17に示すように、DB検索プログラム18は、実行対象の検索用サブスレッドに割り当て済みのDB領域内のページ数分、ステップS402〜ステップS405の処理を繰り返す(S401)。
【0125】
DB検索プログラム18は、実行対象の検索用サブスレッドに割り当てられたDB領域のDBページから検索条件に合致するレコードを取得する(S402)。ステップS402で取得したレコードが入出力待ちとなる場合には、検索用サブスレッドの実行を中断する(S403)。
【0126】
そして、DB検索プログラム18は、ステップS402で取得したレコードをスレッド間データ受け渡しキュー23に登録する(S404)。具体的に、DB検索プログラム18は、スレッド間データ受け渡しキュー23のFromスレッド番号231に実行した検索用サブスレッドの番号を登録し、Toスレッド番号232に当該検索用サブスレッドと同じスレッド内で実行する更新用サブスレッドの番号を登録し、レコード値233にステップS402で取得したレコード値を登録する。
【0127】
DB検索プログラム18は、当該検索用サブスレッドの実行が開始されてから一定サイクルが経過した場合には、当該検索用サブスレッドの実行を中断する(S405)。ステップS405の中断処理により、1つのスレッド内で、1つの検索用サブスレッドの検索処理が長時間実行されて、他の検索用サブスレッドが実行されずに待ち状態が継続することを避けることができる。
【0128】
次に、
図18を参照して、DB更新プログラム19によるDB更新処理について説明する。DB更新処理は、上記したDB検索処理によりスレッド間データ受け渡しキュー23に登録されたキューのレコードに対応するデータを更新する処理である。
【0129】
図18に示すように、DB更新プログラム19は、スレッド間データ受け渡しキュー23が空かを判定する(S411)。ステップS411において、スレッド間データ受け渡しキュー23が空である場合には、DB更新プログラム19は、処理を終了する。
【0130】
一方、ステップS411において、スレッド間データ受け渡しキュー23が空ではないと判定された場合には、DB更新プログラム19は、スレッド間データ受け渡しキュー23からレコードを取得する(S412)。
【0131】
そして、DB更新プログラム19は、実行している更新用サブスレッドに対応付けられた更新用DB領域に、空きがあるかを判定する(S413)。
【0132】
ステップS413において、更新用DB領域に空きがあると判定された場合には、ステップS416の処理を実行する。一方、ステップS413において、更新用DB領域に空きがないと判定された場合には、上記したリソース割当てプログラム16を呼び出して、更新用サブスレッドに新たな更新用DB領域の割当てる(S414)。
【0133】
ステップS414の割り当て処理が成功した場合には(S415)、DB更新プログラム19は、ステップS416の処理を実行する。一方、ステップS414の割り当て処理が成功しなかった場合には(S415)、DB更新プログラム19は、処理を終了する。
【0134】
ステップS416において、DB更新プログラム19は、実行している更新用サブスレッドに対応付けられたログ領域に空きがあるかを判定する(S416)。
【0135】
ステップS416において、ログ領域に空きがあると判定された場合には、ステップS418の処理を実行する。一方、ステップS416において、ログ領域に空きがないと判定された場合には、上記したリソース割当てプログラム16を呼び出して、更新用サブスレッドに新たなログ領域の割当てる(S417)。
【0136】
ステップS418において、DB更新プログラム19は、ログを更新用サブスレッドに対応付けられたログファイルに出力する(S418)。DB更新プログラム19は、ログのログファイルへの出力処理が入出力待ちとなる場合には、当該更新用サブスレッドの実行を中断する(S419)。
【0137】
続いて、DB更新プログラム19は、更新用サブスレッドに対応付けられたDBページを更新する(S420)。DB更新プログラム10は、更新対象となるDBファイルへの出力処理が入出力待ちとなる場合には、当該更新用サブスレッドの実行を中断する(S421)。DB更新プログラム19は、更新対象となるDBファイルへの更新が終了した後、ステップS411以降の処理を繰り返す。
【0138】
以上、ホスト計算機1における共有リソース更新処理について説明した。次に、管理端末8の管理画面90について説明する。上記したホスト計算機1における共有リソース更新処理を実行するに際して、優先的に検索するデータや、検索用サブスレッド数を予め設定することができる。
【0139】
例えば、
図19に示す管理画面90に、優先的に検索するデータの情報を入力させる入力フィールド91や、検索用サブスレッドの指定数を入力させる入力フィールド92を設ける。
【0140】
入力フィールド91には、優先的に検索するデータの情報として、DBファイル名やブロック番号などが入力される。また、入力フィールド92には検索用サブスレッドの数が入力される。
【0141】
(4)本実施の形態の効果
上記したように、本実施の形態によれば、ホスト計算機1のプロセッサは、複数のスレッドで構成されるプログラムの実行を制御して、複数のスレッドに対応付けられる複数の領域を有する共有リソースを更新する。具体的に、プロセッサは、複数のサブスレッドのうち少なくとも1つのサブスレッドを、当該サブスレッドに対応付けられた共有リソースの領域の更新を行う更新用サブスレッドとし、更新用サブスレッドと異なるサブスレッドを、共有リソースの更新の際に更新用サブスレッドに更新要求を送付し、共有リソースの参照の際に共有リソースを直接参照する検索用サブスレッドとする。これにより、更新が行われる共有リソースを各サブスレッド間で論理的に分割して、複数のコア間で並列に更新処理を行うことにより、更新処理性能を高めることができる。