(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-09
(45)【発行日】2024-05-17
(54)【発明の名称】情報処理プログラム、情報処理装置及び情報処理方法
(51)【国際特許分類】
G06F 16/25 20190101AFI20240510BHJP
【FI】
G06F16/25
(21)【出願番号】P 2020113084
(22)【出願日】2020-06-30
【審査請求日】2023-03-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100094525
【氏名又は名称】土井 健二
(74)【代理人】
【識別番号】100094514
【氏名又は名称】林 恒徳
(72)【発明者】
【氏名】前田 卓真
(72)【発明者】
【氏名】谷口 和博
(72)【発明者】
【氏名】川井 純史
【審査官】甲斐 哲雄
(56)【参考文献】
【文献】国際公開第2016/167999(WO,A1)
【文献】国際公開第2021/038795(WO,A1)
【文献】米国特許第4769772(US,A)
【文献】特開2011-186695(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/10-16/29
(57)【特許請求の範囲】
【請求項1】
コンピュータが有する内部データベースからのデータの取得に要する取得時間を測定し、
測定した前記取得時間と、複数の外部データベースに対するアクセスの通信時間の測定結果に基づき、前記複数の外部データベースそれぞれに対する前記通信時間の関係を特定し、
前記複数の外部データベースのうちの少なくとも1以上の外部データベースを利用する処理の実行指示を受け付けた場合、前記通信時間の関係に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の処理負荷を算出し、
算出した前記処理負荷に応じて、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
処理を
前記コンピュータに実行させることを特徴とする情報処理プログラム。
【請求項2】
請求項1において、
前記通信時間の関係を特定する処理では、前記複数の外部データベースのそれぞれに対する前記通信時間の比を算出し、
前記処理負荷を算出する処理では、
前記少なくとも1以上の外部データベースのそれぞれについての前記通信時間の比と、前記少なくとも1以上の外部データベースのそれぞれとの間における第1サイズのデータの通信に伴う第1処理負荷の比とが一致するように、前記少なくとも1以上の外部データベースのそれぞれに対応する前記第1処理負荷を算出し、
算出した前記第1処理負荷に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の前記処理負荷を算出する、
ことを特徴とする情報処理プログラム。
【請求項3】
請求項2において、
前記通信時間の関係を特定する処理では、
測定した前記取得時間と、前記複数の外部データベースのそれぞれに対する前記通信時間との比を算出し、
前記処理負荷を算出する処理では、
前記内部データベースからの第2サイズのデータの取得に伴う第2処理負荷を記憶部から取得し、
前記取得時間と、前記少なくとも1以上の外部データベースのそれぞれについての前記通信時間との比と、取得した前記第2処理負荷と、前記少なくとも1以上の外部データベースのそれぞれに対応する前記第1処理負荷の比とが一致するように、前記少なくとも1以上の外部データベースのそれぞれに対応する前記第1処理負荷を算出し、
算出した前記第1処理負荷と前記第2処理負荷とに基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の前記処理負荷を算出する、
ことを特徴とする情報処理プログラム。
【請求項4】
請求項3において、
前記処理負荷を算出する処理では、
前記第1処理負荷に基づいて、前記実行指示に対応する処理の実行に伴って発生する前記少なくとも1以上の外部データベースのそれぞれとの間における第3サイズのデータの通信に伴う第3処理負荷を算出し、
前記第2処理負荷に基づいて、前記実行指示に対応する処理の実行に伴って前記少なくとも1以上の外部データベースのそれぞれにおいて発生する第4サイズのデータの取得に伴う第4処理負荷を算出し、
算出した前記第3処理負荷と前記第4処理負荷との合計を、前記少なくとも1以上の外部データベースに対してアクセスを行う際の前記処理負荷として算出する、
ことを特徴とする情報処理プログラム。
【請求項5】
請求項4において、
前記処理負荷を算出する処理では、
前記第3サイズを前記第1サイズで除算することによって算出した値と前記第1処理負荷とを乗算することによって前記第3処理負荷を算出し、
前記第4サイズを前記第1サイズで除算することによって算出した値と前記第2処理負荷とを乗算することによって前記第4処理負荷を算出する、
ことを特徴とする情報処理プログラム。
【請求項6】
請求項1において、
前記処理負荷を算出する処理では、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスを行う際の複数の実行計画ごとに、前記通信時間の関係に基づいて前記処理負荷を算出し、
前記アクセスの制御を行う処理では、前記複数の実行計画のうちの前記処理負荷が最も小さい実行計画に従って、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
ことを特徴とする情報処理プログラム。
【請求項7】
請求項1において、さらに、
アクセス対象の外部データベースとして新たな外部データベースが追加された場合、前記新たな外部データベースに対するアクセスの通信時間を測定し、
前記複数の外部データベースに対するアクセスの通信時間の測定結果と前記新たな外部データベースに対するアクセスの通信時間の測定結果とに基づき、前記複数の外部データベースそれぞれに対するアクセスと前記新たな外部データベースに対するアクセスとの通信時間の関係を特定する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項8】
請求項1において、
前記アクセスの制御を行う処理では、前記少なくとも1以上の外部データベースに格納された複数のテーブルに含まれるデータに対するアクセス順序を決定する、
ことを特徴とする情報処理プログラム。
【請求項9】
請求項8において、
前記アクセスの制御を行う処理では、前記少なくとも1以上の外部データベースに格納された複数のテーブルに含まれるデータに対するアクセスが行われる場合、前記複数のテーブルのうち、データ数がより少ないテーブルから順にアクセスが行われるように、前記アクセス順序を決定する、
ことを特徴とする情報処理プログラム。
【請求項10】
請求項1において、
前記アクセスの制御を行う処理では、前記少なくとも1以上の外部データベースに含まれるデータの検索方法を決定する、
ことを特徴とする情報処理プログラム。
【請求項11】
請求項10において、
前記処理負荷を算出する処理では、前記少なくとも1以上の外部データベースに格納された特定のテーブルに対するアクセスが行われる場合、前記特定のテーブルに含まれるデータの全走査を行うことによって前記特定のテーブルに含まれるデータに対するアクセスを行う際の第5処理負荷と、前記特定のテーブルについてのインデックスを参照すること
によって前記特定のテーブルに含まれるデータに対するアクセスを行う際の第6処理負荷とを算出し、
前記アクセスの制御を行う処理では、前記第5処理負荷が前記第6処理負荷よりも大きい場合、前記特定のテーブルについてのインデックスを参照することによって前記特定のテーブルに含まれるデータに対するアクセスを行い、前記第6処理負荷が前記第5処理負荷よりも大きい場合、前記特定のテーブルに含まれるデータの全走査を行うことによって前記特定のテーブルに含まれるデータに対するアクセスを行う、
ことを特徴とする情報処理プログラム。
【請求項12】
コンピュータが有する内部データベースからのデータの取得に要する取得時間を測定する時間計測部と、
測定した前記取得時間と、複数の外部データベースに対するアクセスの通信時間の測定結果に基づき、前記複数の外部データベースそれぞれに対する前記通信時間の関係を特定する関係特定部と、
前記複数の外部データベースのうちの少なくとも1以上の外部データベースを利用する処理の実行指示を受け付けた場合、前記通信時間の関係に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の処理負荷を算出する負荷算出部と、
算出した前記処理負荷に応じて、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行うアクセス制御部と、を有する、
ことを特徴とする情報処理装置。
【請求項13】
コンピュータが有する内部データベースからのデータの取得に要する取得時間を測定し、
測定した前記取得時間と、複数の外部データベースに対するアクセスの通信時間の測定結果に基づき、前記複数の外部データベースそれぞれに対する前記通信時間の関係を特定し、
前記複数の外部データベースのうちの少なくとも1以上の外部データベースを利用する処理の実行指示を受け付けた場合、前記通信時間の関係に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の処理負荷を算出し、
算出した前記処理負荷に応じて、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
処理を
前記コンピュータに実行させることを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラム、情報処理装置及び情報処理方法に関する。
【背景技術】
【0002】
例えば、利用者に対してサービスを提供する事業者(以下、単に事業者とも呼ぶ)は、サービスの提供を行うために必要な業務システムの構築を行う。具体的に、事業者は、例えば、ビッグデータの活用等を目的として複数種類のデータベース(DB:database)を組み合わせた業務システムの構築を行う。
【0003】
そして、上記のような業務システムの構築を行う場合、事業者は、例えば、複数種類のデータベースを統合的に管理するデータベース(以下、管理データベースとも呼ぶ)を用いたマルチデータベースを構築する。具体的に、事業者は、例えば、複数種類のデータベースのそれぞれを外部データベース(管理データベースからアクセス可能な外部のデータベース)に配置する外部データベース仮想化を行うことにより、マルチデータベースの構築を行う。
【0004】
これにより、利用者は、管理データベースにアクセスを行うことで、複数種類のデータベース(以下、外部データベースとも呼ぶ)に格納されたデータについても利用することが可能になる。そのため、事業者は、この場合、例えば、外部データベースに格納されたデータにアクセスするためのアプリケーションの開発コスト等を抑制することが可能になる(例えば、特許文献1乃至3参照)。
【先行技術文献】
【特許文献】
【0005】
【文献】特開平6-195382号公報
【文献】特開2011-176595号公報
【文献】特開2002-318737号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ここで、事業者は、例えば、定期的なタイミングにおいて、各データベースに格納されているテーブルのレコード件数や列数等を示す情報である統計情報を管理データベース及び外部データベースのそれぞれから収集する。そして、管理データベースは、例えば、事業者によってクエリが投入された場合、各データベースに対応する統計情報を参照することによって、投入されたクエリの実行時において用いる実行計画を決定する。その後、管理データベースは、決定した実行計画に従うことによって、投入されたクエリの実行を行う。
【0007】
しかしながら、上記のような外部データベースのそれぞれとの通信に要するコスト(以下、通信コストとも呼ぶ)は、各データベースの配備位置等によって異なる場合がある。そのため、管理データベースは、外部データベースに対するアクセスの最適化を行うことを可能とする実行計画を採用するために、各データベースから収集した統計情報に含まれる情報だけでなく、外部データベースのそれぞれに対応する通信コストについても考慮することが好ましい。
【0008】
そこで、一つの側面では、本発明は、外部データベースに対するアクセスの最適化を行うことを可能とする情報処理プログラム、情報処理装置及び情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
実施の形態の一態様では、複数の外部データベースに対するアクセスの通信時間の測定結果に基づき、前記複数の外部データベースそれぞれに対する前記通信時間の関係を特定し、前記複数の外部データベースのうちの少なくとも1以上の外部データベースを利用する処理を受け付けた場合、前記通信時間の関係に基づいてアクセスを行う際の処理負荷を算出し、算出した前記処理負荷に応じて、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、処理をコンピュータに実行させる。
【発明の効果】
【0010】
一つの側面によれば、外部データベースに対するアクセスの最適化を行うことを可能とする。
【図面の簡単な説明】
【0011】
【
図1】
図1は、情報処理システム10の構成について説明する図である。
【
図2】
図2は、情報処理システム10の構成について説明する図である。
【
図3】
図3は、DBサーバ1のハードウエア構成を説明する図である。
【
図4】
図4は、DBサーバ2のハードウエア構成を説明する図である。
【
図5】
図5は、DBサーバ1の機能のブロック図である。
【
図6】
図6は、DBサーバ2の機能のブロック図である。
【
図7】
図7は、第1の実施の形態におけるアクセス制御処理の概略を説明するフローチャート図である。
【
図8】
図8は、第1の実施の形態におけるアクセス制御処理の詳細を説明するフローチャート図である。
【
図9】
図9は、第1の実施の形態におけるアクセス制御処理の詳細を説明するフローチャート図である。
【
図10】
図10は、第1の実施の形態におけるアクセス制御処理の詳細を説明するフローチャート図である。
【
図11】
図11は、第1の実施の形態におけるアクセス制御処理の詳細を説明するフローチャート図である。
【
図12】
図12は、第1の実施の形態におけるアクセス制御処理の詳細を説明するフローチャート図である。
【
図13】
図13は、第1の実施の形態におけるアクセス制御処理の詳細を説明するフローチャート図である。
【
図14】
図14は、コスト情報134の具体例を説明する図である。
【
図15】
図15は、コスト情報134の具体例を説明する図である。
【
図16】
図16は、コスト情報134の具体例を説明する図である。
【
図17】
図17は、コスト情報134の具体例を説明する図である。
【
図18】
図18は、統計情報132の具体例を説明する図である。
【
図19】
図19は、統計情報132の具体例を説明する図である。
【
図20】
図20は、実行計画133の具体例を説明する図である。
【発明を実施するための形態】
【0012】
[情報処理システムの構成]
初めに、情報処理システム10の構成について説明を行う。
図1及び
図2は、情報処理システム10の構成について説明する図である。
【0013】
図1に示す例において、情報処理システム10は、DBサーバ1(以下、第1DBサーバ1または情報処理装置1とも呼ぶ)と、DBサーバ2aと、DBサーバ2bと、DBサーバ2cとを有する。DBサーバ2a、2b及び2cのそれぞれは、インターネット等のネットワークNWを介してDBサーバ1と通信が可能である。また、情報処理システム10は、事業者が各種情報の入力等を行う操作端末5を有する。
【0014】
DBサーバ1は、管理DB1a(以下、内部DB1aとも呼ぶ)を有する。また、DBサーバ2a、2b及び2cは、外部DB3a、3b及び3cをそれぞれ有する。
【0015】
なお、以下、内部DB1aがDBサーバ1の内部に設けられている場合について説明を行うが、内部DB1aは、DBサーバ1の外部に設けられているものであってもよい。また、以下、外部DB3a、3b及び3c(以下、これらを総称して外部DB3とも呼ぶ)のそれぞれがDBサーバ2a、2b及び2c(以下、これらを総称してDBサーバ2または第2DBサーバ2とも呼ぶ)の内部に設けられている場合について説明を行うが、外部DB3のそれぞれは、DBサーバ2の外部に設けられているものであってもよい。さらに、以下、情報処理システム10が3台の外部DB(外部DB3a、3b及び3c)を有する場合について説明を行うが、情報処理システム10は、3台以外の台数の外部DB3を有するものであってもよい。
【0016】
内部DB1a及び外部DB3のそれぞれは、事業者が各種操作(挿入、更新及び削除等)を行う対象となるデータが格納されるデータベースである。具体的に、内部DB1a及び外部DB3のそれぞれには、例えば、異なるデータモデルに対応するデータが格納される。さらに具体的に、内部DB1a及び外部DB3のそれぞれは、例えば、IoT(Internet of Things)センサから送信されたログデータや、事業者が操作端末5を介して入力した営業データ(ドキュメント)や、事業者が操作端末5を介して入力した音声データ等がそれぞれ格納される異なる種類のデータベースサーバである。
【0017】
ここで、事業者は、例えば、定期的なタイミングにおいて、各データベースに格納されているテーブルのレコード件数や列数等を示す統計情報を内部DB1a及び外部DB3のそれぞれから収集する。そして、DBサーバ1は、例えば、各データベースに対するアクセスを要するクエリが投入された場合、各データベースに対応する統計情報を参照することによって、投入されたクエリの実行に用いる実行計画を決定する。
【0018】
具体的に、DBサーバ1は、例えば、
図2に示すように、DBサーバ1(内部DB1a)についての統計情報132aと、DBサーバ2のそれぞれ(外部DB3のそれぞれ)についての統計情報132b、統計情報132c及び統計情報132dとを参照することによって、クエリの実行に用いる実行計画133を決定する。
【0019】
その後、DBサーバ1は、決定した実行計画133に従うことによって、投入されたクエリの実行を行う。
【0020】
しかしながら、外部DB3のそれぞれとの通信に要する通信コストは、各データベースの配備位置等によって異なる場合がある。そのため、DBサーバ1は、外部DB3に対するアクセスの最適化を行うことを可能とする実行計画を採用するために、各データベースから収集した統計情報132a、132b、132c及び132d(以下、これらを総称して単に統計情報132とも呼ぶ)に含まれる情報だけでなく、外部DB3のそれぞれに対応する通信コストについても考慮する必要がある。したがって、DBサーバ1は、外部DB3のそれぞれに対応する通信コストの関係を精度良く算出することが好ましい。
【0021】
そこで、本実施の形態におけるDBサーバ1は、複数の外部DBに対するアクセスの通信時間の測定結果に基づき、複数の外部DB3のそれぞれに対するアクセスの通信時間の関係を特定する。そして、DBサーバ1は、複数の外部DB3のうちの少なくとも1以上の外部DB3を利用する処理を受け付けた場合、特定した通信時間の関係に基づいてアクセスを行う際の処理負荷を算出する。
【0022】
その後、DBサーバ1は、算出した処理負荷に応じて、複数の外部DB3のうちの少なくとも1以上の外部DB3に含まれるデータに対するアクセスの制御を行う。
【0023】
すなわち、本実施の形態におけるDBサーバ1は、実行対象のクエリの投入を受け付ける前に、外部DB3のそれぞれにアクセスに要する通信時間の測定結果から、外部DB3のそれぞれにアクセスを行った場合に要する通信時間の関係を予め算出する。
【0024】
そして、DBサーバ1は、実行対象のクエリの投入を受け付けた場合、予め算出した通信時間の関係を参照し、実行対象のクエリの実行に要する処理負荷を、DBサーバ1と各DBサーバ2との間において行われる通信に伴う処理負荷を考慮することによって算出する。その後、DBサーバ1は、例えば、算出した処理負荷に基づいて、実行対象のクエリの実行に用いる実行計画133を決定する。
【0025】
これにより、DBサーバ1は、実行対象のクエリの実行に用いる実行計画133を適切に選択することが可能になる。そのため、DBサーバ1は、実行対象のクエリの実行に伴う外部DB3に対するアクセスの最適化を行うことが可能となる。
【0026】
[情報処理システムのハードウエア構成]
次に、情報処理システム10のハードウエア構成について説明する。
図3は、DBサーバ1のハードウエア構成を説明する図である。また、
図4は、DBサーバ2のハードウエア構成を説明する図である。
【0027】
初めに、DBサーバ1のハードウエア構成について説明を行う。
【0028】
DBサーバ1は、
図3に示すように、プロセッサであるCPU101と、メモリ102と、通信装置103と、記憶媒体104とを有する。各部は、バス105を介して互いに接続される。
【0029】
記憶媒体104は、例えば、クエリの実行に伴うアクセスを制御する処理(以下、アクセス制御処理とも呼ぶ)を行うためのプログラム110を記憶するプログラム格納領域(図示しない)を有する。また、記憶媒体104は、例えば、アクセス制御処理を行う際に用いられる情報を記憶する情報格納領域130を有する。なお、記憶媒体104は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)であってよい。
【0030】
CPU101は、記憶媒体104からメモリ102にロードされたプログラム110を実行してアクセス制御処理を行う。
【0031】
また、通信装置103は、例えば、ネットワーク(図示しない)を介して内部DB1aとアクセスを行う。さらに、通信装置103は、例えば、ネットワーク(図示しない)を介してDBサーバ2a、2b及び2cのそれぞれとアクセスを行う。
【0032】
次に、DBサーバ2のハードウエア構成について説明を行う。
【0033】
DBサーバは、
図4に示すように、プロセッサであるCPU201と、メモリ202と、通信装置203と、記憶媒体204とを有する。各部は、バス205を介して互いに接続される。
【0034】
記憶媒体204は、例えば、アクセス制御処理を行うためのプログラム210を記憶するプログラム格納領域(図示しない)を有する。また、記憶媒体204は、例えば、アクセス制御処理を行う際に用いられる情報を記憶する情報格納領域230を有する。なお、記憶媒体204は、例えば、HDDやSSDであってよい。
【0035】
CPU201は、記憶媒体204からメモリ202にロードされたプログラム210を実行してアクセス制御処理を行う。
【0036】
また、通信装置203は、例えば、ネットワーク(図示しない)を介してDBサーバ1との通信を行う。
【0037】
[情報処理システムの機能]
次に、情報処理システム10の機能について説明を行う。
図5は、DBサーバ1の機能のブロック図である。また、
図6は、DBサーバ2の機能のブロック図である。
【0038】
初めに、DBサーバ1の機能のブロック図について説明を行う。
【0039】
DBサーバ1は、
図5に示すように、例えば、CPU101やメモリ102等のハードウエアとプログラム110とが有機的に協働することにより、情報受信部111と、情報管理部112と、時間計測部113と、関係特定部114とを実現する。また、DBサーバ1は、例えば、CPU101やメモリ102等のハードウエアとプログラム110とが有機的に協働することにより、負荷算出部115と、アクセス制御部116と、クエリ実行部117と、情報送信部118を含む各種機能を実現する。
【0040】
また、DBサーバ1は、例えば、
図5に示すように、対象データ131を内部DB1aに記憶する。さらに、DBサーバ1は、例えば、
図5に示すように、統計情報132と、実行計画133と、コスト情報134とを情報格納領域130に記憶する。
【0041】
情報受信部111は、例えば、操作端末5から送信された対象データ131を受信する。
【0042】
また、情報受信部111は、例えば、操作端末5から送信されたクエリを受信する。
【0043】
さらに、情報受信部111は、例えば、DBサーバ2から送信されたクエリの実行結果を受信する。
【0044】
情報管理部112は、例えば、情報受信部111が受信した対象データ131を内部DB1aに記憶する。
【0045】
また、情報管理部112は、内部DB1aに格納された対象データ131についての統計情報132を情報格納領域130に記憶する。
【0046】
さらに、情報管理部112は、DBサーバ2における外部DB3のそれぞれから統計情報132を取得する。そして、情報管理部112は、取得した統計情報132を情報格納領域130に記憶する。
【0047】
時間計測部113は、外部DB3のそれぞれに対するアクセスに要する通信時間を測定する。具体的に、時間計測部113は、例えば、PINGを用いることによって外部DB3のそれぞれに対するアクセスに要する通信時間を測定する。
【0048】
関係特定部114は、時間計測部113が測定した通信時間の測定結果に基づき、外部DB3のそれぞれに対するアクセスに要する通信時間の関係を特定する。
【0049】
負荷算出部115は、情報受信部111がクエリを受信したことに応じて、関係特定部114が特定した関係に基づいて、クエリの実行に伴って外部DB3のそれぞれにアクセスを行う際に要する処理負荷を算出する。
【0050】
アクセス制御部116は、負荷算出部115が算出した処理負荷に応じて、情報受信部111が受信したクエリの実行に伴って行われる外部DB3に対するアクセスの制御を行う。具体的に、アクセス制御部116は、情報受信部111が受信したクエリの実行に適した実行計画133を決定する。
【0051】
クエリ実行部117は、アクセス制御部116による制御に従って、情報受信部111が受信したクエリの実行を行う。具体的に、クエリ実行部117は、アクセス制御部116が決定した実行計画133に従って、情報受信部111が受信したクエリの実行を行う。
【0052】
情報送信部118は、例えば、情報受信部111が受信したクエリと、アクセス制御部116が決定した実行計画133とをDBサーバ2に送信する。
【0053】
また、情報送信部118は、例えば、クエリ実行部117が実行したクエリの実行結果と、情報受信部111が受信したクエリの実行結果とを操作端末5に送信する。コスト情報134についての説明は後述する。
【0054】
次に、DBサーバ2の機能のブロック図について説明を行う。
【0055】
DBサーバ2は、
図6に示すように、例えば、CPU201やメモリ202等のハードウエアとプログラム210とが有機的に協働することにより、情報受信部211と、情報管理部212と、クエリ実行部213と、情報送信部214とを含む各種機能を実現する。
【0056】
また、DBサーバ2は、例えば、
図6に示すように、対象データ231を外部DB3に記憶する。
【0057】
情報受信部211は、例えば、操作端末5から送信された対象データ131を受信する。また、情報受信部211は、DBサーバ1から送信されたクエリと実行計画133とを受信する。
【0058】
情報管理部212は、例えば、情報受信部211が受信した対象データ231を外部3に記憶する。
【0059】
クエリ実行部213は、情報受信部211が受信した実行計画133に従って、情報受信部211が受信したクエリを実行する。
【0060】
情報送信部214は、クエリ実行部213が実行したクエリの実行結果をDBサーバ1に送信する。
【0061】
[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。
図7は、第1の実施の形態におけるアクセス制御処理の概略を説明するフローチャート図である。
【0062】
DBサーバ1は、
図7に示すように、例えば、アクセス制御タイミングになるまで待機する(S1のNO)。アクセス制御タイミングは、例えば、1時間ごと等の定期的なタイミングであってよい。
【0063】
そして、アクセス制御タイミングになった場合(S1のYES)、DBサーバ1は、複数の外部DB3に対するアクセスの通信時間の測定結果に基づき、複数の外部DB3のそれぞれに対するアクセス時間の関係を特定する(S2)。
【0064】
続いて、DBサーバ1は、複数の外部DB3のうちの少なくとも1以上の外部DB3を利用するクエリを受け付けるまで待機する(S3のNO)。
【0065】
そして、複数の外部DB3のうちの少なくとも1以上の外部DB3を利用するクエリを受け付けた場合(S3のYES)、DBサーバ1は、S2の処理で特定したアクセス時間の関係に基づいてアクセスを行う際の処理負荷を算出する(S4)。
【0066】
その後、DBサーバ1は、S4の処理で算出した処理負荷に応じて、複数の外部DB3のうちの1以上の外部DB3に含まれるデータに対するアクセス制御を行う(S5)。
【0067】
すなわち、本実施の形態におけるDBサーバ1は、実行対象のクエリの投入を受け付ける前に、外部DB3のそれぞれにアクセスに要する通信時間の測定結果から、外部DB3のそれぞれにアクセスを行った場合に要する通信時間の関係を予め算出する。
【0068】
そして、DBサーバ1は、実行対象のクエリの投入を受け付けた場合、予め算出した通信時間の関係を参照し、実行対象のクエリの実行に要する処理負荷を、DBサーバ1と各DBサーバ2との間において行われる通信に伴う処理負荷を考慮することによって算出する。その後、DBサーバ1は、例えば、算出した処理負荷に基づいて、実行対象のクエリの実行に用いる実行計画133を決定する。
【0069】
これにより、DBサーバ1は、実行対象のクエリの実行に用いる実行計画133を適切に選択することが可能になる。そのため、DBサーバ1は、実行対象のクエリの実行に伴う外部DB3に対するアクセスの最適化を行うことが可能となる。
【0070】
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。
図8から
図13は、第1の実施の形態におけるアクセス制御処理の詳細を説明するフローチャート図である。また、
図14から
図20は、第1の実施の形態におけるアクセス制御処理の詳細を説明する図である。
【0071】
[時間算出処理]
初めに、アクセス制御処理のうち、DBサーバ1が内部DB1aに格納された特定のテーブルに含まれるデータの読み込みに要する時間を算出する処理(以下、時間算出処理とも呼ぶ)について説明を行う。
図8は、時間算出処理について説明する図である。
【0072】
DBサーバ1の時間計測部113は、
図8に示すように、時間算出タイミングになるまで待機する(S11のNO)。時間算出タイミングは、例えば、DBサーバ1の起動が完了したタイミングであってよい。
【0073】
そして、時間算出タイミングになった場合(S11のYES)、時間計測部113は、内部DB1aに格納された特定のテーブルに含まれるデータを読み込む(S12)。
【0074】
具体的に、時間計測部113は、例えば、内部DB1aにおいて常に存在しているテーブル(例えば、システムカタログテーブル)に含まれるデータをシーケンシャルスキャン(全走査)によって読み込む。
【0075】
続いて、時間計測部113は、S12の処理における読み込みに要した時間と、S12の処理で読み込んだデータ量を示す値とから、内部DB1aに対する通信に要した時間を算出する(S13)。
【0076】
具体的に、時間計測部113は、例えば、S12の処理で特定のテーブルに含まれるデータの読み込みに要した時間を、S12の処理で読み込んだ特定のテーブルに含まれるデータに対応するページ数で除算することによって、1ページの読み込みに要する時間を算出する。
【0077】
その後、DBサーバ1の情報管理部112は、S13の処理で算出した時間を、情報格納領域130に記憶されたコスト情報134の少なくとも一部として記憶する(S14)。以下、コスト情報134の具体例について説明を行う。
【0078】
[コスト情報の具体例(1)]
図14から
図17は、コスト情報134の具体例を説明する図である。具体的に、
図14は、S14の処理が行われる前のコスト情報134の具体例について説明する図である。また、
図15は、S14の処理が行われた後のコスト情報134の具体例について説明する図である。なお、
図16及び
図17についての説明は後述する。
【0079】
図14等に示すコスト情報134は、各コストの対象が設定される「種別」と、各コストを算出する際の単位が設定される「単位」と、各コストが設定される「コスト」とを項目として有する。また、
図14等に示すコスト情報134は、S13の処理で算出される時間(各コストの算出に用いられる時間)が設定される「計測時間」を項目として有する。
【0080】
具体的に、
図14に示すコスト情報134において、1行目の情報には、「種別」として「シーケンシャルスキャン」が設定され、「単位」として「ページ」が設定され、「コスト」として「1」が設定されている。
【0081】
すなわち、
図14に示すコスト情報134における1行目の情報は、データベースに格納された1ページ分のデータ(以下、第1サイズのデータとも呼ぶ)をシーケンシャルスキャンによって読み込む場合のコスト(処理負荷)が「1」であることを示している。
【0082】
具体的に、
図14に示すコスト情報134における1行目の情報は、例えば、DBサーバ1が内部DB1aに格納された1ページ分のデータをシーケンシャルスキャン(全走査)によって読み込む場合のコスト(以下、第2コストまたは第2処理負荷とも呼ぶ)が「1」であることを示している。同様に、
図14に示すコスト情報134における1行目の情報は、例えば、DBサーバ2が外部DB3に格納された1ページ分のデータをシーケンシャルスキャンによって読み込む場合のコストが「1」であることを示している。
【0083】
また、
図14に示すコスト情報134において、2行目の情報には、「種別」として「インデックススキャン」が設定され、「単位」として「ページ」が設定され、「係数」として「4」が設定されている。
【0084】
すなわち、
図14に示すコスト情報134における2行目の情報は、インデックスを用いることによってデータベースに格納された1ページ分のデータを読み込む場合のコストが「4」であることを示している。
【0085】
具体的に、
図14に示すコスト情報134における2行目の情報は、例えば、インデックスを用いることによってDBサーバ1が内部DB1aに格納された1ページ分のデータを読み込む場合のコストが「4」であることを示している。同様に、
図14に示すコスト情報134における2行目の情報は、例えば、インデックスを用いることによってDBサーバ2が外部DB3に格納された1ページ分のデータを読み込む場合のコストが「4」であることを示している。
【0086】
また、
図14に示すコスト情報134において、3行目の情報には、「種別」として「CPU」が設定され、「単位」として「行」が設定され、「係数」として「0.01」が設定されている。
【0087】
すなわち、
図14に示すコスト情報134における3行目の情報は、データベースに格納された1行(1レコード)のデータ(以下、第2サイズのデータとも呼ぶ)の読み込みを行う場合におけるCPUのコストが「0.1」であることを示している。
【0088】
そして、例えば、S13の処理において「10(ms)」が算出された場合、情報管理部112は、
図15に示すように、「種別」に「シーケンシャルスキャン」が設定された情報(1行目の情報)の「計測時間」に「10(ms)」を設定する。
【0089】
なお、情報管理部112は、この場合、
図15に示すように、「種別」に「インデックススキャン」及び「CPU」が設定された情報(2及び3行目の情報)の「計測時間」に、情報が設定されないことを示す「-」を設定するものであってもよい。
【0090】
[時間計測処理]
次に、アクセス制御処理のうち、DBサーバ1からDBサーバ2のそれぞれに対するアクセスに要する時間を計測する処理(以下、時間計測処理とも呼ぶ)について説明を行う。
図9は、時間計測処理について説明する図である。
【0091】
DBサーバ1の時間計測部113は、
図9に示すように、例えば、DBサーバ1からアクセスを行う外部DB3が追加されたことを検知するまで待機する(S21のNO)。
【0092】
そして、DBサーバ1からアクセスを行う外部DB3が追加されたことを検知した場合(S21のYES)、時間計測部113は、S21の処理で追加を検知した外部DB3に対するアクセスに要する時間を計測する(S22)。
【0093】
具体的に、時間計測部113は、例えば、PINGを用いることによって外部DB3のそれぞれに対するアクセスの通信時間を測定する。
【0094】
続いて、情報管理部112は、情報格納領域130に記憶したコスト情報134を参照し、S21の処理で追加を検知した外部DB3に対する通信に要するコスト(以下、第1コストまたは第1処理負荷とも呼ぶ)を算出する(S23)。
【0095】
具体的に、情報管理部112は、例えば、シーケンシャルスキャンによってテーブルを読み込む場合に要する時間(S13の処理で算出した時間)と、追加を検知した外部DB3に対するアクセスに要する時間(S23の処理で算出した時間)との比(以下、第1の比とも呼ぶ)を算出する。そして、情報管理部112は、シーケンシャルスキャンによってテーブルを読み込む場合に要するコストと、追加を検知した外部DB3に対するアクセスに要するコストとの比が第1の比と等しくなるように、追加を検知した外部DB3に対するアクセスに要するコストを算出する。
【0096】
さらに、具体的に、例えば、
図15で説明したコスト情報134において、「種別」に「シーケンシャルコスト」が設定された情報(1行目の情報)の「コスト」及び「計測時間」には、それぞれ「1」及び「10(ms)」が設定されている。そのため、例えば、例えば、追加された外部DB3aに対する通信に要する時間として「5(ms)」が計測された場合、情報管理部112は、外部DB3aに対する通信に要するコスト(第1コスト)として「0.5」を算出する。
【0097】
その後、情報管理部112は、S23の処理で算出したコストを、情報格納領域130に記憶されたコスト情報134の少なくとも一部として記憶する(S24)。以下、S24の処理が行われた後のコスト情報134の具体例について説明を行う。
【0098】
[コスト情報の具体例(2)]
図16及び
図17は、S24の処理が行われた後のコスト情報134の具体例について説明する図である。
【0099】
具体的に、
図16に示すコスト情報134において、4行目の情報(下線部分)には、「種別」として「通信(外部DB3a)」が設定され、「単位」として「行」が設定され、「コスト」として「0.5」が設定され、「計測時間」として「5(ms)」が設定されている。すなわち、
図16に示すコスト情報134は、外部DB3aに対する通信に要するコスト(第1コスト)が「0.5」であることを示している。
【0100】
なお、複数の外部DB3aが追加された場合、情報管理部112は、
図17の下線部分に示すように、追加された外部DB3aのそれぞれに対応する情報を追加する。
【0101】
具体的に、
図17に示すコスト情報134において、5行目の情報(下線部分)には、「種別」として「通信(外部DB3b)」が設定され、「単位」として「行」が設定され、「コスト」として「0.1」が設定され、「計測時間」として「1(ms)」が設定されている。
【0102】
また、
図17に示すコスト情報134において、6行目の情報(下線部分)には、「種別」として「通信(外部DB3c)」が設定され、「単位」として「行」が設定され、「コスト」として「0.2」が設定され、「計測時間」として「2(ms)」が設定されている。
【0103】
すなわち、
図17に示すコスト情報134は、外部DB3aに対する通信に要するコストが「0.5」であることに加え、外部DB3bに対する通信に要するコストが「0.1」であり、かつ、外部DB3cに対する通信に要するコストが「0.2」であることを示している。
【0104】
[情報取得処理]
次に、アクセス制御処理のうち、統計情報132を取得する処理(以下、情報取得処理とも呼ぶ)について説明を行う。
図10は、情報取得処理について説明する図である。
【0105】
情報管理部112は、
図10に示すように、情報取得タイミングになるまで待機する(S31のNO)。情報取得タイミングは、例えば、1時間ごと等の定期的なタイミングであってよい。
【0106】
そして、情報取得タイミングになった場合(S31のYES)、情報管理部112は、内部DB1aに格納されているテーブルに含まれるデータを参照し、内部DB1aに対応する統計情報132を生成する(S32)。
【0107】
さらに、情報管理部112は、外部DB3のそれぞれから外部DB3のそれぞれに対応する統計情報132を取得する(S33)。
【0108】
その後、情報管理部112は、S32の処理で生成した統計情報132と、S33の処理で取得した統計情報132を情報格納領域130に記憶する(S34)。以下、統計情報132の具体例について説明を行う。
【0109】
[統計情報の具体例]
図18及び
図19は、統計情報132の具体例を説明する図である。具体的に、
図18は、内部DB1aに対応する統計情報132aの具体例について説明する図である。また、
図19は、外部DB3aに対応する統計情報132bの具体例について説明する図である。
【0110】
図18等に示す統計情報132は、例えば、内部DB1aに格納された各テーブルの識別情報が設定される「テーブル名」と、各テーブルに含まれるレコードのレコード数が設定される「レコード数」とを項目として有する。また、
図18等に示す統計情報132は、例えば、各テーブルにおける列数が設定される「列数」を項目として有する。
【0111】
なお、
図18等に示す統計情報132は、各テーブルにおける各列のサイズ、各テーブルにおける各列の値のガーディナリティ及び各テーブルにおける各列の値のヒストグラム等の項目をさらに有するものであってもよい。
【0112】
具体的に、
図18に示す統計情報132において、例えば、1行目の情報には、「テーブル名」として「TBL101」が設定され、「レコード数」として「2000(件)」が設定され、「列数」として「10」が設定されている。
【0113】
また、
図18に示す統計情報132において、例えば、2行目の情報には、「テーブル名」として「TBL102」が設定され、「レコード数」として「500(件)」が設定され、「列数」として「5」が設定されている。
図18に含まれる他の情報についての説明は省略する。
【0114】
また、
図19に示す統計情報132において、例えば、1行目の情報には、「テーブル名」として「TBL201」が設定され、「レコード数」として「700(件)」が設定され、「列数」として「5」が設定されている。
【0115】
また、
図19に示す統計情報132において、例えば、2行目の情報には、「テーブル名」として「TBL202」が設定され、「レコード数」として「1000(件)」が設定され、「列数」として「10」が設定されている。
図19に含まれる他の情報についての説明は省略する。
【0116】
[アクセス制御処理のメイン処理]
次に、アクセス制御処理のメイン処理について説明を行う。
図11から
図13は、アクセス制御処理のメイン処理について説明する図である。
【0117】
[第1DBサーバにおける処理]
初めに、DBサーバ1におけるアクセス制御処理について説明を行う。
図11及び
図12は、DBサーバ1におけるアクセス制御処理について説明する図である。
【0118】
情報受信部111は、
図11に示すように、例えば、操作端末5から送信されたクエリを受信するまで待機する(S41のNO)。
【0119】
そして、DBサーバ1のクエリ実行部117は、S41の処理で受信したクエリの実行に伴う事前処理を行う(S42)。
【0120】
具体的に、クエリ実行部117は、S41の処理で受信したクエリの構文チェックやクエリの対象となるテーブルの存在チェック等を行う。
【0121】
続いて、DBサーバ1の負荷算出部115は、情報格納領域130に記憶した統計情報132に対応する実行計画133を1つ生成する(S43)。以下、実行計画133の具体例について説明を行う。
【0122】
[実行計画の具体例]
図20は、実行計画133の具体例を説明する図である。具体的に、
図20の示す例は、S43の処理において実行計画133が複数回生成された場合を示す例である。
【0123】
図20に示す実行計画133は、データベースに格納されたテーブルに含まれるデータに対する検索方法(アクセス順序)が設定される「検索方法」と、複数のテーブルの結合方法が設定される「結合方法」とを項目として有する。
【0124】
具体的に、
図20に示す実行計画133において、例えば、1行目の情報には、「検索方法」として「シーケンシャルスキャン」が設定され、「結合方法」として「入れ子反復結合」が設定されている。
【0125】
また、
図20に示す実行計画133において、例えば、2行目の情報には、「検索方法」として「インデックススキャン」が設定され、「結合方法」として「入れ子反復結合」が設定されている。
図20に含まれる他の情報についての説明は省略する。
【0126】
図11に戻り、負荷算出部115は、情報格納領域130に記憶したコスト情報134を参照し、S43の処理で生成した実行計画133において各データベースからのデータ(以下、第4サイズのデータとも呼ぶ)の読み出しに要するコスト(以下、第4コストまたは第4処理負荷とも呼ぶ)を算出する(S44)。
【0127】
そして、負荷算出部115は、情報格納領域130に記憶したコスト情報134を参照し、S43の処理で生成した実行計画133において外部DB3との間で行うデータ(以下、第3サイズのデータとも呼ぶ)の通信に要するコスト(以下、第3コストまたは第3処理負荷とも呼ぶ)を算出する(S45)。
【0128】
さらに、負荷算出部115は、S44の処理で算出したコストと、S45の処理で算出したコストとの合計値を算出する(S46)。
【0129】
すなわち、負荷算出部115は、例えば、DBサーバ1が内部DB1aに格納されたデータを取得する際に要するコストと、DBサーバ2が外部DB3に格納されたデータを取得する際に要するコストと、DBサーバ1と各DBサーバ2との間において行われる通信に伴うコストとの合計を算出する。
【0130】
これにより、DBサーバ1は、S41の処理で受信したクエリの実行を、S43の処理で生成した実行計画に従って行った場合におけるコストの合計値を算出することが可能になる。
【0131】
なお、以下、S43の処理で生成した実行計画133がシーケンシャルスキャンを行う実行計画133である場合、S46の処理で算出される合計値を第5処理負荷とも呼ぶ。また、以下、S43の処理で生成した実行計画133がインデックススキャンを行う実行計画133である場合、S46の処理で算出される合計値を第6処理負荷とも呼ぶ。
【0132】
その後、負荷算出部115は、
図12に示すように、S43の処理において全ての実行計画133を生成したか否かを判定する(S51)。
【0133】
その結果、S43の処理において全ての実行計画133を生成していないと判定した場合(S51のNO)、負荷算出部115は、S43以降の処理を再度行う。
【0134】
一方、S43の処理において全ての実行計画133を生成したと判定した場合(S51のYES)、DBサーバ1のアクセス制御部116は、例えば、S43の処理で生成した実行計画133のうち、S46の処理で算出した合計値が最小である実行計画133を特定する(S52)。
【0135】
すなわち、アクセス制御部116は、例えば、S46の処理で算出した合計値が最小の実行計画133を、S41の処理で受信したクエリの実行に適した実行計画133として特定する。
【0136】
そして、DBサーバ1の情報送信部118は、S41の処理で受信したクエリの対象となるテーブルを格納する外部DB3に対応するDBサーバ2のそれぞれに対して、S41の処理で受信したクエリとS52の処理で特定した実行計画133とを送信する(S53)。
【0137】
なお、DBサーバ1は、この場合、S41の処理で受信したクエリを、DBサーバ2のそれぞれに実行させる必要がある複数のクエリに分解するものであってもよい。そして、情報送信部118は、S41の処理で受信したクエリの対象となるテーブルを格納する外部DB3に対応するDBサーバ2のそれぞれに対して、各DBサーバ2に対応するクエリ(分解後のクエリ)を送信するものであってもよい。
【0138】
さらに、クエリ実行部117は、内部DB1aに格納されたテーブルのうち、S41の処理で受信したクエリの対象となるテーブルを対象として、S41の処理で受信したクエリを実行する(S54)。
【0139】
具体的に、クエリ実行部117は、S52の処理で特定した実行計画133に従って、S41の処理で受信したクエリの実行を行う。
【0140】
その後、情報受信部111は、S53の処理においてクエリ等を送信したDBサーバ2のそれぞれからクエリの実行結果を受信するまで待機する(S55のNO)。
【0141】
そして、S53の処理においてクエリ等を送信したDBサーバ2の全てからクエリの実行結果を受信した場合(S55のYES)、情報送信部118は、例えば、S54の処理における実行結果と、S41の処理で受信した実行結果とを操作端末5に送信する(S56)。
【0142】
具体的に、情報送信部118は、この場合、例えば、S54の処理における実行結果と、S41の処理で受信した実行結果との結合、加工、集計及びソートを行うものであってもよい。そして、情報送信部118は、結合等を行った実行結果を操作端末5に送信するものであってもよい。
【0143】
なお、例えば、S41の処理で受信したクエリが外部DB3に格納されたテーブルを対象としていない場合、情報送信部118は、S53及びS55の処理を行わないものであってよい。また、例えば、S41の処理で受信したクエリが内部DB1aに格納されたテーブルを対象としていない場合、情報送信部118は、S54の処理を行わないものであってよい。
【0144】
[第2DBサーバにおける処理]
次に、DBサーバ2におけるアクセス制御処理について説明を行う。
図13は、DBサーバ2におけるアクセス制御処理について説明する図である。
【0145】
DBサーバ2の情報受信部211は、
図13に示すように、DBサーバ1から送信されたクエリと実行計画133とを受信するまで待機する(S61のNO)。
【0146】
そして、DBサーバ1から送信されたクエリ等を受信した場合(S61のYES)、DBサーバ2のクエリ実行部213は、外部DB3に格納されたテーブルのうち、S61の処理で受信したクエリに対応するテーブルを対象として、S61の処理で受信したクエリを実行する(S62)。
【0147】
具体的に、クエリ実行部213は、S61の処理で受信した実行計画133に従って、S61の処理で受信したクエリの実行を行う。
【0148】
その後、DBサーバ2の情報送信部214は、S62の処理での実行結果をDBサーバ1に送信する(S63)。
【0149】
[アクセス制御処理の具体例]
次に、本実施の形態におけるアクセス制御処理の具体例について説明する。以下、「テーブル名」が「TBL103」であるテーブルをテーブルTBL103とも呼び、「テーブル名」が「TBL204」であるテーブルをテーブルTBL204とも呼ぶ。また、以下、テーブルTBL103及びテーブルTLB204では、100(件)のレコードが1(ページ)に格納されているものとして説明を行う。
【0150】
例えば、S41の処理において、テーブルTBL103に格納された1000件のレコードと、テーブルTBL204に格納された2000件のレコードとの結合を要すると判断されるクエリを受信した場合、DBサーバ1は、S43の処理において、受信したクエリに対応する複数の実行計画133を生成する。
【0151】
具体的に、DBサーバ1は、例えば、テーブルTBL103及びテーブルTBL204に格納されたレコードに対してインデックススキャンを行い、かつ、テーブルTBL103及びテーブルTBL204をそれぞれ内側テーブル及び外側テーブルとして入れ子反復結合を行う実行計画133(以下、実行計画133aとも呼ぶ)を生成する。
【0152】
また、DBサーバ1は、例えば、テーブルTBL103及びテーブルTBL204に格納されたレコードに対してインデックススキャンを行い、かつ、テーブルTBL103及びテーブルTBL204をそれぞれ外側テーブル及び内側テーブルとして入れ子反復結合を行う実行計画133(以下、実行計画133bとも呼ぶ)を生成する。
【0153】
そして、DBサーバ1は、S44の処理において、例えば、複数の実行計画133のそれぞれについて、各テーブルからのデータの読み出しに要するコスト(処理負荷)を算出する。
【0154】
具体的に、
図18に示す統計情報132aにおける3行目の情報には、「テーブル名」として「TBL103」が設定され、「レコード数」として「10000(件)」が設定されている。すなわち、
図18に示す統計情報132aには、100(ページ)に対応するレコードがテーブルTBL103に格納されていることを示している。また、
図19に示す統計情報132bにおける4行目の情報には、「テーブル名」として「TBL204」が設定され、「レコード数」として「20000(件)」が設定されている。すなわち、
図19に示す統計情報132bには、200(ページ)に対応するレコードがテーブルTBL204に格納されていることを示している。
【0155】
さらに、
図17に示すコスト情報134における1行目の情報には、「種別」として「シーケンシャルスキャン」が設定され、「単位」として「ページ」が設定され、「コスト」として「1」が設定されている。また、
図17に示すコスト情報134における3行目の情報には、「種別」として「CPU」が設定され、「単位」として「行」が設定され、「コスト」として「0.01」が設定されている。
【0156】
そのため、DBサーバ1は、S44の処理において、例えば、「100(ページ)」と「1」との積である「100」と、「10000(件)」と「0.01」との積である「100」との和である「200」を、実行計画133aに従った場合においてテーブルTBL103からのデータの読み出しに要するコストとして算出する。
【0157】
また、DBサーバ1は、S44の処理において、例えば、「200(ページ)」と「1」との積である「200」と、「20000(件)」と「0.01」との積である「200」との和である「400」を、実行計画133aに従った場合においてテーブルTBL204からのデータの読み出しに要するコストとして算出する。
【0158】
続いて、DBサーバ1は、S45の処理において、例えば、複数の実行計画133のそれぞれについて、各DBサーバ2との間において発生する通信に要するコスト(処理負荷)を算出する。
【0159】
具体的に、
図17に示すコスト情報134における4行目の情報には、「種別」として「通信(外部DB3a)」が設定され、「単位」として「行」が設定され、「コスト」として「0.5」が設定されている。また、
図17に示すコスト情報134における5行目の情報には、「種別」として「通信(外部DB3b)」が設定され、「単位」として「行」が設定され、「コスト」として「0.1」が設定されている。
【0160】
さらに、S41の処理で受信したクエリの実行に伴ってDBサーバ2a(テーブルTBL103を格納する外部DB3aを有するDBサーバ2)から受信するレコードは、統計情報132から「1000(件)」であると判断されている。また、S41の処理で受信したクエリの実行に伴ってDBサーバ2b(テーブルTBL204を格納する外部DB3bを有するDBサーバ2)から受信するレコードは、統計情報132から「2000(件)」であると判断されている。
【0161】
そのため、DBサーバ1は、S45の処理において、例えば、「1000(件)」と「0.5」との積である「500」を、実行計画133aに従った場合においてDBサーバ2aとの間において発生する通信に要するコストとして算出する。
【0162】
また、DBサーバ1は、S45の処理において、例えば、「2000(件)」と「0.1」との積である「200」を、実行計画133aに従った場合においてDBサーバ2bとの間において発生する通信に要するコストとして算出する。
【0163】
その後、DBサーバ1は、S46の処理において、S44の処理で算出したコストとS45の処理で算出したコストの合計を算出する。
【0164】
具体的に、例えば、S44及びS45の処理において、実行計画133aに従った場合におけるコストとして「200」、「400」、「500」及び「200」のそれぞれが算出された場合、情報処理装置1は、これらのコストの合計である「1300」を算出する。
【0165】
また、テーブルTBL103に対するアクセスに要するコスト(「200」と「500」との和である「700」)は、テーブルTBL204に対するアクセスに要するコスト(「400」と「200」との和である「600」)よりも大きい。そのため、情報処理装置1は、テーブルTBL103とテーブルTBL204との入れ子反復結合を行う場合、テーブルTBL103を内側テーブルとし、テーブルTBL204を外側テーブルとする方が、テーブルTBL103とテーブルTBL204との結合に要する時間を短くすることができるものと判定する。
【0166】
したがって、情報処理装置1は、S52の処理において、例えば、S41の処理で受信したクエリの実行時に従う実行計画133として、実行計画133bよりも実行計画133aの方が適切であると判定する。そして、例えば、実行計画133aについて算出したコストである「1300」が最小であると判定した場合、情報処理装置1は、S41の処理で受信したクエリの実行時に従う実行計画133として実行計画133aを特定する。
【0167】
これにより、情報処理装置1は、S41の処理で受信したクエリに対応する実行計画133を適切に選択することが可能になる。
【0168】
なお、例えば、S52の処理において、S44の処理で算出したコストのみを用いて実行計画133の特定が行われる場合、すなわち、S45の処理で算出したコストを考慮することなく実行計画133の特定が行われる場合、テーブルTBL103に対するアクセスに要するコスト(「200」)は、テーブルTBL204に対するアクセスに要するコスト(「400」)よりも小さくなる。
【0169】
そのため、情報処理装置1は、この場合、テーブルTBL103を外側テーブルとし、テーブルTBL204を内側テーブルとする方が、S41の処理で受信したクエリの実行に要する時間を短くすることができるものと判定する。したがって、情報処理装置1は、この場合、S41の処理で受信したクエリの実行時に従う実行計画133として実行計画133bを特定する。
【0170】
すなわち、情報処理装置1は、S52の処理において、S45の処理で算出したコストを考慮して実行計画133の決定を行うことにより、S41の処理で受信したクエリの実行に用いる実行計画133をより適切に決定することが可能になる。
【0171】
このように、本実施の形態におけるDBサーバ1は、複数の外部DB3に対するアクセスの通信時間の測定結果に基づき、複数の外部DB3のそれぞれに対するアクセスの通信時間の関係を特定する。そして、DBサーバ1は、複数の外部DB3のうちの少なくとも1以上の外部DB3を利用する処理を受け付けた場合、アクセスの通信時間の関係に基づいてアクセスを行う際の処理負荷を算出する。
【0172】
その後、DBサーバ1は、算出した処理負荷に応じて、複数の外部DB3のうちの少なくとも1以上の外部DB3に含まれるデータに対するアクセスの制御を行う。
【0173】
すなわち、本実施の形態におけるDBサーバ1は、実行対象のクエリの投入を受け付ける前に、外部DB3のそれぞれにアクセスに要する通信時間の測定結果から、外部DB3のそれぞれにアクセスを行った場合に要する通信時間の関係を予め算出する。
【0174】
そして、DBサーバ1は、実行対象のクエリの投入を受け付けた場合、予め算出した通信時間の関係を参照し、実行対象のクエリの実行に要する処理負荷を、DBサーバ1と各DBサーバ2との間において行われる通信に伴う処理負荷を考慮することによって算出する。その後、DBサーバ1は、例えば、算出した処理負荷に基づいて、実行対象のクエリの実行に用いる実行計画133を決定する。
【0175】
これにより、DBサーバ1は、実行対象のクエリの実行に用いる実行計画133を適切に選択することが可能になる。そのため、DBサーバ1は、実行対象のクエリの実行に伴う外部DB3に対するアクセスの最適化を行うことが可能となる。
【0176】
以上の実施の形態をまとめると、以下の付記のとおりである。
【0177】
(付記1)
複数の外部データベースに対するアクセスの通信時間の測定結果に基づき、前記複数の外部データベースそれぞれに対する前記通信時間の関係を特定し、
前記複数の外部データベースのうちの少なくとも1以上の外部データベースを利用する処理の実行指示を受け付けた場合、前記通信時間の関係に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の処理負荷を算出し、
算出した前記処理負荷に応じて、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0178】
(付記2)
付記1において、
前記通信時間の関係を特定する処理では、前記複数の外部データベースのそれぞれに対する前記通信時間の比を算出し、
前記処理負荷を算出する処理では、
前記少なくとも1以上の外部データベースのそれぞれについての前記通信時間の比と、前記少なくとも1以上の外部データベースのそれぞれとの間における第1サイズのデータの通信に伴う第1処理負荷の比とが一致するように、前記少なくとも1以上の外部データベースのそれぞれに対応する前記第1処理負荷を算出し、
算出した前記第1処理負荷に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の前記処理負荷を算出する、
ことを特徴とする情報処理プログラム。
【0179】
(付記3)
付記2において、
前記通信時間の関係を特定する処理では、
前記コンピュータが有する内部データベースからのデータの取得に要する取得時間を測定し、
測定した前記取得時間と、前記複数の外部データベースのそれぞれに対する前記通信時間との比を算出し、
前記処理負荷を算出する処理では、
前記内部データベースからの第2サイズのデータの取得に伴う第2処理負荷を記憶部から取得し、
前記取得時間と、前記少なくとも1以上の外部データベースのそれぞれについての前記通信時間との比と、取得した前記第2処理負荷と、前記少なくとも1以上の外部データベースのそれぞれに対応する前記第1処理負荷の比とが一致するように、前記少なくとも1以上の外部データベースのそれぞれに対応する前記第1処理負荷を算出し、
算出した前記第1処理負荷と前記第2処理負荷とに基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の前記処理負荷を算出する、
ことを特徴とする情報処理プログラム。
【0180】
(付記4)
付記3において、
前記処理負荷を算出する処理では、
前記第1処理負荷に基づいて、前記実行指示に対応する処理の実行に伴って発生する前記少なくとも1以上の外部データベースのそれぞれとの間における第3サイズのデータの通信に伴う第3処理負荷を算出し、
前記第2処理負荷に基づいて、前記実行指示に対応する処理の実行に伴って前記少なくとも1以上の外部データベースのそれぞれにおいて発生する第4サイズのデータの取得に伴う第4処理負荷を算出し、
算出した前記第3処理負荷と前記第4処理負荷との合計を、前記少なくとも1以上の外部データベースに対してアクセスを行う際の前記処理負荷として算出する、
ことを特徴とする情報処理プログラム。
【0181】
(付記5)
付記4において、
前記処理負荷を算出する処理では、
前記第3サイズを前記第1サイズで除算することによって算出した値と前記第1処理負荷とを乗算することによって前記第3処理負荷を算出し、
前記第4サイズを前記第1サイズで除算することによって算出した値と前記第2処理負荷とを乗算することによって前記第4処理負荷を算出する、
ことを特徴とする情報処理プログラム。
【0182】
(付記6)
付記1において、
前記処理負荷を算出する処理では、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスを行う際の複数の実行計画ごとに、前記通信時間の関係に基づいて前記処理負荷を算出し、
前記アクセスの制御を行う処理では、前記複数の実行計画のうちの前記処理負荷が最も小さい実行計画に従って、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
ことを特徴とする情報処理プログラム。
【0183】
(付記7)
付記1において、さらに、
アクセス対象の外部データベースとして新たな外部データベースが追加された場合、前記新たな外部データベースに対するアクセスの通信時間を測定し、
前記複数の外部データベースに対するアクセスの通信時間の測定結果と前記新たな外部データベースに対するアクセスの通信時間の測定結果とに基づき、前記複数の外部データベースそれぞれに対するアクセスと前記新たな外部データベースに対するアクセスとの通信時間の関係を特定する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0184】
(付記8)
付記1において、
前記アクセスの制御を行う処理では、前記少なくとも1以上の外部データベースに格納された複数のテーブルに含まれるデータに対するアクセス順序を決定する、
ことを特徴とする情報処理プログラム。
【0185】
(付記9)
付記8において、
前記アクセスの制御を行う処理では、前記少なくとも1以上の外部データベースに格納された複数のテーブルに含まれるデータに対するアクセスが行われる場合、前記複数のテーブルのうち、データ数がより少ないテーブルから順にアクセスが行われるように、前記アクセス順序を決定する、
ことを特徴とする情報処理プログラム。
【0186】
(付記10)
付記1において、
前記アクセスの制御を行う処理では、前記少なくとも1以上の外部データベースに含まれるデータの検索方法を決定する、
ことを特徴とする情報処理プログラム。
【0187】
(付記11)
付記10において、
前記処理負荷を算出する処理では、前記少なくとも1以上の外部データベースに格納された特定のテーブルに対するアクセスが行われる場合、前記特定のテーブルに含まれるデータの全走査を行うことによって前記特定のテーブルに含まれるデータに対するアクセスを行う際の第5処理負荷と、前記特定のテーブルについてのインデックスを参照することによって前記特定のテーブルに含まれるデータに対するアクセスを行う際の第6処理負荷とを算出し、
前記アクセスの制御を行う処理では、前記第5処理負荷が前記第6処理負荷よりも大きい場合、前記特定のテーブルについてのインデックスを参照することによって前記特定のテーブルに含まれるデータに対するアクセスを行い、前記第6処理負荷が前記第5処理負荷よりも大きい場合、前記特定のテーブルに含まれるデータの全走査を行うことによって前記特定のテーブルに含まれるデータに対するアクセスを行う、
ことを特徴とする情報処理プログラム。
【0188】
(付記12)
複数の外部データベースに対するアクセスの通信時間の測定結果に基づき、前記複数の外部データベースそれぞれに対する前記通信時間の関係を特定する関係特定部と、
前記複数の外部データベースのうちの少なくとも1以上の外部データベースを利用する処理の実行指示を受け付けた場合、前記通信時間の関係に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の処理負荷を算出する負荷算出部と、
算出した前記処理負荷に応じて、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行うアクセス制御部と、を有する、
ことを特徴とする情報処理装置。
【0189】
(付記13)
付記12において、
前記処理負荷部は、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスを行う際の複数の実行計画ごとに、前記通信時間の関係に基づいて前記処理負荷を算出し、
前記アクセス制御部は、前記複数の実行計画のうちの前記処理負荷が最も小さい実行計画に従って、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
ことを特徴とする情報処理装置。
【0190】
(付記14)
複数の外部データベースに対するアクセスの通信時間の測定結果に基づき、前記複数の外部データベースそれぞれに対する前記通信時間の関係を特定し、
前記複数の外部データベースのうちの少なくとも1以上の外部データベースを利用する処理の実行指示を受け付けた場合、前記通信時間の関係に基づいて、前記少なくとも1以上の外部データベースに対してアクセスを行う際の処理負荷を算出し、
算出した前記処理負荷に応じて、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
処理をコンピュータに実行させることを特徴とする情報処理方法。
【0191】
(付記15)
付記14において、
前記処理負荷を算出する処理では、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスを行う際の複数の実行計画ごとに、前記通信時間の関係に基づいて前記処理負荷を算出し、
前記アクセスの制御を行う処理では、前記複数の実行計画のうちの前記処理負荷が最も小さい実行計画に従って、前記少なくとも1以上の外部データベースに含まれるデータに対するアクセスの制御を行う、
ことを特徴とする情報処理方法。
【符号の説明】
【0192】
1:DBサーバ 1a:内部DB
2a:DBサーバ 2b:DBサーバ
2c:DBサーバ 3a:外部DB
3b:外部DB 3c:外部DB
5:操作端末 10:情報処理システム
NW:ネットワーク