(57)【要約】【課題】並列検索による性能劣化を抑制できる検索制御プログラム等を提供する。【解決手段】検索制御プログラムは、検索範囲を指定する検索要求を受信する処理を実行させる。検索制御プログラムは、検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、検索範囲に含まれるレコードの総数を特定するとともに、検索範囲で検索を行った場合に得られるレコード数を推定する処理を実行させる。検索制御プログラムは、レコード総数について第１のプロセスによる検索コストと、複数のプロセスの並列検索による検索コストとの差を算出する処理を実行させる。検索制御プログラムは、推定した数のレコードを複数のプロセスから第１のプロセスに集約する時間のコストを算出する処理を実行させる。検索制御プログラムは、差と時間のコストとの比較結果に応じて検索要求を並列検索により処理するか否か制御する処理を実行させる。【選択図】図１
2016162418.tif 000002
【特許請求の範囲】
【請求項１】
検索範囲を指定する情報を含む検索要求を受信し、
検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、前記情報により指定された前記検索範囲に含まれるレコードの総数を特定するとともに、前記検索範囲で検索を行った場合に得られるレコード数を推定し、
前記レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、前記第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出し、
推定した前記レコード数のレコードを前記複数のプロセスまたはスレッドから前記第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出し、
前記差と算出した前記時間に関するコストとの比較結果に応じて前記検索要求を並列検索により処理するか否か制御する、
処理をコンピュータに実行させることを特徴とする検索制御プログラム。
【請求項２】
前記差を算出する処理は、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コスト、および、推定した前記レコード数を乗算して算出するコスト、ならびに、前記複数のプロセスまたはスレッドにおける各プロセスまたは各スレッドのアクセスコスト、および、前記レコード総数を乗算して算出するコストに基づいて、前記並列検索により検索処理される場合の検索処理時間に関するコストを算出することを特徴とする請求項１に記載の検索制御プログラム。
【請求項３】
前記差を算出する処理は、前記並列検索により検索処理される場合の検索処理時間に関するコストのうち、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コストを検索処理の実績に応じて更新し、更新後の転送コストに基づいて差を算出することを特徴とする請求項２に記載の検索制御プログラム。
【請求項４】
前記推定する処理は、検索対象のレコードに含まれる項目の種類を用いて前記レコード数を推定することを特徴とする請求項１〜３のいずれか１つに記載の検索制御プログラム。
【請求項５】
検索範囲を指定する情報を含む検索要求を受信し、
検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、前記情報により指定された前記検索範囲に含まれるレコードの総数を特定するとともに、前記検索範囲で検索を行った場合に得られるレコード数を推定し、
前記レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、前記第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出し、
推定した前記レコード数のレコードを前記複数のプロセスまたはスレッドから前記第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出し、
前記差と算出した前記時間に関するコストとの比較結果に応じて前記検索要求を並列検索により処理するか否か制御する、
処理をコンピュータが実行することを特徴とする検索制御方法。
【請求項６】
検索範囲を指定する情報を含む検索要求を受信する通信部と、
検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、前記情報により指定された前記検索範囲に含まれるレコードの総数を特定するとともに、前記検索範囲で検索を行った場合に得られるレコード数を推定する推定部と、
前記レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、前記第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出する第１算出部と、
推定した前記レコード数のレコードを前記複数のプロセスまたはスレッドから前記第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出する第２算出部と、
前記差と算出した前記時間に関するコストとの比較結果に応じて前記検索要求を並列検索により処理するか否か制御する判定部と、
を有することを特徴とする検索制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索制御プログラム、検索制御方法および検索制御装置に関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Central  Processing  Unit）は、コア数を増加させることで性能を向上させている。複数のコアを有するＣＰＵは、複数のプロセスまたはスレッドを各コアで並列処理することで処理を高速化することが行われている。例えば、データベースにおいて、データの読み出しを複数のプロセスまたはスレッドによって行うことで、データベースからの読み出しを高速化することが行われている。
【０００３】
データベースの例では、メインプロセスが読み出す対象となるテーブルの読み出しを複数のタスクに分割し、複数のプロセスまたはスレッドが各タスクを実行する。なお、分割されたタスクを処理するプロセスまたはスレッドは、ワーカーとも表現する。すなわち、ワーカーの数は、テーブルの読み出しを処理することができるコア数に対応する。ワーカーの数がタスクの数よりも少ない場合には、あるタスクの処理を完了したワーカーに他の未実施のタスクを割り当てることによって、全てのタスクが実行される。メインプロセスは、各ワーカーから各タスクの実行結果を集約して最終的な結果を生成する。
【０００４】
また、データベースにおいて、検索実行時の実行コストに基づいて、データベースへの問合せ文に含まれる検索条件を低コストの検索条件と高コストの検索条件とに分類し、分類に応じて並列度を使い分けることが提案されている。なお、コストの高低に応じた分類は、問合せ文ごとに行われる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１５２５１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、並列処理を行うと各ワーカーがテーブルの情報を同時に読み出すので、テーブルが格納されている記憶媒体とのＩ／Ｏ（Input／Output）の転送量が増加する。また、各ワーカーとメインプロセスとの間のメモリ転送量も増加するが、メモリの転送速度は容易に向上させることが難しい。このため、並列処理で検索を行った場合に、通常の検索、つまり逐次処理による検索を行った場合の性能を下回る可能性がある。
【０００７】
一つの側面では、本発明は、並列検索による性能劣化を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
一つの態様では、検索制御プログラムは、検索範囲を指定する情報を含む検索要求を受信する処理をコンピュータに実行させる。また、検索制御プログラムは、検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、前記情報により指定された前記検索範囲に含まれるレコードの総数を特定する処理をコンピュータに実行させる。また、検索制御プログラムは、前記検索範囲で検索を行った場合に得られるレコード数を推定する処理をコンピュータに実行させる。また、検索制御プログラムは、前記レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、前記第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出する処理をコンピュータに実行させる。また、検索制御プログラムは、推定した前記レコード数のレコードを前記複数のプロセスまたはスレッドから前記第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出する処理をコンピュータに実行させる。また、検索制御プログラムは、前記差と算出した前記時間に関するコストとの比較結果に応じて前記検索要求を並列検索により処理するか否か制御する処理をコンピュータに実行させる。
【発明の効果】
【０００９】
並列検索による性能劣化を抑制できる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例の検索制御システムの構成の一例を示すブロック図である。
【図２】図２は、対象データベースの一例を示す図である。
【図３】図３は、カタログ記憶部の一例を示す図である。
【図４】図４は、統計情報記憶部の一例を示す図である。
【図５】図５は、通常の検索と並列検索の実行イメージの一例を示す図である。
【図６】図６は、並列検索の一例を示す図である。
【図７】図７は、アクセスプランの一例を示す図である。
【図８】図８は、通常の検索におけるコストを説明する図である。
【図９】図９は、並列検索におけるコストを説明する図である。
【図１０】図１０は、実施例の検索制御処理の一例を示すフローチャートである。
【図１１】図１１は、検索制御プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面に基づいて、本願の開示する検索制御プログラム、検索制御方法および検索制御装置の実施例を詳細に説明する。なお、本実施例により、開示技術が限定されるものではない。また、以下の実施例は、矛盾しない範囲で適宜組みあわせてもよい。
【実施例】
【００１２】
図１は、実施例の検索制御システムの構成の一例を示すブロック図である。図１に示す検索制御システム１は、端末装置１０と、検索制御装置１００とを有する。なお、図１には、システムが１つの端末装置１０を有する場合を示したが、端末装置１０の数は限定されず、検索制御システム１は、任意の数の端末装置１０を有してもよい。
【００１３】
端末装置１０および検索制御装置１００の間は、ネットワークＮを介して相互に通信可能に接続される。かかるネットワークＮには、有線または無線を問わず、インターネット（Internet）を始め、ＬＡＮ（Local  Area  Network）やＶＰＮ（Virtual  Private  Network）などの任意の種類の通信網を採用できる。
【００１４】
検索制御装置１００は、端末装置１０から検索範囲を指定する情報を含む検索要求を受信する。検索要求は、例えばＳＱＬ文が挙げられる。検索制御装置１００は、検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、情報により指定された検索範囲に含まれるレコードの総数を特定する。また、検索制御装置１００は、検索範囲で検索を行った場合に得られるレコード数を推定する。また、検索制御装置１００は、レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストを算出する。また、検索制御装置１００は、レコード総数のレコードについて第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストを算出する。検索制御装置１００は、第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出する。また、検索制御装置１００は、推定したレコード数のレコードを複数のプロセスまたはスレッドから第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出する。検索制御装置１００は、差と算出した時間に関するコストとの比較結果に応じて検索要求を並列検索により処理するか否かを判定する。検索制御装置１００は、判定結果に応じて通常の検索または並列検索によりデータベースを検索し、検索結果を端末装置１０に送信する。これにより、並列検索による性能劣化を抑制できる。
【００１５】
端末装置１０は、例えば、データベースのユーザが用いるコンピュータである。端末装置１０は、検索制御装置１００から受信したデータベースの操作にかかる各種画面等を表示させてユーザに提示する。端末装置１０は、例えば、データベースの各種画面等の表示および操作について、Ｗｅｂブラウザを用いることができる。端末装置１０は、検索範囲を指定する情報を含む検索要求、例えば、ＳＱＬ文を検索制御装置１００に送信する。また、端末装置１０は、検索結果を検索制御装置１００から受信して図示しない表示部に表示させる。端末装置１０の一例としては、可搬型のパーソナルコンピュータを採用できる。端末装置１０には、上記のパーソナルコンピュータ等の可搬型の端末のみならず、据置型のパーソナルコンピュータを端末装置１０として採用することもできる。また、端末装置１０は、可搬型の端末としては、上記のパーソナルコンピュータの他にも、例えば、タブレット端末、スマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末等を採用することもできる。
【００１６】
次に、検索制御装置１００の構成について説明する。図１に示すように、検索制御装置１００は、通信部１１０と、記憶部１２０と、制御部１３０とを有する。なお、検索制御装置１００は、図１に示す機能部以外にも既知のコンピュータが有する各種の機能部、例えば各種の入力デバイスや音声出力デバイス等の機能部を有することとしてもかまわない。
【００１７】
通信部１１０は、例えば、ＮＩＣ（Network  Interface  Card）等によって実現される。通信部１１０は、ネットワークＮを介して端末装置１０と有線または無線で接続され、端末装置１０との間で情報の通信を司る通信インタフェースである。通信部１１０は、端末装置１０からＳＱＬ文を受信する。通信部１１０は、受信したＳＱＬ文を制御部１３０に出力する。また、通信部１１０は、制御部１３０から入力されたデータベースの検索結果および各種画面を端末装置１０に送信する。
【００１８】
記憶部１２０は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、ハードディスクや光ディスク等の記憶装置によって実現される。記憶部１２０は、対象データベース１２１と、カタログ記憶部１２２と、統計情報記憶部１２３と、共有メモリ１２４とを有する。また、記憶部１２０は、制御部１３０での処理に用いる情報を記憶する。
【００１９】
対象データベース１２１は、関係データベースであり複数のテーブルを有し、各種の情報を記憶する。対象データベース１２１は、例えば、あるテーブルに顧客情報を記憶し、他のテーブルに購入品目、コメント等を記憶する。図２は、対象データベースの一例を示す図である。図２に示すように、対象データベース１２１は、例えば、顧客情報を記憶するテーブル「ａｃｃｏｕｎｔｓ」について「ＩＤ」、「苗字」、「ａｇｅ」といった項目を有する。対象データベース１２１は、例えば、顧客情報を記憶するテーブルでは１人の情報を１レコードとして記憶する。
【００２０】
「ＩＤ」は、顧客を識別する識別子である。「苗字」は、顧客の苗字を示す情報である。「ａｇｅ」は、顧客の年齢を示す情報である。図２の例では、ＩＤ「１」の「サトウ」さんの年齢が「２３」歳であることを示す。
【００２１】
図１の説明に戻って、カタログ記憶部１２２は、対象データベース１２１のテーブルを管理するテーブル、つまりシステムカタログを記憶する。図３は、カタログ記憶部の一例を示す図である。図３に示すように、カタログ記憶部１２２は、「識別子」、「テーブル名」、「推定レコード数」、「推定ページ数」といった項目を有する。カタログ記憶部１２２は、例えば、１つのテーブルごとに１レコードとして記憶する。
【００２２】
「識別子」は、対象データベース１２１のテーブルを識別する識別子である。「テーブル名」は、対象データベース１２１のテーブルの名称を示す情報である。「推定レコード数」は、当該テーブルに含まれるレコード数を示す情報である。ここで、推定レコード数は、例えば前回の更新が５分前であり、その後レコードが追加されている可能性があるため、レコード数に推定を付加している。なお、以下の説明では、推定レコード数を検索範囲に含まれるレコードの総数とも表現する。
【００２３】
「推定ページ数」は、当該テーブルの記憶媒体の領域を示す情報である。なお、ページは、ワーカーが一度にアクセスできる記憶媒体の領域であり、例えば、８ｋＢｙｔｅ／ページとすることができる。また、ページには、１つ以上のレコードが格納される。また、推定ページ数は、推定レコード数と同様に、例えば前回の更新が５分前であり、その後レコードの追加によってページが増加している可能性があるため、ページ数に推定を付加している。なお、以下の説明では、推定ページ数を検索範囲の総ページ数とも表現する。図３の１行目の例では、識別子「１００１」のテーブル「ａｃｃｏｕｎｔｓ」には、「６」レコード含まれ、「１」ページ分の領域に格納されていることを示すものである。
【００２４】
図１の説明に戻って、統計情報記憶部１２３は、対象データベース１２１に対する過去の検索実績を記憶する。図４は、統計情報記憶部の一例を示す図である。図４に示すように、統計情報記憶部１２３は、「識別子」、「列番号」、「種類数」といった項目を有する。統計情報記憶部１２３は、例えば、１つの列番号ごとに１レコードとして記憶する。なお、統計情報記憶部１２３に記憶される統計情報は、例えば制御部１３０で実行される図示しない統計情報収集プロセスによって定期的に収集される。
【００２５】
「識別子」は、対象データベース１２１のテーブルを識別する識別子である。「列番号」は、対象データベース１２１のテーブルの列を示す番号である。「種類数」は、対象データベース１２１のテーブルの各列に含まれる情報の種類の数を示す情報である。図４の２行目の例では、識別子「１００１」のテーブルの列番号「２」、すなわち苗字の種類が「４」種類であることを示す。
【００２６】
図１の説明に戻って、共有メモリ１２４は、複数のワーカーとデータベースメインプロセス（以下、ＤＢメインプロセスと表す）との間で情報をやりとりするための共有メモリである。共有メモリ１２４は、例えば、各ワーカーからの出力が書き込まれ、書き込まれた内容がＤＢメインプロセスによって読み込まれる。なお、ＤＢメインプロセスは、第１のプロセスまたはスレッドである。また、複数のワーカーは、第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドである。
【００２７】
制御部１３０は、例えば、ＣＰＵやＭＰＵ（Micro  Processing  Unit）等によって、内部の記憶装置に記憶されているプログラムがＲＡＭを作業領域として実行されることにより実現される。また、制御部１３０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路により実現されるようにしてもよい。制御部１３０は、受付部１３１と、推定部１３２と、第１算出部１３３と、第２算出部１３４と、判定部１３５と、検索部１３６とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部１３０の内部構成は、図１に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【００２８】
受付部１３１は、ネットワークＮおよび通信部１１０を介して、端末装置１０から検索要求を受信すると、検索要求を受け付ける。すなわち、受付部１３１は、検索要求であるクエリのＳＱＬ文を解析する。受付部１３１は、ＳＱＬ文を解析して抽出した検索範囲を指定する情報を推定部１３２に出力する。受付部１３１は、例えば、「SELECT  ID，苗字，age  from  accounts  where  苗字＝‘サトウ’；」というクエリに基づいて、「accountsという名前のテーブルから苗字がサトウであるレコードのID，苗字，ageを取り出す」旨の情報を推定部１３２に出力する。
【００２９】
推定部１３２は、受付部１３１から検索範囲を指定する情報が入力されると、当該情報に基づいてアクセスプランを生成する。推定部１３２は、通常の検索および並列検索のアクセスプランを生成する。推定部１３２は、生成した通常の検索および並列検索のアクセスプランを検索部１３６に出力する。
【００３０】
ここで、まず通常の検索および並列検索について説明する。図５は、通常の検索と並列検索の実行イメージの一例を示す図である。図５に示すように、通常の検索では、例えば、検索部１３６で実行される１つのＤＢメインプロセス１１が対象データベース１２１のテーブルにアクセスする。なお、図５中、Ｉ／Ｏは、検索部１３６と対象データベース間のアクセスを示し、演算は、例えば読み出したデータに対する演算を示す。読み出したデータに対する演算は、例えば、読み出した苗字に対して「様」を付加するといった演算が挙げられる。並列検索では、例えば、検索部１３６で実行される３つのワーカー１２〜１４が対象データベース１２１のテーブルの異なる領域にアクセスする。なお、図５中の集約は、ワーカー１２〜１４からの出力を集約する処理を示し、例えば検索部１３６で実行されるＤＢメインプロセスが処理する。つまり、集約する処理は、オーバーヘッドである。図５に示すように、並列検索は、集約処理まで含めた時間が通常の検索の時間よりも短い場合に有効であることがわかる。
【００３１】
次に、図６を用いて並列検索の詳細について説明する。図６は、並列検索の一例を示す図である。図６に示すように、対象データベース１２１内のテーブルにアクセスするための処理として、タスク２１−１〜２１−ｍがある場合について説明する。なお、以下の説明でタスク２１−１〜２１−ｍを区別しない場合にはタスク２１と表す。検索部１３６には、タスクを処理するためのワーカー２２−１〜２２−ｎが設けられる。なお、以下の説明でワーカー２２−１〜２２−ｎを区別しない場合にはワーカー２２と表す。
【００３２】
検索部１３６では、例えば、ワーカー２２−１がタスク２１−１を処理し、ワーカー２２−２がタスク２１−２を処理する。検索部１３６では、例えば、ワーカー２２が４つ同時に処理できる場合には、タスク２１−１〜２１−４がワーカー２２−１〜２２−４で最初に処理され、タスク２１−５〜２１−ｍは、処理が完了したワーカー２２に順次分配されて処理される。また、検索部１３６には、ＤＢメインプロセス２３が設けられ、各ワーカー２２で処理された結果を集約し、検索結果を例えばアプリケーション２４に出力する。アプリケーション２４は、例えば、通信部１１０およびネットワークＮを介して、検索結果を端末装置１０に送信する。
【００３３】
続いて、図７を用いてアクセスプランについて説明する。図７は、アクセスプランの一例を示す図である。図７では、ＳＱＬ文５１に対応する並列検索のアクセスプラン５４と、通常の検索のアクセスプラン５７とを示す。ＳＱＬ文５１は、「ＩＤ，苗字，ａｇｅ」を取り出すことを示す文を有する。ＳＱＬ文５１は、さらに、検索先のテーブル「ａｃｃｏｕｎｔｓ」を示す文５２と、検索条件「苗字＝‘サトウ’」を示す文５３を有する。
【００３４】
並列検索のアクセスプラン５４は、検索先のテーブルを示す文５２に対応する文５５を有する。また、並列検索のアクセスプラン５４は、アクセス中の評価条件、すなわち検索条件を示す文５３に対応する文５６を有する。同様に、通常の検索のアクセスプラン５７は、検索先のテーブルを示す文５２に対応する文５８を有する。また、通常の検索のアクセスプラン５７は、アクセス中の評価条件、すなわち検索条件を示す文５３に対応する文５９を有する。図７の例では、並列検索のアクセスプラン５４と、通常の検索のアクセスプラン５７との違いは、「Ｐａｒａｌｌｅｌ」の有無であり、これにより並列検索か通常の検索かを指定する。
【００３５】
推定部１３２の説明に戻る。推定部１３２は、アクセスプランを生成すると、カタログ記憶部１２２を参照して検索範囲の総ページ数を特定する。すなわち、推定部１３２は、カタログ記憶部１２２を参照して、検索範囲を指定する情報に含まれる検索範囲、つまり検索するテーブル名に対応する推定ページ数を取得し、当該推定ページ数を検索範囲の総ページ数として特定する。なお、検索範囲の総ページ数は、１ページあたりのレコード数が決定していれば、検索範囲に含まれるレコードの総数と表現してもよい。
【００３６】
次に、推定部１３２は、検索範囲で検索された場合に得られるレコード数、すなわち、検索の結果として返るレコード数を推定する。推定部１３２は、カタログ記憶部１２２を参照して、検索範囲を指定する情報に含まれる検索範囲、つまり検索するテーブル名に対応する推定レコード数（検索範囲に含まれるレコードの総数）を取得する。また、推定部１３２は、カタログ記憶部１２２を参照して検索するテーブル名の識別子を取得する。推定部１３２は、統計情報記憶部１２３を参照して、取得した識別子および検索する項目（カラム）の列番号に対応する種類数を取得する。推定部１３２は、取得した推定レコード数を、取得した種類数で除算して検索の結果として返るレコード数を推定する。図２〜図４の例では、テーブル名「ａｃｃｏｕｎｔｓ」を苗字で検索した結果として返るレコード数は、推定レコード数「６」／種類数「４」＝１．５レコードとなる。推定部１３２は、特定した検索範囲の総ページ数を第１算出部１３３に出力し、推定した検索の結果として返るレコード数を第２算出部１３４に出力する。なお、推定部１３２では、検索条件が変化することにより、検索した結果として返るレコード数も変化する。例えば、推定部１３２は、苗字に代えてａｇｅで検索すると種類数は「５」となり、検索した結果として返るレコード数は、６／５＝１．２レコードとなる。
【００３７】
第１算出部１３３は、推定部１３２から特定した検索範囲の総ページ数が入力されると、通常の検索による検索コストを算出する。すなわち、第１算出部１３３は、ＤＢメインプロセスによる検索範囲に含まれるレコードの総数に対する検索コストを算出する。第１算出部１３３は、検索範囲の総ページ数に基づいて、下記の式（１）により通常の検索による検索コストを算出する。
【００３８】
通常検索コスト＝通常アクセスコスト×アクセスするページ数      …（１）
【００３９】
上記式（１）の通常アクセスコストは、例えば、Ｉ／Ｏ、つまり対象データベース１２１へのアクセスに基づいて、１ページを読み出すコストを「１」とする定数とすることができる。アクセスするページ数は、取得した検索範囲の総ページ数である。上述のアクセスするページ数が１ページでありテーブル名「ａｃｃｏｕｎｔｓ」を苗字で検索する例では、通常検索コストは１×１＝１となる。図８は、通常の検索におけるコストを説明する図である。図８に示すように、通常の検索では、ＤＢメインプロセス２３が対象データベース１２１内のテーブルにアクセスするための処理である各タスク２１を処理する。このとき、ＤＢメインプロセス２３が各タスク２１を処理するコストが、図中に示す通常検索コスト２５である。
【００４０】
図１の説明に戻って、第１算出部１３３は、並列検索による検索コストを算出する。すなわち、第１算出部１３３は、ワーカー２２による検索範囲の総ページ数に対する検索コストを算出する。なお、第１算出部１３３は、検索範囲に含まれるレコードの総数を用いて検索コストを算出してもよい。第１算出部１３３は、検索範囲の総ページ数に基づいて、下記の式（２）により並列検索による検索コストを算出する。
【００４１】
並列検索コスト＝並列アクセスコスト×アクセスするページ数      …（２）
【００４２】
上記式（２）の並列アクセスコストは、ワーカー２２の数に対応する定数であり、例えば「１／（ワーカー２２の数）」とすることができる。アクセスするページ数は、取得した検索範囲の総ページ数である。上述のアクセスするページ数が１ページでありテーブル名「ａｃｃｏｕｎｔｓ」を苗字で検索する例では、ワーカー２２が４つとすると、並列検索コストは１／４×１＝０．２５となる。図９は、並列検索におけるコストを説明する図である。図９に示すように、並列検索では、各ワーカー２２が対象データベース１２１内のテーブルにアクセスするための処理である各タスク２１を処理する。このとき、各ワーカー２２が各タスク２１を処理するコストが、図中に示す並列検索コスト２６である。
【００４３】
第１算出部１３３は、通常検索コストおよび並列検索コストを算出すると、通常の検索と並列検索との検索コストの差を算出する。上述の例では、差は１−０．２５＝０．７５となる。第１算出部１３３は、算出した通常の検索と並列検索との検索コストの差を判定部１３５に出力する。
【００４４】
第２算出部１３４は、推定部１３２から検索の結果として返るレコード数が入力されると、並列検索における転送コストを算出する。すなわち、第２算出部１３４は、検索の結果として返るレコード数のレコードを各ワーカー２２からＤＢメインプロセス２３に与える際にかかる時間に関するコストを算出する。第２算出部１３４は、検索の結果として返るレコード数に基づいて、下記の式（３）により並列検索における転送コストを算出する。
【００４５】
転送コスト＝ＤＢメインプロセスとワーカー間の転送コスト
×検索の結果として返るレコード数              …（３）
【００４６】
上記式（３）のＤＢメインプロセスとワーカー間の転送コストは、ＤＢメインプロセス２３とワーカー２２との間で、共有メモリ１２４を介して取得したレコードを転送する時間に関するコストであり、例えば「０．０９」とすることができる。なお、転送コストは、ＤＢメインプロセス２３とワーカー２２との間での転送の実績に応じて更新するようにしてもよい。上述のアクセスするページ数が１ページでありテーブル名「ａｃｃｏｕｎｔｓ」を苗字で検索する例では、転送コストは０．０９×１．５＝０．１３５となる。図９の例では、ＤＢメインプロセス２３に対して、各ワーカー２２から共有メモリ１２４を介して各検索結果が転送されるコストが、図中に示す転送コスト２７である。第２算出部１３４は、算出した転送コストを判定部１３５に出力する。
【００４７】
図１の説明に戻って、判定部１３５は、第１算出部１３３から通常の検索と並列検索との検索コストの差が入力され、第２算出部１３４から転送コストが入力されると、差と転送コストとを比較する。すなわち、判定部１３５は、転送コストが算出した通常の検索と並列検索との検索コストの差より低いか否かを判定する。上述の例では、転送コストが０．１３５、検索コストの差が０．７５であるので、転送コストが検索コストの差より低くなる。
【００４８】
判定部１３５は、転送コストが検索コストの差より低い場合には、並列検索のアクセスプランを用いる旨の検索指示を検索部１３６に出力する。判定部１３５は、転送コストが検索コストの差以上である場合には、通常の検索のアクセスプランを用いる旨の検索指示を検索部１３６に出力する。
【００４９】
検索部１３６には、判定部１３５から検索指示が入力される。また、検索部１３６には、推定部１３２から通常の検索および並列検索のアクセスプランが入力される。検索部１３６は、検索指示が並列検索のアクセスプランを用いる旨の検索指示である場合には、並列検索のアクセスプランを用いて対象データベース１２１を検索し、検索結果を通信部１１０およびネットワークＮを介して端末装置１０に送信する。検索部１３６は、検索指示が通常の検索のアクセスプランを用いる旨の検索指示である場合には、通常の検索のアクセスプランを用いて対象データベース１２１を検索し、検索結果を通信部１１０およびネットワークＮを介して端末装置１０に送信する。なお、検索部１３６では、アクセスプランに含まれるテーブル名によって検索時に読み込むページ量は変化する。
【００５０】
次に、実施例の検索制御装置１００の動作について説明する。図１０は、実施例の検索制御処理の一例を示すフローチャートである。
【００５１】
受付部１３１は、ネットワークＮおよび通信部１１０を介して、端末装置１０から検索要求のＳＱＬ文を受信する（ステップＳ１）。受付部１３１は、受信したＳＱＬ文を解析して抽出した検索範囲を指定する情報を推定部１３２に出力する（ステップＳ２）。推定部１３２は、受付部１３１から検索範囲を指定する情報が入力されると、当該情報に基づいて通常の検索および並列検索のアクセスプランを生成する（ステップＳ３）。推定部１３２は、生成した通常の検索および並列検索のアクセスプランを検索部１３６に出力する。
【００５２】
推定部１３２は、アクセスプランを生成すると、カタログ記憶部１２２を参照して検索範囲の総ページ数を特定する（ステップＳ４）。推定部１３２は、検索範囲で検索された場合に得られるレコード数、すなわち、検索の結果として返るレコード数を推定する（ステップＳ５）。推定部１３２は、特定した検索範囲の総ページ数を第１算出部１３３に出力し、推定した検索の結果として返るレコード数を第２算出部１３４に出力する。
【００５３】
第１算出部１３３は、推定部１３２から特定した検索範囲の総ページ数が入力されると、通常の検索による検索コストを算出する（ステップＳ６）。また、第１算出部１３３は、並列検索による検索コストを算出する（ステップＳ７）。第１算出部１３３は、通常検索コストおよび並列検索コストを算出すると、通常の検索と並列検索との検索コストの差を算出する（ステップＳ８）。第１算出部１３３は、算出した通常の検索と並列検索との検索コストの差を判定部１３５に出力する。
【００５４】
第２算出部１３４は、推定部１３２から検索の結果として返るレコード数が入力されると、並列検索における転送コストを算出する（ステップＳ９）。第２算出部１３４は、算出した転送コストを判定部１３５に出力する。判定部１３５には、第１算出部１３３から通常の検索と並列検索との検索コストの差が入力され、第２算出部１３４から転送コストが入力される。判定部１３５は、転送コストが算出した通常の検索と並列検索との検索コストの差より低いか否かを判定する（ステップＳ１０）。
【００５５】
判定部１３５は、転送コストが検索コストの差より低い場合には（ステップＳ１０：肯定）、並列検索のアクセスプランを用いる旨の検索指示を検索部１３６に出力する。検索部１３６には、判定部１３５から検索指示が入力される。また、検索部１３６には、推定部１３２から通常の検索および並列検索のアクセスプランが入力される。検索部１３６は、検索指示が並列検索のアクセスプランを用いる旨の検索指示であるので、並列検索のアクセスプランを用いて対象データベース１２１を検索し（ステップＳ１１）、検索結果を端末装置１０に送信する（ステップＳ１３）。
【００５６】
判定部１３５は、転送コストが検索コストの差以上である場合には（ステップＳ１０：否定）、通常の検索のアクセスプランを用いる旨の検索指示を検索部１３６に出力する。検索部１３６には、判定部１３５から検索指示が入力される。また、検索部１３６には、推定部１３２から通常の検索および並列検索のアクセスプランが入力される。検索部１３６は、検索指示が通常の検索のアクセスプランを用いる旨の検索指示であるので、通常の検索のアクセスプランを用いて対象データベース１２１を検索し（ステップＳ１２）、検索結果を端末装置１０に送信する（ステップＳ１３）。これにより、検索制御装置１００は、並列検索の転送コストが通常の検索と並列検索との検索コストの差より低い場合に並列検索を行い、転送コストが検索コストの差以上である場合に通常の検索を行うので、並列検索による性能劣化を抑制できる。すなわち、検索制御装置１００は、対象データベース１２１へのアクセスが並列検索と通常の検索のどちらも使用可能である場合に、より実行速度が速い検索方法を用いてアクセスできる。
【００５７】
このように、検索制御装置１００は、検索範囲を指定する情報を含む検索要求を受信する。また、検索制御装置１００は、検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部１２０を参照して、情報により指定された検索範囲に含まれるレコードの総数を特定する。また、検索制御装置１００は、検索範囲で検索を行った場合に得られるレコード数を推定する。また、検索制御装置１００は、レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出する。また、検索制御装置１００は、推定したレコード数のレコードを複数のプロセスまたはスレッドから第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出する。また、検索制御装置１００は、差と算出した時間に関するコストとの比較結果に応じて検索要求を並列検索により処理するか否か制御する。その結果、並列検索による性能劣化を抑制できる。
【００５８】
また、検索制御装置１００は、第１のプロセスまたはスレッドと複数のプロセスまたはスレッドとの間の転送コスト、および、推定したレコード数を乗算して算出するコスト、ならびに、複数のプロセスまたはスレッドにおける各プロセスまたは各スレッドのアクセスコスト、および、レコード総数を乗算して算出するコストに基づいて、並列検索により検索処理される場合の検索処理時間に関するコストを算出する。その結果、検索する内容に応じて並列検索のコストを算出できる。
【００５９】
また、検索制御装置１００は、並列検索により検索処理される場合の検索処理時間に関するコストのうち、第１のプロセスまたはスレッドと複数のプロセスまたはスレッドとの間の転送コストを検索処理の実績に応じて更新し、更新後の転送コストに基づいて差を算出する。その結果、並列検索のコストの算出精度を向上させることができる。
【００６０】
また、検索制御装置１００は、検索対象のレコードに含まれる項目の種類を用いてレコード数を推定する。その結果、項目の種類に応じて並列検索のコストを算出できる。
【００６１】
なお、上記実施例では、カタログ記憶部１２２の推定レコード数は、推定ページ数の１ページあたり６レコードであるが、これに限定されない。例えば、推定ページ数のうち、あるページは６レコードであり、他のページは７レコードといった場合であってもよい。
【００６２】
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、第１算出部１３３と、第２算出部１３４とを統合してもよい。
【００６３】
さらに、各装置で行われる各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）上で、その全部または任意の一部を実行するようにしてもよい。また、各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行されるプログラム上、またはワイヤードロジックによるハードウェア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。
【００６４】
ところで、上記の実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１１は、検索制御プログラムを実行するコンピュータの一例を示す図である。
【００６５】
図１１に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、データ入力を受け付ける入力装置２０２と、モニタ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る媒体読取装置２０４と、各種装置と接続するためのインタフェース装置２０５と、他の情報処理装置等と有線または無線により接続するための通信装置２０６とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０７と、ハードディスク装置２０８とを有する。また、各装置２０１〜２０８は、バス２０９に接続される。
【００６６】
ハードディスク装置２０８には、図１に示した受付部１３１、推定部１３２、第１算出部１３３、第２算出部１３４、判定部１３５および検索部１３６の各処理部と同様の機能を有する検索制御プログラムが記憶される。また、ハードディスク装置２０８には、対象データベース１２１、カタログ記憶部１２２、統計情報記憶部１２３、共有メモリ１２４、および、検索制御プログラムを実現するための各種データが記憶される。入力装置２０２は、例えば、コンピュータ２００の管理者から、管理情報等の各種情報の入力を受け付ける。モニタ２０３は、例えば、コンピュータ２００の管理者に対して管理情報の画面等の各種画面を表示する。インタフェース装置２０５は、例えば、印刷装置等が接続される。通信装置２０６は、例えば、図１に示した通信部１１０と同様の機能を有しネットワークＮと接続され、端末装置１０とクエリや各種情報をやりとりする。
【００６７】
ＣＰＵ２０１は、ハードディスク装置２０８に記憶された各プログラムを読み出して、ＲＡＭ２０７に展開して実行することで、各種の処理を行う。また、これらのプログラムは、コンピュータ２００を図１に示した受付部１３１、推定部１３２、第１算出部１３３、第２算出部１３４、判定部１３５および検索部１３６として機能させることができる。
【００６８】
なお、上記の検索制御プログラムは、必ずしもハードディスク装置２０８に記憶されている必要はない。例えば、コンピュータ２００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ２００が読み出して実行するようにしてもよい。コンピュータ２００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ等に接続された装置にこの検索制御プログラムを記憶させておき、コンピュータ２００がこれらから検索制御プログラムを読み出して実行するようにしてもよい。
【００６９】
以上、本実施例を含む実施の形態に関し、さらに以下の付記を開示する。
【００７０】
（付記１）検索範囲を指定する情報を含む検索要求を受信し、
検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、前記情報により指定された前記検索範囲に含まれるレコードの総数を特定するとともに、前記検索範囲で検索を行った場合に得られるレコード数を推定し、
前記レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、前記第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出し、
推定した前記レコード数のレコードを前記複数のプロセスまたはスレッドから前記第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出し、
前記差と算出した前記時間に関するコストとの比較結果に応じて前記検索要求を並列検索により処理するか否か制御する、
処理をコンピュータに実行させることを特徴とする検索制御プログラム。
【００７１】
（付記２）前記差を算出する処理は、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コスト、および、推定した前記レコード数を乗算して算出するコスト、ならびに、前記複数のプロセスまたはスレッドにおける各プロセスまたは各スレッドのアクセスコスト、および、前記レコード総数を乗算して算出するコストに基づいて、前記並列検索により検索処理される場合の検索処理時間に関するコストを算出することを特徴とする付記１に記載の検索制御プログラム。
【００７２】
（付記３）前記差を算出する処理は、前記並列検索により検索処理される場合の検索処理時間に関するコストのうち、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コストを検索処理の実績に応じて更新し、更新後の転送コストに基づいて差を算出することを特徴とする付記２に記載の検索制御プログラム。
【００７３】
（付記４）前記推定する処理は、検索対象のレコードに含まれる項目の種類を用いて前記レコード数を推定することを特徴とする付記１〜３のいずれか１つに記載の検索制御プログラム。
【００７４】
（付記５）検索範囲を指定する情報を含む検索要求を受信し、
検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、前記情報により指定された前記検索範囲に含まれるレコードの総数を特定するとともに、前記検索範囲で検索を行った場合に得られるレコード数を推定し、
前記レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、前記第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出し、
推定した前記レコード数のレコードを前記複数のプロセスまたはスレッドから前記第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出し、
前記差と算出した前記時間に関するコストとの比較結果に応じて前記検索要求を並列検索により処理するか否か制御する、
処理をコンピュータが実行することを特徴とする検索制御方法。
【００７５】
（付記６）前記差を算出する処理は、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コスト、および、推定した前記レコード数を乗算して算出するコスト、ならびに、前記複数のプロセスまたはスレッドにおける各プロセスまたは各スレッドのアクセスコスト、および、前記レコード総数を乗算して算出するコストに基づいて、前記並列検索により検索処理される場合の検索処理時間に関するコストを算出することを特徴とする付記５に記載の検索制御方法。
【００７６】
（付記７）前記差を算出する処理は、前記並列検索により検索処理される場合の検索処理時間に関するコストのうち、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コストを検索処理の実績に応じて更新し、更新後の転送コストに基づいて差を算出することを特徴とする付記６に記載の検索制御方法。
【００７７】
（付記８）前記推定する処理は、検索対象のレコードに含まれる項目の種類を用いて前記レコード数を推定することを特徴とする付記５〜７のいずれか１つに記載の検索制御方法。
【００７８】
（付記９）検索範囲を指定する情報を含む検索要求を受信する通信部と、
検索範囲と当該検索範囲に含まれるレコードの総数との対応関係を記憶する記憶部を参照して、前記情報により指定された前記検索範囲に含まれるレコードの総数を特定するとともに、前記検索範囲で検索を行った場合に得られるレコード数を推定する推定部と、
前記レコード総数のレコードについて検索処理を行う第１のプロセスまたはスレッドにより検索処理される場合の検索処理時間に関するコストと、前記第１のプロセスまたはスレッドの制御による複数のプロセスまたはスレッドを用いた並列検索により検索処理される場合の検索処理時間に関するコストとの差を算出する第１算出部と、
推定した前記レコード数のレコードを前記複数のプロセスまたはスレッドから前記第１のプロセスまたはスレッドに与える際にかかる時間に関するコストを算出する第２算出部と、
前記差と算出した前記時間に関するコストとの比較結果に応じて前記検索要求を並列検索により処理するか否か制御する判定部と、
を有することを特徴とする検索制御装置。
【００７９】
（付記１０）前記第１算出部は、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コスト、および、推定した前記レコード数を乗算して算出するコスト、ならびに、前記複数のプロセスまたはスレッドにおける各プロセスまたは各スレッドのアクセスコスト、および、前記レコード総数を乗算して算出するコストに基づいて、前記並列検索により検索処理される場合の検索処理時間に関するコストを算出することを特徴とする付記９に記載の検索制御装置。
【００８０】
（付記１１）前記第１算出部は、前記並列検索により検索処理される場合の検索処理時間に関するコストのうち、前記第１のプロセスまたはスレッドと前記複数のプロセスまたはスレッドとの間の転送コストを検索処理の実績に応じて更新し、更新後の転送コストに基づいて差を算出することを特徴とする付記１０に記載の検索制御装置。
【００８１】
（付記１２）前記推定部は、検索対象のレコードに含まれる項目の種類を用いて前記レコード数を推定することを特徴とする付記９〜１１のいずれか１つに記載の検索制御装置。
【符号の説明】
【００８２】
１  検索制御システム
１０  端末装置
１００  検索制御装置
１１０  通信部
１２０  記憶部
１２１  対象データベース
１２２  カタログ記憶部
１２３  統計情報記憶部
１２４  共有メモリ
１３０  制御部
１３１  受付部
１３２  推定部
１３３  第１算出部
１３４  第２算出部
１３５  判定部
１３６  検索部
Ｎ  ネットワーク
【図１】
2016162418.tif 000003
【図２】
2016162418.tif 000004
【図３】
2016162418.tif 000005
【図４】
2016162418.tif 000006
【図５】
2016162418.tif 000007
【図６】
2016162418.tif 000008
【図７】
2016162418.tif 000009
【図８】
2016162418.tif 000010
【図９】
2016162418.tif 000011
【図１０】
2016162418.tif 000012
【図１１】
2016162418.tif 000013