(57)【特許請求の範囲】
【請求項１】
データベースへのデータベースアクセスの要求を表すアクセス要求情報を登録しているアクセスキューと、データを書き込むことができる一時領域とを有するデータ記憶部と、
前記アクセスキューに登録されている前記アクセス要求情報に対応するデータベースアクセスを実行中アクセスとして同時に１以上実行し、前記実行中アクセスに対応するアクセス要求情報を前記アクセスキューから削除するアクセス部と、
前記データベースアクセスにおけるデッドロックを防止するデッドロック防止部と
を備え、
前記アクセス部は、前記データベースアクセスを実行する前に、前記データベースへの同時アクセス数が上限に達している場合に、前記デッドロック防止部にデッドロックの検知を依頼し、
前記デッドロック防止部は、
前記アクセス部にデッドロックの検知を依頼された場合に、前記実行中アクセスの任意の識別情報が、前記アクセスキューに登録されている前記アクセス要求情報のいずれかの識別情報と同じであるか判定することによりデッドロックを検知し、
デッドロックを検知した場合に、１の実行中アクセスを選択アクセスとして選択し、前記選択アクセスの全ての結果の内、前記データベースから取得していない結果である残り結果を前記データベースから取得し、前記残り結果を前記一時領域に書き込み、前記データベースに前記選択アクセスに対応する処理の終了を要求する検索装置。
【請求項２】
前記デッドロック防止部は、前記選択アクセスとして、アクセス結果のデータサイズが最小である実行中アクセスを選択する請求項１に記載の検索装置。
【請求項３】
前記データベースに格納されているデータの検索を要求する問合せを受信し、前記問合せを複数の計画ノードを有する木構造の実行計画に変換する問合せ処理部を備え、
前記問合せ処理部は、前記実行計画の１の計画ノードを対象ノードとして取得し、
前記対象ノードに対応する処理がデータベースアクセスを含む場合、前記データベースアクセスの情報を対象アクセス情報として前記アクセス部に送信し、
前記アクセス部は、前記対象アクセス情報を前記アクセスキューに登録し、
前記デッドロック防止部は、前記実行中アクセスに対応する任意の問合せが、前記アクセスキューが登録しているアクセス要求情報に対応する問合せのいずれかと同一であるか判定する請求項１又は２に記載の検索装置。
【請求項４】
データ記憶部が、データベースへのデータベースアクセスの要求を表すアクセス要求情報を登録しているアクセスキューと、データを書き込むことができる一時領域とを有し、
アクセス部が、前記アクセスキューに登録されている前記アクセス要求情報に対応するデータベースアクセスを実行中アクセスとして同時に１以上実行し、前記実行中アクセスに対応するアクセス要求情報を前記アクセスキューから削除し、
デッドロック防止部が、前記データベースアクセスにおけるデッドロックを防止し、
前記アクセス部が、前記データベースアクセスを実行する前に、前記データベースへの同時アクセス数が上限に達している場合に、前記デッドロック防止部にデッドロックの検知を依頼し、
前記デッドロック防止部が、
前記アクセス部にデッドロックの検知を依頼された場合に、前記実行中アクセスの任意の識別情報が、前記アクセスキューに登録されている前記アクセス要求情報のいずれかの識別情報と同じであるか判定することによりデッドロックを検知し、
デッドロックを検知した場合に、１の実行中アクセスを選択アクセスとして選択し、前記選択アクセスの全ての結果の内、前記データベースから取得していない結果である残り結果を前記データベースから取得し、前記残り結果を前記一時領域に書き込み、前記データベースに前記選択アクセスに対応する処理の終了を要求する検索方法。
【請求項５】
コンピュータに、
データベースへのデータベースアクセスの要求を表すアクセス要求情報を登録しているアクセスキューと、データを書き込むことができる一時領域とを有させ、
前記アクセスキューに登録されている前記アクセス要求情報に対応するデータベースアクセスを実行中アクセスとして同時に１以上実行させ、前記実行中アクセスに対応するアクセス要求情報を前記アクセスキューから削除させ、
前記データベースアクセスを実行する前に、前記データベースへの同時アクセス数が上限に達している場合に、前記実行中アクセスの任意の識別情報が、前記アクセスキューに登録されている前記アクセス要求情報のいずれかの識別情報と同じであるか判定することによりデッドロックを検知させ、
デッドロックを検知した場合に、１の実行中アクセスを選択アクセスとして選択させ、前記選択アクセスの全ての結果の内、前記データベースから取得していない結果である残り結果を前記データベースから取得させ、前記残り結果を前記一時領域に書き込ませ、前記データベースに前記選択アクセスに対応する処理の終了を要求させることにより、前記データベースアクセスにおけるデッドロックを防止させる検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索装置、検索方法、及び、検索プログラムに関する。
【背景技術】
【０００２】
１つ以上のデータベースにアクセスするために必要な情報を記憶しておき、検索要求を受け付け、検索要求に応答するために必要なデータを管理している外部のデータベースへアクセスして検索を実行する検索装置が開示されている（例えば、特許文献１参照）。特許文献１の技術では、検索装置は、事前に記憶したデータベースへのアクセスに関する定義を基に、データベースにアクセスし、結果を取得する。【０００３】
検索装置の一般的な問合せ処理の動作を説明する（例えば、非特許文献１参照）。検索装置は、複数の問合せを同時に受信すると、それらに対応する実行計画に従った検索処理を並列に実行する。
実行計画は木構造のデータであり、実行計画の各計画ノードは実行中状態と待ち状態との２つの状態の間を遷移する。１つの問合せの実行計画において、検索装置が同時に実行中状態とする計画ノードは１件のみであり、その他の計画ノードは待ち状態となる。
検索装置は、
結合処理を含む問合せ等から、複数のデータベースへのアクセスを含む実行計画を作成する場合があり、
あるデータベースアクセスの結果を１件取得した後、別のデータベースアクセスの結果を１件取得する場合がある。【０００４】
データベースには、同時アクセス数の上限が設定されている場合がある。【０００５】
問合せの実行可能性を保証するためのデータベースへの同時アクセス数の制御方法に関して、特許文献２では、データベースへの同時アクセス数を監視し、一定値未満になるまで待ち合わせる技術が開示されている。【０００６】
データベースからの結果取得方法に関して、非特許文献１では、データベースアクセスを１回実行する度に、データベースから結果を１件取得する技術が開示されている。
非特許文献２では、データベースアクセスを実行する際に、データベースから全ての結果を取得した当該データベースアクセスを終了させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第４４８３０３４号公報
【特許文献２】特開２００１−３３１４６３号公報
【非特許文献】
【０００８】
【非特許文献１】ＰｏｓｔｇｒｅＳＱＬ  １０．８  Ｄｏｃｕｍｅｎｔａｔｉｏｎ  ５６．２．１．  ＦＤＷ  Ｒｏｕｔｉｎｅｓ  Ｆｏｒ  Ｓｃａｎｎｉｎｇ  Ｆｏｒｅｉｇｎ  Ｔａｂｌｅｓ、［ｏｎｌｉｎｅ］、Ｔｈｅ  ＰｏｓｔｇｒｅＳＱＬ  Ｇｌｏｂａｌ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｇｒｏｕｐ、［令和１年６月１０日検索］、インターネット＜ｈｔｔｐｓ：／／ｗｗｗ．ｐｏｓｔｇｒｅｓｑｌ．ｏｒｇ／ｄｏｃｓ／１０／ｆｄｗ−ｃａｌｌｂａｃｋｓ．ｈｔｍｌ＃ＦＤＷ−ＣＡＬＬＢＡＣＫＳ−ＳＣＡＮ＞
【非特許文献２】ＰｏｓｔｇｒｅＳＱＬ  ９．１．２４  Ｄｏｃｕｍｅｎｔａｔｉｏｎ  ｄｂｌｉｎｋ、［ｏ  ｎ  ｌ  ｉ  ｎ  ｅ］  、Ｔｈｅ  ＰｏｓｔｇｒｅＳＱＬ  Ｇｌｏｂａｌ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｇｒｏｕｐ、［令和１年６月１０日検索］、インターネット＜ｈｔｔｐｓ：／／ｗｗｗ．ｐｏｓｔｇｒｅｓｑｌ．ｏｒｇ／ｄｏｃｓ／９．１／ｃｏｎｔｒｉｂ−ｄｂｌｉｎｋ−ｆｕｎｃｔｉｏｎ．ｈｔｍｌ＞
【発明の概要】
【発明が解決しようとする課題】
【０００９】
データベースに同時アクセス数の上限が設定されている場合に、特許文献２の技術と非特許文献１の技術とを組み合わせると、実行中のデータベースアクセスの総数がデータベースの同時アクセス数の上限に達しているときに、実行中のデータベースアクセスに対応する問合せに含まれるデータベースアクセスを新たに開始するよう要求した場合に、デッドロックが発生することがある。そのため、特許文献２の技術と非特許文献１の技術との組み合わせでは、問合せの実行可能性を保証できない。【００１０】
また、特許文献２の技術と非特許文献２の技術とを組み合わせると、デッドロックを防止できるが、一時ファイルのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）が多量に発生してデータベースアクセスの処理速度が低下することがある。【００１１】
従って、従来技術の組み合わせによっては、デッドロックが発生することを防ぐことと、データベースアクセスの処理速度の低下を防ぐこととを両立できないという課題があった。【００１２】
本発明は、実行中のデータベースアクセスの総数がデータベースの同時アクセス数の上限に達しているときに、実行中のデータベースアクセスに対応する問合せに含まれるデータベースアクセスを新たに開始するよう要求した場合に、デッドロックが発生することを防ぐことと、処理速度の低下を防ぐこととを両立することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の検索装置は、
データベースへのデータベースアクセスの要求を表すアクセス要求情報を登録しているアクセスキューと、データを書き込むことができる一時領域とを有するデータ記憶部と、
前記アクセスキューに登録されている前記アクセス要求情報に対応するデータベースアクセスを実行中アクセスとして同時に１以上実行し、前記実行中アクセスに対応するアクセス要求情報を前記アクセスキューから削除するアクセス部と、
前記データベースアクセスにおけるデッドロックを防止するデッドロック防止部と
を備え、
前記アクセス部は、前記データベースアクセスを実行する前に、前記データベースへの同時アクセス数が上限に達している場合に、前記デッドロック防止部にデッドロックの検知を依頼し、
前記デッドロック防止部は、
前記アクセス部にデッドロックの検知を依頼された場合に、前記実行中アクセスの任意の識別情報が、前記アクセスキューに登録されている前記アクセス要求情報のいずれかの識別情報と同じであるか判定することによりデッドロックを検知し、
デッドロックを検知した場合に、１の実行中アクセスを選択アクセスとして選択し、前記選択アクセスの全ての結果の内、前記データベースから取得していない結果である残り結果を前記データベースから取得し、前記残り結果を前記一時領域に書き込み、前記データベースに前記選択アクセスに対応する処理の終了を要求する。
【発明の効果】
【００１４】
本発明によれば、実行中のデータベースアクセスの総数がデータベースの同時アクセス数の上限に達しているときに、実行中のデータベースアクセスに対応する問合せに含まれるデータベースアクセスを新たに開始するよう要求した場合に、
アクセス部は、データベースアクセスを実行する前に、データベースへの同時アクセス数が上限に達している場合に、デッドロック防止部にデッドロックの検知を依頼し、
デッドロック防止部は、
アクセス部にデッドロックの検知を依頼された場合に、実行中アクセスの任意の識別情報が、アクセスキューに登録されているアクセス要求情報のいずれかの識別情報と同じであるか判定することによりデッドロックを検知し、
デッドロックを検知した場合に、１の実行中アクセスを選択アクセスとして選択し、選択アクセスの全ての結果の内、データベースから取得していない結果である残り結果をデータベースから取得し、残り結果を一時領域に書き込み、データベースに選択アクセスに対応する処理の終了を要求する。
従って、本発明によれば、デッドロックが発生することを防ぐことと、データベースアクセスの処理速度の低下を減らすこととを両立することができる。
【図面の簡単な説明】
【００１５】
【図１】実施の形態１に係る検索装置１０１の構成図。
【図２】実施の形態１に係るアクセス記憶領域１３３のデータ例。
【図３】実施の形態１に係る実行計画１３５の例。
【図４】実施の形態１に係るアクセスキュー１３７の例。
【図５】実施の形態１に係る検索装置１０１を用いた検索システムの構成図。
【図６】実施の形態１に係る検索装置１０１のハードウェア構成図。
【図７】実施の形態１に係るアクセス定義処理の動作を示すフローチャート。
【図８】実施の形態１に係るデータ検索処理の動作を示すフローチャート。
【図９】実施の形態１に係るステップＳ２０３の動作を示すフローチャート。
【図１０】実施の形態１に係るステップＳ３０３の動作を示すフローチャート。
【図１１】実施の形態１に係るステップＳ４０２の動作を示すフローチャート。
【図１２】実施の形態１に係るステップＳ４０３の動作を示すフローチャート。
【図１３】実施の形態１に係るステップＳ４０６の動作を示すフローチャート。
【図１４】実施の形態１に係るアクセスキュー１３７の例。
【図１５】実施の形態１に係るアクセス記憶領域１３３のデータ例。
【図１６】実施の形態１に係るアクセス記憶領域１３３のデータ例。
【図１７】実施の形態１に係るアクセスキュー１３７の例。
【発明を実施するための形態】
【００１６】
実施の形態１．
以下、本実施の形態について、図面を参照しながら詳細に説明する。
【００１７】
＊＊＊構成の説明＊＊＊
図１は、本実施の形態に係る検索装置１０１の構成例を示す。
検索装置１０１は、
データベース１５０に接続されており、
外部の検索アプリケーション３００から問合せ３０１を受信し、
受信した問合せ３０１に対応する命令をデータベース１５０に送信し、
データベース１５０から送信した命令に対応する検索結果を受信し、
受信した検索結果を検索アプリケーション３００に送信する。
アプリケーションは、アプリケーションプログラムのことである。以下、アプリケーションプログラムをアプリケーションと記載する。
【００１８】
データベース１５０は、典型的には、
検索装置１０１の外部のデータベースであり、
検索部１５１と、データ格納領域１５２とから構成され、
問合せ３０１に対する検索結果を検索装置１０１に送信する。
【００１９】
検索部１５１は、検索装置１０１から要求されたデータベースアクセスを処理する。
データベースアクセスは、データベース１５０にアクセスする必要がある処理のことであり、一時領域１３４にアクセスする処理を含む。
【００２０】
データ格納領域１５２は、検索部１５１の検索対象であるデータを格納している。
【００２１】
検索アプリケーション３００は、
問合せ３０１と、検索結果３０２とを有し、
問合せ３０１を検索装置１０１に送信する。
【００２２】
問合せ３０１は、
データベース１５０の検索を要求する問合せであり、
データベース１５０に格納されているデータの検索を要求する命令であり、
検索装置１０１がデータを検索するための問合せである。
問合せ３０１が検索装置１０１内のデータの検索を要求する場合もあるが、以下では、問合せ３０１がデータベース１５０の検索を要求する場合について説明する。
【００２３】
検索結果３０２は、問合せ３０１に対応する結果を受け取るための領域である。
【００２４】
検索装置１０１は、アクセス定義部１１０と、検索処理部１２０と、データ記憶部１３０とから構成される。
【００２５】
アクセス定義部１１０は、
定義アプリケーション２００からアクセス定義２０１を受信し、
受信したアクセス定義２０１をアクセス定義１３１に変換し、
データ記憶部１３０にアクセス定義１３１を格納する。
【００２６】
定義アプリケーション２００は、検索装置１０１がデータベースアクセスする際に必要なアクセス定義２０１を有する。
【００２７】
アクセス定義１３１は、データベース１５０の場所、データベース１５０への同時アクセス数の上限である上限１３２等、データベース１５０へのアクセスに必要な情報から成る。
アクセス定義２０１と、アクセス定義１３１とは形式が異なるのみである。そのため、以下ではアクセス定義１３１について説明する。以下のアクセス定義１３１に関する説明は、アクセス定義２０１にもあてはまる。
【００２８】
検索処理部１２０は、問合せ処理部１２１と、アクセス部１２２と、監視部１２３と、デッドロック防止部１２４とから構成される。
【００２９】
問合せ処理部１２１は、検索アプリケーション３００から問合せ３０１を受信する。
問合せ処理部１２１は、
受信した問合せ３０１に対応する実行計画１３５を生成し、
実行計画１３５に従い処理を実行し、
実行計画１３５がデータベースアクセスを含む場合、当該データベースアクセスの情報をアクセス部１２２に提供し、アクセス部１２２に当該データベースアクセスの全ての結果を１件ずつ取得するよう要求する。
問合せ処理部１２１は、典型的には、アクセス部１２２から取得したデータベースアクセスの結果を１件ずつ処理する。
１件の結果は、対象アクセスの結果全体が表形式のデータである場合、表の１行に対応する。この場合において、対象アクセスの結果の総数は、表の行数と同じである。
問合せ処理部１２１は、
データベースアクセスに関する処理を開始する前に、監視部１２３にデータベース１５０への同時アクセス数１３６を問い合わせ、
同時アクセス数１３６が上限１３２に達していない場合、データベースアクセスに関する処理を開始し、
それ以外の場合、デッドロック防止部１２４にデッドロックの検知を依頼し、デッドロックが発生している場合、デッドロック防止部１２４にデッドロックの解消を依頼する。
同時アクセス数１３６は、データベース１５０への同時アクセス数である。
【００３０】
アクセス部１２２は、問合せ処理部１２１から受信したデータベースアクセスの情報と、アクセス定義１３１とを基に、データベースアクセスを実行する。
データベースアクセスの方法は、検索条件を表す問合せをデータベース１５０に転送して実行を委託する方法でも良く、問合せの検索手順を表す実行計画をデータベース１５０に転送して実行を委託する方法でも良く、その他の方法でも良い。
アクセス部１２２は、問合せ処理部１２１からデータベースアクセスの情報を受信する度に、検索部１５１にデータベースアクセスの開始を依頼するための処理を実行する。
【００３１】
監視部１２３は、問合せ処理部１２１から同時アクセス数１３６の問合せがあった場合に、
同時アクセス数１３６を取得し、
アクセス部１２２にデータベース１５０への同時アクセス数１３６を回答する。
【００３２】
デッドロック防止部１２４は、アクセス部１２２にデッドロックの検知を依頼された場合に、アクセス記憶領域１３３と、アクセスキュー１３７とを参照してデッドロックを検知する。
デッドロック防止部１２４は、アクセス部１２２にデッドロックの解消を依頼された場合に、
アクセス記憶領域１３３を参照して実行中アクセスのいずれか１件を選択アクセスとして選択し、
選択アクセスに対応する残り結果を取得し、
一時領域１３４に取得した残り結果を書き込み、
当該データベースアクセスの終了をデータベース１５０の検索部１５１に依頼する。
デッドロック防止部１２４は、アクセス部１２２にデッドロックの検知を依頼された場合に、実行中アクセスの任意の識別情報が、アクセスキュー１３７に登録されているアクセス要求情報のいずれかの識別情報と同じであるか判定することによりデッドロックを検知する。
識別情報は、実行中アクセスを識別する情報であり、具体例として、問合せＩＤである。
問合せＩＤは、データベースアクセスに対応する問合せ３０１を示す識別子である。
デッドロックの検知は、デッドロックが発生する可能性を検知することを含む。
デッドロックの解消は、デッドロックが発生する可能性を解消することを含む。
実行中アクセスは、実行中のデータベースアクセスのことである。実行中のデータベースアクセスには、他のデータベースアクセスの完了を待つことも含まれる。
実行中アクセスに対応する処理をデータベース１５０が実行している場合、実行中アクセスは実行中状態である。実行中アクセスは、実行中状態でない場合、待ち状態である。
残り結果は、１の実行中アクセスの全ての結果の内、データベース１５０から取得していない結果である。
【００３３】
データ記憶部１３０は、アクセス定義１３１と、アクセス記憶領域１３３と、一時領域１３４と、実行計画１３５と、同時アクセス数１３６と、アクセスキュー１３７とを格納することができる。
【００３４】
アクセス記憶領域１３３は、実行中のデータベースアクセス全件について、実行中のデータベースアクセスの情報を表す実行中アクセス情報を記憶している。
【００３５】
図２は、実行中アクセス情報のデータの例を示す。本図の表の１行が、１の実行中アクセス情報に該当する。
本図に示すように、実行中アクセス情報は、問合せＩＤと、アクセスＩＤと、必要情報と、一時領域フラグと、結果データサイズとから構成される。
アクセスＩＤは、データベースアクセスの識別子を表す。
必要情報は、データベースアクセスの結果を取得するために必要な情報を表す。
一時領域フラグは、データベースアクセスにおいて、一時領域１３４へのアクセスする必要の有無を表す。
結果データサイズは、
典型的には、データベースアクセスの結果のデータサイズの推定値であり、
データベースアクセスの結果のデータサイズの実績値であっても良い。
【００３６】
一時領域１３４は、データベースアクセスの残り結果を格納する領域である。
【００３７】
実行計画１３５は、
典型的には、図３に例示するような木構造のデータであり、
問合せ処理部１２１が問合せ３０１を基に作成したものであり、
検索手順を表すものである。
【００３８】
同時アクセス数１３６は、データベース１５０への同時アクセス数をリアルタイムで反映している。
【００３９】
アクセスキュー１３７は、アクセス部１２２が開始を要求するデータベースアクセス全件について、アクセス要求情報を記憶する。
アクセス要求情報は、
データベースアクセスの開始要求を表し、
典型的には、アクセス部１２２が開始を要求するデータベースアクセスに対応する問合せ３０１の識別子を表す問合せＩＤと、アクセスキュー１３７における開始要求の順番を表す開始要求番号とから構成される。
図４は、アクセスキュー１３７データの例である。図４の表の１行が、１件のアクセス要求情報である。
【００４０】
図５は、検索装置１０１を用いた検索システムの構成例である。
本図に示すように、検索システムは、検索装置１０１と、データ収集装置４０１と、データ検索装置５０１と、外部データ管理装置６０１とから構成される。
【００４１】
データ収集装置４０１は、定義アプリケーション２００を備える。
【００４２】
データ検索装置５０１は、検索アプリケーション３００を備える。
【００４３】
外部データ管理装置６０１は、データベース１５０を備える。
【００４４】
データ収集装置４０１と、データ検索装置５０１と、外部データ管理装置６０１とは、検索システムが１つだけ備えていても良く、複数備えていても良い。
データ収集装置４０１、データ検索装置５０１、及び／又は、外部データ管理装置６０１は、検索装置１０１に内包されていても良い。
【００４５】
図６は、検索装置１０１のハードウェア構成例を示す図である。
本図に示すように、検索装置１０１は一般的なコンピュータ１０から構成される。
演算装置７０１と、外部記憶装置７０２と、主記憶装置７０３と、通信装置７０４とは、バス７０５を介して接続されている。
なお、本図に示す構成は、検索装置１０１のハードウェア構成の一例に過ぎず、他の構成であっても良い。
具体例として、表示ディスプレイ等の出力装置と、マウス、キーボード等の入力装置とがバス７０５に接続されていても良い。
【００４６】
演算装置７０１は、検索プログラムを実行することができる装置であり、具体例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
検索装置１０１は、演算装置７０１を複数備えていても良い。これら複数の演算装置は、検索プログラムの実行を分担する。
【００４７】
外部記憶装置７０２は、具体例として、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、及び／又は、ハードディスクである。
【００４８】
主記憶装置７０３は、通常はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）であり、他の装置であっても良い。
【００４９】
通信装置７０４は、通常はイーサネット（登録商標）に対応した通信カードであり、他の装置であっても良い。
検索装置１０１の各部は、通信装置７０４を利用して、定義アプリケーション２００、検索アプリケーション３００、又は、データベース１５０と通信する。
【００５０】
検索プログラムは、通常は外部記憶装置７０２に記憶されており、主記憶装置７０３にロードされ、順次演算装置７０１に読み込まれて実行される。
検索プログラムは、検索装置１０１の各部の機能を実現するプログラムであり、主記憶装置７０３に記憶されていても良い。
検索プログラムは、コンピュータ１０が読み取り可能な可搬記憶媒体に記憶されていても良く、プログラムプロダクトとして提供されても良い。可搬記憶媒体は、具体例として、ＮＡＮＤフラッシュである。
【００５１】
データ記憶部１３０は、通常は外部記憶装置７０２により実現されるが、主記憶装置７０３により実現されても良く、外部記憶装置７０２と主記憶装置７０３との組み合わせにより実現されても良い。
【００５２】
外部記憶装置７０２にはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されており、ＯＳの少なくとも一部が主記憶装置７０３にロードされ、演算装置７０１はＯＳを実行しながら、検索プログラムを実行する。
検索プログラムは、ＯＳの機能を利用しても良い。
また、本実施の形態において、典型的には、処理の結果を示す、情報、データ、信号値、及び／又は、変数値が主記憶装置７０３にファイルとして記憶されている。
【００５３】
＊＊＊動作の説明＊＊＊
本実施の形態に係る検索装置１０１の動作を説明する。
検索装置１０１の動作手順は、検索方法に相当する。また、検索装置１０１の動作を実現するプログラムは、検索プログラムに相当する。
【００５４】
図７は、検索装置１０１のデータベース１５０へのアクセスを定義するアクセス定義処理の動作を示すフローチャートの例である。本図に基づいて、アクセス定義処理を説明する。
【００５５】
（ステップＳ１０１：定義受信処理）
アクセス定義部１１０は、定義アプリケーション２００からアクセス定義２０１を受信する。
【００５６】
（ステップＳ１０２：定義変換処理）
アクセス定義部１１０は、受信したアクセス定義２０１を解釈し、アクセス定義２０１をアクセス定義１３１に変換する。
【００５７】
（ステップＳ１０３：定義格納処理）
アクセス定義部１１０は、アクセス定義１３１をデータ記憶部１３０に格納する。
【００５８】
図８は、検索装置１０１のデータ検索処理の動作を示すフローチャートの例である。本図に基づいて、データ検索処理を説明する。
本図に示す動作の開始前に、アクセス定義１３１がデータ記憶部１３０に格納されているものとする。
【００５９】
実行計画１３５は、ステップＳ２０２において生成されるため、データ検索処理の開始前にデータ記憶部１３０に格納されていない。
【００６０】
（ステップＳ２０１：問合せ受信処理）
問合せ処理部１２１は、検索アプリケーション３００から問合せ３０１を受信する。
【００６１】
（ステップＳ２０２：計画生成処理）
問合せ処理部１２１は、問合せ３０１を解析し、実行計画１３５を生成する。
問合せ処理部１２１は、実行計画１３５に含まれる各データベースアクセスの結果データサイズを求める。
【００６２】
（ステップＳ２０３：問合せ実行処理）
問合せ処理部１２１は、
実行計画１３５を基に問合せ３０１を実行し、
問合せ３０１の実行結果を検索アプリケーション３００に送信する。
本ステップの詳細は後述する。
【００６３】
図９は、ステップＳ２０３の動作を示すフローチャートの例である。本図を用いてステップＳ２０３の詳細を説明する。
検索装置１０１は、以下の処理において、ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）における一般的な手法を用いて良い。
【００６４】
（ステップＳ３０１：ノード取得処理）
問合せ処理部１２１は、典型的には深さ優先探索により実行計画の木を走査し、１の計画ノードを対象ノードとして取得する。
問合せ処理部１２１は、実行計画１３５が図３に示すものである場合、「アクセス１Ａ」、「アクセス１Ｂ」、「結合」の順に取得する。
問合せ処理部１２１は、１の問合せ３０１に関する本フローチャートの処理を最初に実行する場合に、頂点ノードを取得しても良い。
頂点ノードは、ルートノードとも呼ばれる。
【００６５】
（ステップＳ３０２：アクセス判定処理）
問合せ処理部１２１は、対象ノードがデータベースアクセスを含むか否かを判定する。
問合せ処理部１２１は、
判定結果がＹＥＳの場合、ステップＳ３０３に進み、
それ以外の場合、ステップＳ３０４に進む。
【００６６】
（ステップＳ３０３：結果取得処理）
以下、対象ノードに対応するデータベースアクセスを対象アクセスとする。
問合せ処理部１２１は、アクセス部１２２に、
対象アクセスの情報を対象アクセス情報として送信し、
対象ノードに対応する１件の結果を、対象結果として取得させる。
本ステップにおいて、問合せ処理部１２１は、対象結果を取得できない場合もある。
本ステップの詳細は後述する。
【００６７】
（ステップＳ３０４：結果取得処理）
問合せ処理部１２１は、対象ノードに対応する１件の結果を、対象結果として取得する。
本ステップにおいて、問合せ処理部１２１は、対象結果を取得できない場合もある。
【００６８】
（ステップＳ３０５：頂点判定処理）
問合せ処理部１２１は、対象ノードが頂点ノードか否かを判定する。
問合せ処理部１２１は、
判定結果がＹＥＳの場合、ステップＳ３０６に進み、
それ以外の場合、ステップＳ３０１に戻る。
【００６９】
（ステップＳ３０６：取得判定処理）
問合せ処理部１２１は、対象結果を取得できたか否かを判定する。
問合せ処理部１２１は、
判定結果がＹＥＳの場合、ステップＳ３０７に進み、
それ以外の場合、ステップＳ２０３の処理を終了する。
【００７０】
（ステップＳ３０７：結果送信処理）
問合せ処理部１２１は、対象結果を検索アプリケーション３００に送信し、ステップＳ３０１に戻る。
【００７１】
図１０は、ステップＳ３０３の動作を示すフローチャートの例である。本図を用いて、ステップＳ３０３の詳細を説明する。
【００７２】
ステップＳ３０３の全ての処理は、アクセス部１２２が主導する。
アクセス部１２２は、以下の処理において、アクセス記憶領域１３３、同時アクセス数１３６、及び／又は、アクセスキュー１３７を参照及び／又は更新する際に、１のデータベースアクセスに対応するプロセスのみが同時に実行することができるように排他ロックを取得する。
【００７３】
（ステップＳ４０１：判定処理）
アクセス部１２２は、対象アクセスに対応する１件目の対象結果を取得する処理であるか否かを判定する。
アクセス部１２２は、
判定結果がＹＥＳの場合、ステップＳ４０２に進み、
それ以外の場合、ステップＳ４０３に進む。
【００７４】
（ステップＳ４０２：アクセス開始処理）
アクセス部１２２は、対象アクセスを開始する。
本ステップの詳細は後述する。
【００７５】
（ステップＳ４０３：結果取得処理）
アクセス部１２２は、対象アクセスの１件の結果を対象結果として取得する。
本ステップの詳細は後述する。
【００７６】
（ステップＳ４０４：生成判定処理）
アクセス部１２２は、ステップＳ４０３で対象結果を取得できたか否かを判定する。
アクセス部１２２は、
判定結果がＹＥＳの場合、ステップＳ４０５に進み、
それ以外の場合、ステップＳ４０６に進む。
【００７７】
（ステップＳ４０５：結果送信処理）
アクセス部１２２は、対象結果を問合せ処理部１２１に送信する。
【００７８】
（ステップＳ４０６：アクセス終了処理）
アクセス部１２２は、対象アクセスを終了する。
本ステップの詳細は後述する。
【００７９】
図１１は、ステップＳ４０２の動作を示すフローチャートの例である。本図を用いてステップＳ４０２の詳細を説明する。
【００８０】
（ステップＳ５０１：問合せ受信処理）
アクセス部１２２は、
対象アクセスの情報を対象アクセス情報として問合せ処理部１２１から受信し、
受信した対象アクセス情報を基に、アクセスキュー１３７に対象アクセスのアクセス要求情報を、対象要求情報として登録する。
対象アクセス情報には、問合せＩＤと、アクセスＩＤと、必要情報と、結果データサイズの情報とが含まれる。
【００８１】
（ステップＳ５０２：待機処理）
アクセス部１２２は、
対象要求情報の開始要求番号が１番になった場合、ステップＳ５０３に進み、
それ以外の場合、本ステップの処理を続ける。
【００８２】
（ステップＳ５０３：上限判定処理）
アクセス部１２２は、監視部１２３に、同時アクセス数１３６が上限１３２に達しているか否かを問い合わせる。
監視部１２３は、同時アクセス数１３６がアクセス定義１３１の上限１３２（以下、上限１３２の値をＮとする）に達しているか否かを回答する。
アクセス部１２２は、
監視部１２３の回答がＹＥＳの場合、ステップＳ５０４に進み、
それ以外の場合、ステップＳ５０９に進む。
【００８３】
（ステップＳ５０４：要求判定処理）
アクセス部１２２は、デッドロック防止部１２４にデッドロックの検知を依頼する。
本ステップにおいて、アクセス記憶領域１３３において一時領域フラグがＯＦＦとなっている実行中アクセス情報がＮ個ある。以下、Ｎ個の実行中アクセス情報に対応するデータベースアクセスに対して重複がないよう通し番号ｉを割り当て（ｉ＝１，２，．．．，Ｎ）、各データベースアクセスをＲｅ（ｉ）と表記する。通し番号の割り当て方は、任意であって良い。
デッドロック防止部１２４は、任意のｉ∈｛１，２，．．．，Ｎ｝について、同時実行中のデータベースアクセスＲｅ（ｉ）に対応する問合せＩＤを有するアクセス要求情報がアクセスキュー１３７に登録されているか否かを判定する。
デッドロック防止部１２４は、
判定結果がＹＥＳの場合、ステップＳ５０５に進み、
それ以外の場合、ステップＳ５０３に戻る。
判定結果は、実行中アクセスに対応する任意の問合せＩＤを、アクセスキュー１３７に登録されているいずれかのアクセス要求情報が有する場合に、ＹＥＳとなる。
【００８４】
（ステップＳ５０５：アクセス選択処理）
アクセス部１２２は、デッドロック防止部１２４にデッドロックの解消を依頼する。
デッドロック防止部１２４は、アクセス記憶領域１３３を参照し、結果データサイズが最小であるデータベースアクセスを、選択アクセスとして選択する。以下、選択アクセスの通し番号を、ｉ´とする。
デッドロック防止部１２４は、結果データサイズが最小であるデータベースアクセスが複数ある場合、いずれか１つの結果データサイズが最小であるデータベースアクセスを、選択アクセスとして選択する。
【００８５】
（ステップＳ５０６：情報更新処理）
デッドロック防止部１２４は、
Ｒｅ（ｉ´）の残り結果を一時領域１３４に書き込み、
アクセス記憶領域１３３においてＲｅ（ｉ´）の必要情報を一時領域１３４から結果を取得するために必要な情報に更新する。
【００８６】
（ステップＳ５０７：アクセス終了処理）
デッドロック防止部１２４は、Ｒｅ（ｉ´）に対応する処理の終了をデータベース１５０に要求する。
【００８７】
（ステップＳ５０８：フラグ変更処理）
デッドロック防止部１２４は、Ｒｅ（ｉ´）に対応する一時領域フラグをＯＮに変更する。
【００８８】
（ステップＳ５０９：アクセス開始処理）
アクセス部１２２は、
対象アクセスの開始をデータベース１５０に要求し、
データベース１５０から必要情報を取得する。
【００８９】
（ステップＳ５１０：要求削除処理）
アクセス部１２２は、
対象要求情報をアクセスキュー１３７から削除し、
アクセスキュー１３７に登録されている他のアクセス要求情報全ての開始要求番号を１デクリメントする。
【００９０】
（ステップＳ５１１：登録処理）
アクセス部１２２は、対象アクセスの実行中アクセス情報をアクセス記憶領域１３３に登録する。
実行中アクセス情報には、ステップＳ５０９で取得した必要情報が含まれる。
【００９１】
（ステップＳ５１２：インクリメント処理）
アクセス部１２２は、同時アクセス数１３６を１インクリメントする。
【００９２】
図１２は、ステップＳ４０３の動作を示すフローチャートの例である。本図を用いてステップＳ４０３の詳細を説明する。
【００９３】
（ステップＳ６０１：情報受信処理）
アクセス部１２２は、対象アクセスの情報を、対象アクセス情報として問合せ処理部１２１から受信する。
対象アクセス情報には、問合せＩＤと、アクセスＩＤとが含まれる。
【００９４】
（ステップＳ６０２：フラグ判定処理）
アクセス部１２２は、
ステップＳ６０１で受信した対象アクセス情報に含まれる問合せＩＤとアクセスＩＤとを含む実行中アクセス情報をアクセス記憶領域１３３から取得し、
取得した実行中アクセス情報の一時領域フラグがＯＦＦであるか否かを判定する。
アクセス部１２２は、
判定結果がＹＥＳの場合、ステップＳ６０３に進み、
それ以外の場合、ステップＳ６０４に進む。
【００９５】
（ステップＳ６０３：結果取得処理）
アクセス部１２２は、ステップＳ６０２で取得した実行中アクセス情報に含まれる必要情報を用いて、一時領域１３４から１件の結果を対象結果として取得する。
アクセス部１２２は、対象結果を取得できない場合もある。
【００９６】
（ステップＳ６０４：結果取得処理）
アクセス部１２２は、ステップＳ６０２で取得した実行中アクセス情報に含まれる必要情報を用いて、データベース１５０から１件の結果を対象結果として取得する。
アクセス部１２２は、対象結果を取得できない場合もある。
【００９７】
図１３は、ステップＳ４０６の動作を示すフローチャートの例である。本図を用いてステップＳ４０６の詳細を説明する。
【００９８】
（ステップＳ７０１：情報取得処理）
アクセス部１２２は、対象アクセスの情報を、対象アクセス情報として問合せ処理部１２１から受信する。
対象アクセス情報には、問合せＩＤと、アクセスＩＤとが含まれる。
【００９９】
（ステップＳ７０２：フラグ判定処理）
アクセス部１２２は、
ステップＳ７０１で受信した対象アクセス情報に含まれる問合せＩＤとアクセスＩＤとを含む実行中アクセス情報をアクセス記憶領域１３３から取得し、
取得した実行中アクセス情報の一時領域フラグがＯＦＦであるか否かを判定する。
アクセス部１２２は、
判定結果がＹＥＳの場合、ステップＳ７０３に進み、
それ以外の場合、ステップＳ７０４に進む。
【０１００】
（ステップＳ７０３：削除処理）
アクセス部１２２は、ステップＳ５０６で一時領域１３４に書き込んだ残り結果を削除する。
【０１０１】
（ステップＳ７０４：アクセス終了処理）
アクセス部１２２は、対象アクセスの終了をデータベース１５０に要求する。
【０１０２】
（ステップＳ７０５：情報削除処理）
アクセス部１２２は、対象アクセス情報に含まれる問合せＩＤとアクセスＩＤとを含む実行中アクセス情報を、アクセス記憶領域１３３から削除する。
【０１０３】
＊＊＊実施の形態１の特徴＊＊＊
検索装置１０１は、
データベース１５０へのデータベース１５０アクセスの要求を表すアクセス要求情報を登録しているアクセスキュー１３７と、データを書き込むことができる一時領域とを有するデータ記憶部１３０と、
アクセスキュー１３７に登録されているアクセス要求情報に対応するデータベース１５０アクセスを実行中アクセスとして同時に１以上実行し、実行中アクセスに対応するアクセス要求情報をアクセスキュー１３７から削除するアクセス部１２２と、
データベース１５０アクセスにおけるデッドロックを防止するデッドロック防止部１２４と
を備え、
アクセス部１２２は、データベース１５０アクセスを実行する前に、データベース１５０への同時アクセス数１３６が上限に達している場合に、デッドロック防止部１２４にデッドロックの検知を依頼し、
デッドロック防止部１２４は、
アクセス部１２２にデッドロックの検知を依頼された場合に、実行中アクセスの任意の識別情報が、アクセスキュー１３７に登録されているアクセス要求情報のいずれかの識別情報と同じであるか判定することによりデッドロックを検知し、
デッドロックを検知した場合に、１の実行中アクセスを選択アクセスとして選択し、前記選択アクセスの全ての結果の内、前記データベースから取得していない結果である残り結果を前記データベースから取得し、前記残り結果を前記一時領域に書き込み、データベース１５０に選択アクセスに対応する処理の終了を要求する。
【０１０４】
デッドロック防止部１２４は、選択アクセスとして、アクセス結果のデータサイズが最小である実行中アクセスを選択する。
【０１０５】
検索装置１０１は、データベース１５０に格納されているデータの検索を要求する問合せ３０１を受信し、問合せ３０１を複数の計画ノードを有する木構造の実行計画１３５に変換する問合せ処理部１２１を備え、
問合せ処理部１２１は、
実行計画１３５の１の計画ノードを対象ノードとして取得し、
対象ノードに対応する処理がデータベース１５０アクセスを含む場合、データベース１５０アクセスの情報を対象アクセス情報としてアクセス部１２２に送信し、
アクセス部１２２は、対象アクセス情報をアクセスキュー１３７に登録し、
デッドロック防止部１２４は、実行中アクセスに対応する任意の問合せ３０１が、アクセスキュー１３７が登録しているアクセス要求情報に対応する問合せ３０１のいずれかと同一であるか判定する。
【０１０６】
＊＊＊実施の形態１の効果の説明＊＊＊
特許文献２の技術と、非特許文献１の技術とを組み合わせたとき、実行中のデータベースアクセスの総数がデータベース１５０の同時アクセス数の上限に達している場合、かつ、実行中の任意のデータベースアクセスに対応する問合せ３０１に含まれるデータベースアクセスを新たに開始した場合にデッドロックが発生する。
【０１０７】
本実施の形態によれば、同時アクセス数１３６が上限１３２に達していると監視部１２３が判定した場合に、デッドロック防止部１２４が、アクセス記憶領域１３３と、アクセスキュー１３７とに基づき、アクセス部１２２が実行中のあるデータベースアクセスに対応する問合せ３０１に含まれる新たなデータベースアクセスを開始しようとしているか否かを判定する。これにより、デッドロック防止部１２４は、デッドロックを検知することができる。
デッドロック防止部１２４は、デッドロックを検知した場合に、アクセス記憶領域１３３から実行中アクセス情報を１件選択し、選択した実行中アクセス情報に対応する残り結果をデータベース１５０から取得し、取得した残り結果を一時領域１３４に書き込み、実行中のデータベースアクセスの結果を得るために用いるデータを全て取得して選択した実行中アクセス情報に対応するデータベースアクセスを終了させる。これにより、デッドロック防止部１２４は、不要なＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）を防ぎつつデッドロックを解消することが可能となる。
従って、本実施の形態によれば、デッドロックを防止することと、データベースアクセスの処理速度の低下を減らすこととを両立することができる。
【０１０８】
また、特許文献２の技術と非特許文献２の技術を組み合わせると、結果データサイズが大きい場合にはＩ／Ｏが多量に発生し、処理速度が低下する場合がある。
【０１０９】
本実施の形態によれば、実際にデッドロックが発生する場合にのみデータベースアクセスの結果を一時領域１３４に書き込むため、特許文献２の技術と、非特許文献２の技術との組み合わせのように一時ファイルへの不要な書込みを回避することができ、処理速度を向上させることができる。
さらに、デッドロックが発生している場合に、実行中のデータベースアクセスの内、結果データサイズが最小のものを選択することにより、一時ファイルのＩ／Ｏデータサイズを削減することができ、処理速度を向上させることができる。
【０１１０】
以下、具体的な事例を用いて効果の説明を行う。
【０１１１】
検索装置１０１が、アクセス１Ａから結果を１件取得した後にアクセス１Ｂから結果を１件取得する問合せ１と、アクセス２Ａから結果を１件取得した後にアクセス２Ｂから結果を１件取得する問合せ２とを同時に受信する場合を考える。以下、データベースアクセスの同時アクセス数の上限１３２は２とし、アクセス１Ａと１Ｂとの結果データサイズは１ＧＢとし、アクセス２Ａと２Ｂとの結果データサイズは１０ＧＢとする。
検索装置１０１は、複数の問合せ３０１を並列に実行することができる。そのため、検索装置１０１は、アクセス１Ａと２Ａとを並列に開始した後、アクセス１Ｂと２Ｂとを並列に開始する場合がある。
【０１１２】
問合せ処理部１２１がアクセス１Ａの開始をアクセス部１２２に依頼すると、アクセス部１２２が図１１のフローチャートに示す動作を実行することによりアクセス１Ａが開始される。
図１１のフローチャートに示す動作の完了時に、同時アクセス数１３６は１となり、アクセス記憶領域１３３にはアクセス１Ａに対応する実行中アクセス情報が登録され、アクセスキュー１３７は空となる。
【０１１３】
問合せ処理部１２１がアクセス２Ａの開始をアクセス部１２２に依頼すると、アクセス部１２２が図１１のフローチャートに示す動作を実行することによりアクセス２Ａが開始される。
図１１のフローチャートに示す動作の完了時に、同時アクセス数１３６は２となり、アクセス記憶領域１３３にはアクセス１Ａと２Ａとに対応する実行中アクセス情報が登録され、アクセスキュー１３７は空となる。
【０１１４】
この時点において、
アクセス記憶領域１３３に登録されている情報は図２に示すようなものであり、
アクセス記憶領域１３３に登録されているアクセス１Ａと２Ａとは待ち状態である。
【０１１５】
問合せ処理部１２１がアクセス１Ｂの開始をアクセス部１２２に依頼すると、アクセス部１２２がステップＳ５０１の処理を実行してアクセス１Ｂに対応する開始要求をアクセスキュー１３７に登録する。
この時点において、アクセスキュー１３７は図１４のようになる。
同時アクセス数１３６は２であるため、図１１のステップＳ５０３の結果はＹＥＳとなる。アクセス記憶領域１３３に登録されているアクセス１Ａと２Ａとは待ち状態であるため、ステップＳ５０５に到達するまで、ステップＳ５０３の結果は常にＹＥＳとなる。
アクセス部１２２は、
ステップＳ５０４の結果がＮＯの場合、アクセス部１２２はステップＳ５０３に戻り、
後述の処理を実行することにより、アクセス２Ｂの開始要求をアクセスキュー１３７に登録する。
この時点において、アクセスキュー１３７は図４のようになる。
そのため、アクセス部１２２は、ステップＳ５０４の結果がＹＥＳとなるので、ステップＳ５０５に進む。
アクセス部１２２がステップＳ５０５〜Ｓ５０８の処理を実行することにより、アクセス記憶領域１３３に登録されている実行中アクセス情報２件の内、結果データサイズが最小であるアクセス１Ａのデータベース１５０における処理が終了し、アクセス１Ａの必要情報が一時領域１３４からの結果取得に必要な情報に更新される。ステップＳ５０５〜Ｓ５０８の処理完了時点におけるアクセス記憶領域１３３に登録されている情報は図１５のようになる。
アクセス部１２２は、ステップＳ５０９〜Ｓ５１２の処理を実行する。ステップＳ５０９〜Ｓ５１２の処理完了時点におけるアクセス記憶領域１３３に登録されている情報は図１６のようになる。また、ここで、アクセスキュー１３７は空である。ここで、アクセスキュー１３７は図１７のようになる。
【０１１６】
問合せ処理部１２１がアクセス２Ｂの開始をアクセス部１２２に依頼すると、アクセス部１２２がステップＳ５０１の処理を実行してアクセス２Ｂに対応する開始要求をアクセスキュー１３７に登録する。
アクセス１Ｂが開始されている場合、アクセスキュー１３７には、図１７に示すように問合せ２に対応する開始要求１件が登録されている。そのため、ステップＳ５０２の結果はＹＥＳとなり、ステップＳ５０３に進む。
アクセス２Ａと１Ｂとの２件が実行中であるため、ステップＳ５０３の結果はＹＥＳとなり、検索装置１０１はステップＳ５０４に進む。
アクセスキュー１３７に登録されている開始要求は問合せ２に対応するもの１件のみであるため、ステップＳ５０４の結果はＮＯとなる。
この時点において、アクセス１Ａは終了状態、アクセス２Ａと１Ｂとは実行中状態である。
その後、以下の２つのケースのいずれかが起こり得る。
ケース１．アクセス部１２２がアクセス１Ａに対応する開始要求をアクセスキュー１３７に登録する。
ケース２．アクセス２Ａ又は１Ｂが終了する。
【０１１７】
ケース１は、具体例として、アクセス１Ａが内表へのアクセスに当たる場合に起こり得る。本ケースにおいて、アクセスキュー１３７が図４のようになり、ステップＳ５０４の結果がＹＥＳとなる。
そのため、デッドロック防止部１２４は、ステップＳ５０５に進む。デッドロック防止部１２４は、ステップＳ５０５〜Ｓ５０８の処理を実行することにより、アクセス１Ｂに対応するデータベースアクセスを終了させ、デッドロックを解消することができる。
結果として、アクセス部１２２はアクセス２Ｂを開始することができる。
【０１１８】
ケース２の場合、ステップＳ５０３の結果がＮＯとなるため、アクセス部１２２は、ステップＳ５０９に進み、アクセス２Ｂを開始することができる。
従って、いずれのケースにおいても、アクセス部１２２はアクセス２Ｂを開始することができる。
【０１１９】
以上より、本実施の形態によれば、デッドロックが発生し得る場合には、デッドロック防止部１２４の処理によりデッドロックを検知して解消し、問合せ３０１の処理を継続することができるため、問合せ１と問合せ２とを、デッドロックに阻まれることなく完了することができる。
【０１２０】
本事例において、特許文献２の技術と非特許文献１の技術とを組み合わせた場合、アクセス１Ｂと２Ｂとを開始しようとすると、アクセス１Ａと２Ａとは待ち状態であるため、全てのデータベースアクセスが待ち状態となってデッドロックが発生するものの、解消不可能である。
しかしながら、本実施の形態の検索装置１０１によれば、デッドロックが発生した場合に、デッドロックを解消し、問合せ１と２とを完了することが可能となる。
【０１２１】
特許文献２の技術と非特許文献２の技術とを組み合わせた場合、アクセス１Ａと２Ａと１Ｂと２Ｂとの４件にて一時領域１３４への書き込みが発生し、一時ファイルのＩ／Ｏデータサイズは合計２２ＧＢとなる。
一方、本実施の形態では、実際にデッドロックが発生しているときのみ結果データサイズが最小であるデータベースアクセスに対応する残り結果を一時領域１３４に書き込むため、一時ファイルのＩ／Ｏデータサイズは合計１ＧＢ以下となる。
【０１２２】
従って、本実施の形態によれば、特許文献２の技術と非特許文献１の技術とを組み合わせた場合に発生するデッドロックを回避しつつ、特許文献２の技術と非特許文献２の技術とを組み合わせた場合よりも処理速度を向上させることができる。
【０１２３】
＜変形例１＞
検索装置１０１は、複数のコンピュータ１０から構成されても良い。
【０１２４】
＜変形例２＞
本実施の形態では、各機能構成要素をソフトウェアで実現する場合を説明した。しかし、変形例として、各機能構成要素はハードウェアで実現されても良い。
【０１２５】
各機能構成要素がハードウェアで実現される場合には、検索装置１０１は、演算装置７０１に代えて、電子回路７０６を備える。あるいは、図示しないが、検索装置１０１は、演算装置７０１、主記憶装置７０３、及び外部記憶装置７０２に代えて、電子回路７０６を備える。電子回路７０６は、各機能構成要素（及び主記憶装置７０３と外部記憶装置７０２）の機能を実現する専用の電子回路である。電子回路を、処理回路と呼ぶこともある。
【０１２６】
電子回路７０６は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）が想定される。
【０１２７】
各機能構成要素を１つの電子回路７０６で実現しても良いし、各機能構成要素を複数の電子回路７０６に分散させて実現しても良い。
【０１２８】
あるいは、一部の各機能構成要素がハードウェアで実現され、他の各機能構成要素がソフトウェアで実現されても良い。
【０１２９】
前述した演算装置７０１と主記憶装置７０３と外部記憶装置７０２と電子回路７０６とを、総称して「プロセッシングサーキットリー」という。つまり、各機能構成要素の機能は、プロセッシングサーキットリーにより実現される。
【０１３０】
＊＊＊他の実施の形態＊＊＊
前述した実施の形態１の任意の構成要素の変形、もしくは実施の形態１において任意の構成要素の省略が可能である。
【０１３１】
また、実施の形態は、実施の形態１で示したものに限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１３２】
１０  コンピュータ、１０１  検索装置、１１０  アクセス定義部、１２０  検索処理部、１２１  問合せ処理部、１２２  アクセス部、１２３  監視部、１２４  デッドロック防止部、１３０  データ記憶部、１３１  アクセス定義、１３２  上限、１３３  アクセス記憶領域、１３４  一時領域、１３５  実行計画、１３６  同時アクセス数、１３７  アクセスキュー、１５０  データベース、１５１  検索部、１５２  データ格納領域、２００  定義アプリケーション、２０１  アクセス定義、３００  検索アプリケーション、３０１  問合せ、３０２  検索結果、４０１  データ収集装置、５０１  データ検索装置、６０１  外部データ管理装置、７０１  演算装置、７０２  外部記憶装置、７０３  主記憶装置、７０４  通信装置、７０５  バス、７０６  電子回路。
【要約】
検索装置（１０１）は、データベース（１５０）へのデータベースアクセスの要求を表すアクセス要求情報を登録しているアクセスキュー（１３７）を有するデータ記憶部（１３０）と、アクセスキュー（１３７）に登録されているアクセス要求情報に対応するデータベースアクセスを実行中アクセスとして同時に１以上実行し、実行中アクセスに対応するアクセス要求情報をアクセスキュー（１３７）から削除するアクセス部（１２２）と、データベースアクセスにおけるデッドロックを防止するデッドロック防止部（１２４）とを備える。【図１】
0006961133.tif 000002
【図２】
0006961133.tif 000003
【図３】
0006961133.tif 000004
【図４】
0006961133.tif 000005
【図５】
0006961133.tif 000006
【図６】
0006961133.tif 000007
【図７】
0006961133.tif 000008
【図８】
0006961133.tif 000009
【図９】
0006961133.tif 000010
【図１０】
0006961133.tif 000011
【図１１】
0006961133.tif 000012
【図１２】
0006961133.tif 000013
【図１３】
0006961133.tif 000014
【図１４】
0006961133.tif 000015
【図１５】
0006961133.tif 000016
【図１６】
0006961133.tif 000017
【図１７】
0006961133.tif 000018