[情報処理システムの構成]
図1は、情報処理システム10の全体構成を示す図である。図1に示す情報処理システム10(以下、業務システム10とも呼ぶ)は、情報処理装置1と、データベース2とを有する。図1に示す情報処理装置1は、インターネット網等からなるネットワークNWを介して、利用者がサービスの提供を受けるために使用する利用者端末21a、21b、21c(以下、これらを総称して利用者端末21とも呼ぶ)とアクセス可能である。
情報処理装置1では、データベース2に記憶されている情報(事業者が利用者に対してサービスを提供するために用いる情報)を管理するDBMSが動作する。そして、情報処理装置1(情報処理装置1のDBMS)は、利用者が利用者端末21を介して送信したアクセス要求を受信した場合に、受信したアクセス要求の内容に基づいて、データベース2に記憶された情報に対するアクセスを行う。
なお、図1に示すデータベース2は、情報処理装置1の外部に存在している。これに対し、情報処理装置1に含まれる記憶媒体(図示しない)がデータベース2として機能するものであってもよい。以下、利用者が利用者端末21を介して情報処理装置1にアクセス要求を送信した場合における処理について説明を行う。
[アクセス要求が発生した場合の具体例]
図2は、アクセス要求が発生した場合の具体例を説明する図である。以下、データベース2に記憶されている各情報は、予め定義された1つ以上の表(以下、データテーブルとも呼ぶ)であるものとする。
図2に示す例において、データベース2は、表1(表1に含まれる情報)を記憶している。そして、表1に含まれる情報は、所定の規則に基づいてグループ分けされ、データベース2内に確保された表域(1−1)、(1−2)及び(1−3)のいずれかに記憶されている。さらに、データベース2には、表域(1−1)、(1−2)及び(1−3)に記憶された情報にそれぞれ対応するインデックス(1−1)、(1−2)及び(1−3)が記憶されている。
初めに、利用者は、図2に示すように、情報処理装置1に対するアクセス要求を作成する。このアクセス要求は、例えば、利用者が利用者端末21においてSQL(Structured Query Language)文を入力することによって作成される。具体的に、利用者は、例えば、図2に示すように、データベース2に記憶されている表1に含まれる情報のうち、C20に設定された値が1よりも大きい情報の全ての項目を抽出するためのアクセス要求である「SELECT * FROM 表1 WHERE C20>1;」を作成する。そして、利用者は、図2に示すように、作成したアクセス要求を情報処理装置1に送信する。
次に、情報処理装置1は、利用者(利用者端末21)からアクセス要求を受信した場合、例えば、情報処理装置1内の記憶部130を参照し、受信したアクセス要求に対応するアクセスプラン131が存在するか否かを判定する。アクセスプラン131は、データベース2に記憶されている情報に対するアクセス経路が定義された情報である。
そして、情報処理装置1は、受信したアクセス要求に対応するアクセスプラン131が記憶部130に存在する場合、存在したアクセスプラン131の内容に基づいて、アクセス要求に対応する情報(データベース2に記憶された情報)に対してアクセスを行う。具体的に、情報処理装置1は、図2に示すように、インデックス(1−2)を経由すべき旨の情報がアクセスプラン131に含まれている場合、インデックス(1−2)を経由して、表域(1−2)に記憶された情報に対してアクセスを行う。また、情報処理装置1は、インデックスを経由しない旨の情報がアクセスプラン131に含まれている場合、アクセス要求に対応する情報が存在する可能性がある全領域(表域(1−1)、(1−2)及び(1−3))を走査し、アクセスすべき情報に対してアクセスを行う。
一方、情報処理装置1は、受信したアクセス要求に対応するアクセスプラン131が記憶部130に存在しない場合、例えば、事業者が予め設定したポリシーに基づき、受信したアクセス要求に対応するアクセスプラン131を新たに作成する。このポリシーは、例えば、情報に対してアクセスを行う際に経由することができるインデックスが存在する場合、必ずそのインデックスを経由してアクセスプラン131を作成する旨を含むものであってよい。そして、情報処理装置1は、作成したアクセスプラン131の内容に基づいて、アクセス要求に対応する情報(データベース2に記憶された情報)に対してアクセスを行う。その後、情報処理装置1は、新たに作成したアクセスプラン131を記憶部130に記憶する。
これにより、情報処理装置1は、記憶部130にアクセスプラン131が記憶されているアクセス要求を受信した場合、新たなアクセスプラン131の作成を行う必要がないため、アクセスに要する時間を短縮することが可能になる。
[情報処理システムの稼働後にインデックスの追加を行う場合の具体例]
次に、情報処理システム10の稼働後にインデックスの追加を行う場合の具体例について説明を行う。図3及び図4は、情報処理システム10の稼働後にインデックスの追加を行う場合の具体例を説明する図である。以下、表2に含まれる情報が表域(2−1)及び(2−2)にも記憶されることに伴い、表域(2−1)及び(2−2)にそれぞれ対応するインデックス(2−1)及び(2−2)が新たに作成(追加)される場合について説明を行う。
一般的に、インデックスの作成は、情報処理システム10の構築前に行われたデータベースの設計内容に基づき、情報処理システム10の構築時において行われる。これに対し、情報処理装置1は、情報処理システム10が利用者に提供するサービスの内容等によって、業務システムの設計時における事業者の想定を超えた大きさの表域の管理を行う場合がある。そのため、事業者は、データベースに対するアクセス性能の維持等を図るために、インデックスの追加を情報処理システム10の稼働後において行う場合がある。
しかしながら、情報処理システム10は、利用者に提供するサービスの内容等によって、稼働後において停止することが困難である場合がある。そのため、事業者は、インデックスの追加を行うために、例えば、稼働中の情報処理システム10を停止することなくインデックスの追加を行う。すなわち、情報処理装置1は、この場合、図3及び図4に示すように、利用者端末21が送信したアクセス要求に対応する処理と並行しながらインデックスの追加に伴う処理を実行する。
具体的に、図3に示す例では、インデックス(2−1)及び(2−2)を記憶するためのインデックス領域の確保が完了し、インデックス(2−1)の記憶についても完了している状態を示している。一方、図3に示す例では、インデックス(2−2)の記憶については完了していない状態を示している。すなわち、利用者端末21が送信したアクセス要求に対応する処理と並行してインデックスの追加を行う場合、情報処理装置1は、図3に示すような場合においても、利用者端末21から受信したアクセス要求の内容に基づいてデータベース2に対するアクセスを行う。
ここで、情報処理装置1(情報処理装置1のDBMS)は、インデックス領域が確保されているインデックスの経由を許可するか否かについて、データベース2に記憶されている表毎にのみ制御を行う場合がある。そして、図3に示す例では、表2のインデックスであるインデックス(2−1)及び(2−2)のインデックス領域が既に確保されている状態である。そのため、情報処理装置1は、この場合、インデックス領域に対するインデックス(2−2)の記憶が完了しているか否かを問わず、インデックス(2−2)を経由する場合を含むアクセスプラン131を作成する。したがって、インデックス(2−2)を経由すべきアクセス要求が発生した場合、情報処理装置1は、図4に示すように、インデックス(2−2)を経由したアクセスを試みることになる。
しかしながら、この場合、インデックス領域に対するインデックス(2−2)の追加が完了していないため、受信したアクセス要求の内容に基づくデータベース2(表域(2−2))に対するアクセスは失敗する。
そこで、本実施の形態における情報処理装置1は、データベース2に記憶されたデータテーブルについてのインデックスの追加が発生したときに、データテーブルを全走査することによりデータテーブルに対するアクセスが行われるように、アクセスプランを作成する。そして、情報処理装置1は、インデックスの追加が完了した後、追加されたインデックスを参照してデータテーブルに対するアクセスが行われるように、アクセスプランを再作成する。
すなわち、情報処理装置1は、インデックスの追加(図3及び図4の例ではインデックス(2−1)及び(2−2))が行われている間、その追加されているインデックスを参照することなくデータテーブルにアクセスを行うように、アクセスプランを作成する。具体的に、情報処理装置1は、インデックスの追加が行われている間、データテーブルの全走査を行うことによってデータテーブルへのアクセスを行うように、アクセスプランの作成を行う。これにより、情報処理装置1は、インデックスの追加が行われている間であっても、データテーブルに対するアクセスの失敗の発生を防止することが可能になる。
[情報処理装置のハードウエア構成]
次に、情報処理装置1のハードウエア構成について説明する。図5は、情報処理装置1のハードウエア構成を説明する図である。
情報処理装置1は、プロセッサであるCPU101と、メモリ102と、外部インターフェース(I/Oユニット)103と、記憶媒体(ストレージ)104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、記憶媒体104内のプログラム格納領域(図示しない)に、データベース2のアクセス制御を行う処理(以下、DB制御処理とも呼ぶ)を行うためのプログラム110(以下、DB制御プログラム110とも呼ぶ)を記憶する。
CPU101は、図5に示すように、プログラム110の実行時に、プログラム110を記憶媒体104からメモリ102にロードし、プログラム110と協働してDB制御処理を行う。
外部インターフェース103は、データベース2と通信を行う。また、外部インターフェース103は、ネットワークNWを介して利用者端末21と通信を行う。
また、記憶媒体104は、例えば、DB制御処理を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。なお、以下、図1等で説明したデータベース2は、情報格納領域130の一部であるものとして説明を行う。
[情報処理装置のソフトウエア構成]
次に、情報処理装置1のソフトウエア構成について説明する。図6は、図5の情報処理装置1の機能ブロック図である。CPU101は、プログラム110と協働することにより、アクセスプラン作成部111と、情報管理部112と、アクセス実行部113と、アクセスプラン再作成部114と、インデックス管理部115として動作する。また、情報格納領域130には、アクセスプラン131と、データテーブル132と、判定情報133と、インデックス134と、状態情報135とが記憶されている。
アクセスプラン作成部111は、利用者端末2からデータベース2に記憶されたデータテーブル132に対するアクセス要求を受信した場合に、そのアクセス要求に対応するアクセスプラン131を作成する。そして、アクセスプラン作成部111は、作成したアクセスプラン131を情報格納領域130に記憶する。なお、アクセスプラン作成部111は、受信したアクセス要求に対応するアクセスプラン131が記憶部130に既に存在する場合、新たなアクセスプラン131の作成を行わず、存在したアクセスプラン131を維持するものであってよい。すなわち、アクセスプラン作成部111は、受信したアクセス要求に対応するアクセスプラン131が存在しない場合に、新たなアクセスプラン131を作成するものであってよい。
また、アクセスプラン作成部111は、インデックス134の追加が行われている間、データテーブル132へのアクセスがデータテーブル132(アクセスすべき情報が存在する可能性がある全てのデータテーブル132)を全走査することにより行われるように、アクセスプラン131を作成する。そして、アクセスプラン作成部111は、作成したアクセスプラン131を情報格納領域130に記憶する。なお、アクセスプラン作成部111は、インデックス134の追加が行われている場合においても、インデックス134の追加が行われる前に作成されたアクセスプラン131が既に存在する場合、新たなアクセスプラン131を作成せずに、存在したアクセスプラン131を維持するものであってよい。アクセスプラン131の具体例については後述する。
情報管理部112は、インデックス134の追加が現在行われているか否かを示す判定情報133の更新を行う。また、情報管理部112は、インデックス134の追加が完了したか否かを示すパーティション毎(インデックス134毎)の状態情報135の更新を行う。判定情報133及び状態情報135の具体例については後述する。
アクセス実行部113は、利用者端末21からデータベース2に記憶された情報に対するアクセス要求を受信した場合に、情報格納領域130に記憶されたアクセスプラン131(新たに作成されたアクセスプラン131を含む)を参照して、データベース2に記憶された情報に対するアクセスを行う。そして、アクセス実行部113は、アクセスを行った結果を利用者端末2に送信する。
アクセスプラン再作成部114は、インデックス134の追加が完了した後、追加されたインデックス134を参照してデータテーブルに対するアクセスが行われるように、アクセスプラン131を再作成する。すなわち、アクセスプラン再作成部114は、この場合、例えば、追加されたインデックス134に対応するデータテーブル132にアクセスするための全てのアクセスプラン131を再作成する。
なお、アクセスプラン再作成部114は、インデックス134の追加が完了した場合、追加されたインデックス134に対応するデータテーブル132にアクセスするための全てのアクセスプラン131の削除を行うものであってもよい。この場合、アクセスプラン作成部111は、受信したアクセス要求に対応するアクセスプラン131が存在しない場合に、アクセスプラン再作成部114が削除したアクセスプラン131を含め、追加されたインデックス134を参照する場合を含むアクセスプラン131の作成を行う。
また、データテーブル132が複数の表域に分割されて記憶されている場合、追加されるインデックス134は、その複数の表域に含まれる1以上の表域それぞれに対応する1以上のインデックス134である。この場合、アクセスプラン再作成部114は、その1以上のインデックス134の全ての追加が完了した場合に、アクセスプラン131の再作成(アクセスプラン131の削除)を行うものであってよい。
インデックス管理部115は、事業者等によるインデックス134の追加要求(以下、単にインデックス追加要求とも呼ぶ)を受信した場合、インデックス134の作成を行う。そして、インデックス管理部115は、作成したインデックス134を情報格納領域130に記憶する。インデックス134の具体例については後述する。
[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。図7は、第1の実施の形態におけるDB制御処理の概略を説明するフローチャートである。また、図8から図11は、第1の実施の形態におけるDB制御処理の概略を説明する図である。図8から図11を参照しながら、図7のDB制御処理について説明を行う。なお、図8から図11に示すデータベース2は、図3及び図4で説明したデータベース2に対応する。また、図8から図11において、インデックス(1−1)から(1−3)、及び表域(1−1)から(1−3)については図示しない。
[DB制御処理の概略]
情報処理装置1は、図7に示すように、インデックス134の追加が発生するまで待機する(S1のNO)。具体的に、情報処理装置1は、例えば、事業者がインデックス134の追加を行う旨の入力を行うまで待機する。そして、インデックス134の追加が発生した後(S1のYES)、情報処理装置1は、図8に示すように、インデックス134を参照せずにデータテーブル132を全走査することによりデータテーブル132にアクセスするように、アクセスプラン131を作成する(S2)。
すなわち、情報処理装置1は、インデックス134の追加が行われている間において、データテーブル132に対するアクセス要求を受信した場合、図9に示すように、既に追加設定が完了したインデックス134(インデックス(2−1))についても参照せずに、データテーブル132(表域(2−1)及び(2−2))に対するアクセスを行う。これにより、情報処理装置1は、受信したアクセス要求に対応するアクセスを行った際に、インデックス134(インデックス134の一部)の追加がまだ完了していないことに伴うアクセス失敗の発生を防止することが可能になる。
具体的に、情報処理装置1は、例えば、インデックス134の追加が行われている間に発生したアクセス要求に対応するアクセスプラン131が情報格納領域130に記憶されている場合、記憶されていたアクセスプラン131を、データテーブル132を全走査することによりアクセスするように更新する。一方、情報処理装置1は、例えば、インデックス134の追加が行われている間に発生したアクセス要求に対応するアクセスプラン131が情報格納領域130に記憶されていない場合、データテーブル132を全走査してアクセスするようにアクセスプラン131を新たに作成する(S2)。
図7に戻り、情報処理装置1は、インデックス134の追加が完了するまで待機する(S3のNO)。具体的に、情報処理装置1は、例えば、事業者がインデックス134の追加が完了した旨の入力を行うまで待機する。その後、インデックス134の追加が完了した場合(S3のYES)、情報処理装置1は、図10に示すように、追加されたインデックス134を参照してデータテーブル132に対するアクセスを行うように、アクセスプラン131を再作成する。
すなわち、インデックス134の追加が完了した場合、情報処理装置1は、アクセスの失敗を発生させることなく、インデックス134を参照してデータテーブル132のアクセスを行うことが可能になる。そのため、情報処理装置1は、この場合、図11に示すように、作成済のインデックス134(新たに追加されたインデックス134を含む)を参照してデータテーブル132へのアクセスを行うように、アクセスプラン131の再作成を行う。
具体的に、情報処理装置1は、データテーブル132を全走査するように作成したアクセスプラン131を、インデックス134(追加されたインデックス134を含む)を参照してデータテーブル132に対するアクセスを行うように再作成する(S4)。
このように、情報処理装置1は、データベース2に記憶されたデータテーブル132についてのインデックス134の追加が発生したときに、アクセスプラン131の作成を行う。具体的に、情報処理装置1は、この場合、インデックス134の追加が完了するまでの間、インデックス134を参照せずにデータテーブル132を全走査することによりデータテーブル132に対するアクセスが行われるように、アクセスプラン131を作成する。
その後、情報処理装置1は、インデックス134の追加が完了した後、追加されたインデックス134を参照してデータテーブル132に対するアクセスが行われるように、アクセスプラン131を再作成する。
これにより、情報処理装置1は、インデックス134の追加が行われている場合であっても、アクセス失敗を発生させることなく、データテーブル132に対するアクセスを行うことが可能になる。そのため、情報処理装置1は、データテーブルの参照中にインデックスの追加を行うことが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図12から図15は、第1の実施の形態におけるDB制御処理の詳細を説明するフローチャートである。また、図16から図30は、第1の実施の形態におけるDB制御処理の詳細を説明する図である。図16から図30を参照しながら、図12から図15のDB制御処理を説明する。
[データテーブル、インデックス及びアクセスプラン]
初めに、データテーブル132、インデックス134及びアクセスプラン131の具体例について説明を行う。以下、データテーブル132は、データテーブル132aとデータテーブル132bとに分割され、データベース2内における異なる表域にそれぞれ記憶されているものとして説明を行う。また、以下、データテーブル132は、事業者が提供するサービスを利用する利用者の情報を含む利用者表であるものとして説明を行う。
[データテーブルの具体例]
図16及び図17は、データテーブル132の具体例を説明する図である。図16は、データテーブル132aの具体例であり、図17は、データテーブル132bの具体例である。
図16に示すデータテーブル132aには、データテーブル132aに含まれる各情報を識別する「項番」と、データテーブル132aに含まれる各情報がデータベース2に記憶された日を示す「登録日」とを項目として有している。また、図16に示すデータテーブル132aには、記憶された情報のうちの氏名が設定される「氏名」と、記憶された情報のうちの所在地が設定される「所在地」と、記憶された情報のうちの年齢が設定される「年齢」とを項目として有する。
具体的に、図16に示すデータテーブル132aにおいて、「項番」が「1」である情報には、「登録日」として「2014/8/2」が設定され、「氏名」として「AAA」が設定され、「所在地」として「東京」が設定され、「年齢」として「32」が設定されている。図16のデータテーブル132aに含まれる他の情報については説明を省略する。
そして、図17に示すデータテーブル132bは、図16で説明したデータテーブル132aと同じ項目を有している。具体的に、図17に示すデータテーブル132bにおいて、「項番」が「13」である情報には、「登録日」として「2014/9/1」が設定され、「氏名」として「NNN」が設定され、「所在地」として「神奈川」が設定され、「年齢」として「25」が設定されている。図17のデータテーブル132bに含まれる他の情報については説明を省略する。
すなわち、図16及び図17に示す例において、データテーブル132に含まれる情報のうち、「登録日」が2014年8月である情報は、データテーブル132aに含まれている。また、データテーブル132に含まれる情報のうち、「登録日」が2014年9月である情報は、データテーブル132bに含まれている。そのため、例えば、データテーブル132に含まれる情報のうち、2014年8月に登録された情報のみが不要になった場合、事業者は、データテーブル132aのみの削除を行うことで、不要な情報の削除を行うことが可能になる。これにより、事業者は、情報の削除等を含めた情報の管理を容易に行うことが可能になる。
[インデックスの具体例]
次に、インデックス134の具体例について説明を行う。図18及び図19は、インデックス134の具体例を説明する図である。具体的に、図18は、図16で説明したデータテーブル132aに対するアクセス時間を短縮するためのインデックス134aであり、図19は、図17で説明したデータテーブル132bに対するアクセス時間を短縮するためのインデックス134bである。
図18に示すインデックス134aには、インデックス134aに含まれる各情報を識別する「項番」と、図16で説明した「所在地」と、図16で説明したデータテーブル132aの「項番」に対応する「データテーブルの項番」とを項目として有している。
具体的に、図18に示すインデックス134aにおいて、「項番」が「1」である情報には、「所在地」として「東京」が設定され、「データテーブルの項番」として「1,8,10,11」が設定されている。すなわち、図18に示すインデックス134aの「データテーブルの項番」には、図16に示すデータテーブル132aに含まれる情報にうち、「所在地」に「東京」が設定された情報の「項番」である「1,8,10,11」が設定されている。
これにより、情報処理装置1のアクセス実行部113は、データテーブル132aから「所在地」が「東京」である情報を抽出する場合に、図18に示すインデックス134を参照することで、抽出すべき情報の「項番」を特定することが可能になる。そのため、アクセス実行部113は、データテーブル132aに含まれる全ての情報を走査することなく、必要な情報に迅速にアクセスすることが可能になる。図18のインデックス134aに含まれる他の情報については説明を省略する。
そして、図19に示すインデックス134bは、図18で説明したインデックス134aと同じ項目を有している。具体的に、図19に示すインデックス134bにおいて、「項番」が「1」である情報には、「所在地」として「東京」が設定され、「データテーブルの項番」として「16,18,22」が設定されている。図19のインデックス134bに含まれる他の情報については説明を省略する。
[アクセスプランの具体例]
次に、アクセスプラン131の具体例について説明を行う。図20は、アクセスプラン131の具体例を説明する図である。
図20に示すアクセスプラン131には、アクセスプラン131に含まれる各情報を識別する「項番」と、情報処理装置1が利用者端末21から受信したアクセス要求の内容(SQL文)が設定される「アクセス要求」とを項目として有する。また、図20に示すアクセスプラン131には、「アクセス要求」に設定された内容のアクセス要求を行う際に、インデックス134a及びインデックス134bを参照してアクセスを行うか否かについての情報である「インデックス参照要否」を項目として有する。
具体的に、図20に示すアクセスプラン131において、「項番」が「1」である情報には、「アクセス要求」として、利用者表のうち、「所在地」が「大阪」である情報の全ての項目を抽出するためのSQL文である「SELECT * FROM 利用者表 WHERE 所在地=大阪」が設定されている。また、図20に示すアクセスプラン131において、「項番」が「1」である情報には、「インデックス参照要否」として、インデックス134a及びインデックス134bを参照することを示す「134a、134b参照」が設定されている。そのため、アクセス実行部113は、アクセスプラン131の「項番」が「1」である情報に対応する「アクセス要求」に設定された内容のアクセス要求が発生した場合、インデックス134a及び134bを参照した上で、データテーブル132の参照を行う。
また、図20に示すアクセスプラン131において、「項番」が「2」である情報には、「アクセス要求」として、利用者表のうち、「氏名」が「EEE」である情報の全ての項目を抽出するためのSQL文である「SELECT * FROM 利用者表 WHERE 氏名=EEE」が設定されている。また、図20に示すアクセスプラン131において、「項番」が「2」である情報には、「インデックス参照要否」として、インデックス134a及びインデックス134bを参照しない(データテーブル132の全走査を行う)ことを示す「参照しない」が設定されている。そのため、アクセス実行部113は、アクセスプラン131の「項番」が「2」である情報に対応する「アクセス要求」に設定された内容のアクセス要求が発生した場合、インデックス134a及びインデックス134bを参照せずに、直接データテーブル132の参照を行う。図20に示すアクセスプラン131に含まれる他の情報については説明を省略する。
[インデックス追加処理]
次に、DB制御処理と並行して実行されるインデックス134の追加を行う処理(以下、インデックス追加処理とも呼ぶ)について説明を行う。図12は、第1の実施の形態におけるインデックス追加処理を説明するフローチャートである。なお、以下、インデックス134c及びインデックス134dが新たに追加される場合のインデックス追加処理について説明を行う。
情報処理装置1のインデックス管理部115は、インデックス追加要求を受信するまで待機する(S101のNO)。そして、インデックス追加要求を受信した場合(S101のYES)、インデックス管理部115は、追加予定のインデックス134の作成を開始する(S102)。具体的に、インデックス管理部115は、インデックス134を記憶するためのインデックス領域を確保する。そして、インデックス管理部115は、インデックス134を確保したインデックス領域に記憶する。
その後、インデックス管理部115は、追加予定のインデックス134のうち、追加が完了したインデックス134が発生するまで待機する(S103のNO)。そして、追加が完了したインデックス134が発生した場合(S103のYES)、情報管理部112は、状態情報135の更新を行う(S104)。以下、状態情報135の具体例について説明を行う。
[状態情報の具体例]
図21は、状態情報135の具体例を説明する図である。図21に示す状態情報135は、状態情報135に含まれる各情報を識別する「項番」と、追加予定のインデックス134を識別する「識別情報」と、各インデックス134の追加が完了したか否かを示す「追加完了フラグ」とを項目として有する。「追加完了フラグ」には、インデックス134の追加が完了したことを示す「1」、または、インデックス134の追加が完了していないことを示す「0」が設定される。
具体的に、図21に示す状態情報135において、「項番」が「1」である情報には、「識別情報」として、インデックス134cを示す「134c」が設定されており、「追加完了フラグ」には、「1」が設定されている。また、図21に示す状態情報135において、「項番」が「2」である情報には、「識別情報」として、インデックス134dを示す「134d」が設定されており、「追加完了フラグ」には、「0」が設定されている。すなわち、図21に示す状態情報135は、インデックス134cに対応するインデックス134の追加のみが完了していることを示している。
これにより、アクセスプラン作成部111は、状態情報135を参照し、インデックス134の追加が現在行われているか否かを判定することが可能になる。そのため、アクセスプラン作成部111は、後述するように、インデックス134の追加が現在行われているか否かに応じた処理の実行を行うことが可能になる。
図12に戻り、S104の処理の後、インデックス管理部115は、追加される予定のインデックス134の追加が全て完了したか否かを判定する(S105)。そして、全てのインデックス134の追加が完了していない場合(S105のNO)、S103以降の処理を再度実行する。一方、全てのインデックス134の追加が完了した場合(S105のYES)、インデックス管理部115は、インデックス追加処理を終了する。
[インデックスの具体例]
次に、図12で説明したインデックス追加処理によって追加されたインデックス134c及び134dの具体例について説明を行う。図22及び図23は、インデックス134の具体例を説明する図である。なお、インデックス134cは、図16で説明したデータテーブル132aに対応するインデックスであり、インデックス134dは、図17で説明したデータテーブル132bに対応するインデックスである。
図22に示すインデックス134cには、インデックス134cに含まれる各情報を識別する「項番」と、図16で説明した「年齢」と、図16で説明したデータテーブル132aの「項番」に対応する「データテーブルの項番」とを項目として有している。
具体的に、図22に示すインデックス134cにおいて、「項番」が「1」である情報には、「年齢」として「20歳代」が設定され、「項番」として「3,5,7」が設定されている。すなわち、図22に示すインデックス134cの「データテーブルの項番」には、図16に示すデータテーブル132aに含まれる情報にうち、「年齢」に「20」から「29」のいずれかが設定された情報の「項番」である「3,5,7」が設定されている。
これにより、アクセス実行部113は、データテーブル132aから「年齢」が「20」から「29」である情報を抽出する必要がある場合に、図22に示すインデックス134cを参照することで、抽出すべき情報の「項番」を特定することが可能になる。そのため、アクセス実行部113は、この場合、データテーブル132aに含まれる全ての情報を走査する必要がなくなる。図22のインデックス134cに含まれる他の情報については説明を省略する。
そして、図23に示すインデックス134dは、図22で説明したインデックス134cと同じ項目を有している。具体的に、図23に示すインデックス134dにおいて、「項番」が「1」である情報には、「年齢」として「20歳代」が設定され、「データテーブルの項番」として「13,14,20」が設定されている。図23のインデックス134dに含まれる他の情報については説明を省略する。
すなわち、事業者は、インデックス134c及びインデックス134dを追加することにより、「所在地」に設定された情報を条件とするインデックス(インデックス134a、134b)に加え、「年齢」に設定された情報を条件とするインデックスを作成することが可能になる。これにより、事業者は、「年齢」に設定された情報を条件として情報の抽出を行うアクセス要求を受信した場合についても、アクセスに要する時間を短縮させることが可能になる。
[アクセス要求を受信した場合のDB制御処理]
次に、情報処理装置1が利用者端末21からアクセス要求を受信した場合のおけるDB制御処理について説明を行う。図13から図15は、第1の実施の形態におけるDB制御処理を説明するフローチャートである。以下、アクセスプラン再作成部114がアクセスプラン131の削除のみを行う場合ものとして説明を行う。
アクセス実行部113は、利用者端末21からデータベース2に記憶されたデータテーブル132に対するアクセス要求を受信するまで待機する(S11のNO)。そして、アクセス要求を受信した場合(S11のYES)、アクセスプラン再作成部114は、データベース2の設定が変更されているか否かを判定する(S12)。データベース2の設定の変更は、例えば、パーティションの追加や変更である。
具体的に、事業者は、例えば、データベース2の設定の変更を行った場合に、メモリ102上の所定の記憶領域に、データベース2の設定の変更を行ったことを示す情報を記憶する。そして、インデックス管理部115は、メモリ102上にその情報が存在するか否かと判定することにより、データベース2の設定の変更が行われたか否かを判定するものであってよい。
その後、データベース2の設定の変更が行われたと判定した場合(S12のYES)、アクセスプラン再作成部114は、変更されたデータベース2の設定に対応するアクセスプラン131を削除する(S13)。一方、データベース2の設定の変更が行われていない場合(S12のNO)、アクセスプラン再作成部114は、S13の処理を実行しない。
すなわち、データベース2の設定が変更された場合、アクセスプラン再作成部114は、その変更前のデータベース2の設定に基づいて作成されたアクセスプラン131を更新する必要がある。そのため、アクセスプラン再作成部114は、この場合、設定が変更されたデータベース2に対応するアクセスプラン131を削除する。
なお、S12の処理におけるデータベース2の設定の変更には、図12で説明したインデックス134の追加が含まれないものとする。そのため、インデックス134の追加のみが行われた場合(インデックス134の追加のみが行われている場合)、アクセスプラン再作成部114は、S13の処理を実行しない。
その後、アクセスプラン作成部111は、S11の処理で受信したアクセス要求に対応するアクセスプラン131が存在するか否かを判定する(S14)。その結果、S11の処理で受信したアクセス要求に対応するアクセスプラン131が存在する場合(S14のYES)、アクセスプラン作成部111は、インデックス134の追加が現在行われているか否かを判定する(S15)。具体的に、アクセスプラン作成部111は、この場合、判定情報133を参照することにより、インデックス134の追加が行われているか否かを判定する。以下、判定情報133の具体例について説明を行う。
[判定情報の具体例]
図24及び図25は、判定情報133の具体例を説明する図である。初めに、インデックスの追加が行われていない場合の判定情報133について説明を行う。図24は、インデックスの追加が行われていない場合の判定情報133の具体例を説明する図である。
図24に示す判定情報133は、判定情報133に含まれる各情報を識別する「項番」と、インデックス134の追加が行われているか否かを示す「判定フラグ」とを項目として有する。「判定フラグ」には、インデックス134の追加が現在行われていることを示す「1」、または、インデックス134の追加が行われていないことを示す「0」が設定される。
具体的に、図24に示す例において、「項番」が「1」である情報の「判定フラグ」には、「0」が設定されている。すなわち、図24に示す判定情報133は、インデックス134の追加が現在行われていないことを示している。
次に、インデックスの追加が行われている場合の判定情報133について説明を行う。図25は、インデックスの追加が行われている場合の判定情報133の具体例を説明する図である。
図25に示す判定情報133は、図24で説明した判定情報133と同じ項目を有している。そして、図25に示す例において、「項番」が「1」である情報の「判定フラグ」には、「1」が設定されている(図25の下線部分)。
なお、判定情報133は、表毎に「判定フラグ」の項目を有しているものであってもよい。これにより、アクセスプラン作成部111は、インデックス134の追加が行われているか否かに応じて実行する処理の内容を、表毎に分けて決定することが可能になる。
また、判定情報133は、インデックス134の種類毎に「判定フラグ」の項目を有しているものであってもよい。具体的に、判定情報133は、「所在地」に関するインデックスであるインデックス134a、134bと、「年齢」に関するインデックスであるインデックス134c、134dとで、それぞれ「判定フラグ」の項目を有しているものであってよい。これにより、アクセスプラン作成部111は、インデックス134の追加が行われているか否かに応じて実行する処理の内容を、インデックス134の種類毎に分けて決定することが可能になる。
図13に戻り、S15の処理の結果、インデックス134の追加が行われていると判定した場合(S15のYES)、情報管理部112は、全てのインデックス134の追加が完了しているか否かを判定する(S16)。具体的に、情報管理部112は、状態情報135を参照し、追加予定の全てのインデックス134に対応する「追加完了フラグ」に「1」が設定されているか否かを判定する。
そして、全てのインデックス134の追加が完了していないと判定した場合(S15のNO)、アクセス実行部113は、図14に示すように、S11の処理で受信したアクセス要求に対応するアクセスプラン131を参照し、データテーブル132に対するアクセスを行う(S21)。その後、アクセス実行部113は、S21の処理におけるアクセスの結果を、アクセス要求の送信元(利用者端末21)に送信する(S22)。
すなわち、アクセスプラン作成部111及びアクセスプラン再作成部114は、インデックス134の追加が行われている間(S15のYES、S16のNO)、アクセスプラン131の削除や新たな作成を行わずに、情報格納領域130に記憶されているアクセスプラン131を維持する。そのため、アクセスプラン作成部111は、インデックス134の追加されている間にアクセス要求を受信した場合、インデックス134の追加が行われる前に作成されたアクセスプラン131を参照して、データテーブル132に対するアクセスを行う。これにより、アクセスプラン作成部111は、インデックス134の追加が行われている間に、アクセスプラン131を参照したアクセスが行われても、アクセスの失敗が発生することを防止することが可能になる。
また、アクセス実行部113は、インデックス134の追加が行われていない場合についても(S15のNO)、アクセスプラン131を参照してデータテーブル132に対するアクセスを行う(S21、S22)。すなわち、アクセスプラン作成部111及びアクセスプラン再作成部114は、インデックス134の追加が行われていない場合についても、アクセスプラン131の削除や新たな作成を行わない。これにより、アクセスプラン作成部111及びアクセスプラン再作成部114は、アクセスプラン131の削除や新たな作成に伴う処理負担を軽減させることが可能になる。
一方、S16の処理において、全てのインデックス134の追加が完了していると判定した場合(S16のYES)、情報管理部112は、インデックス134の追加が行われていないことを示すように判定情報133を更新する(S17)。すなわち、情報管理部112は、インデックス134の追加が完了した旨を判定情報133に反映させる。
その後、アクセスプラン再作成部114は、追加が完了したインデックス134に対応するアクセスプラン131を全て削除する(S18)。具体的に、アクセスプラン再作成部114は、例えば、追加されたインデックス134に含まれる情報を参照するアクセスプラン131を全て削除する。
すなわち、全てのインデックス134の追加が完了した場合、アクセスプラン作成部111がインデックス134を参照しても、アクセスの失敗は発生しない。そのため、アクセスプラン作成部111は、この場合、追加されたインデックス134を参照する場合を含むアクセスプラン131を再作成する必要がある。したがって、アクセスプラン再作成部114は、全てのインデックス134の追加が完了していると判定した場合、追加されたインデックス134に対応するアクセスプラン131を全て削除する。これにより、アクセスプラン作成部111は、後述するように、新たなアクセスプラン131の作成(アクセスプラン131の再作成)を行うことが可能になる。
そして、S18の処理の後、または、S11の処理で受信したアクセス要求に対応するアクセスプラン131が存在しないと判定された場合(S14のNO)、アクセスプラン作成部111は、図15に示すように、インデックス134の現在追加が行われているか否かを再度判定する(S31)。
そして、インデックス134の追加が行われていると判定した場合(S31のYES)、情報管理部112は、インデックスの追加が行われていることを示すように判定情報133の更新を行う(S32)。その後、アクセスプラン作成部111は、データテーブル132を全走査することによりデータテーブル132に対するアクセスを行うように、アクセスプラン131を作成する(S33)。
すなわち、S31の処理が行われる場合、S11の処理で受信したアクセス要求に対応するアクセスプラン131は存在しない(S12のNO、S16)。そのため、アクセスプラン作成部111は、インデックス134の追加が行われていると判定した場合(S31のYES)、追加予定のインデックス134を参照することがないように、アクセスプラン131の作成を行う(S33)。これにより、アクセスプラン作成部111は、アクセスの失敗が発生することを防止することが可能になる。
一方、インデックス134の追加が行われていないと判定した場合(S31のNO)、アクセスプラン作成部111は、データテーブル132を全走査することにより、または、インデックス134を参照することによりデータテーブル132に対するアクセスを行うように、アクセスプラン131を作成する(S34)。すなわち、アクセスプラン作成部111は、インデックス134の追加が行われていない場合、インデックス134を参照してもアクセスの失敗は発生しない。そのため、アクセスプラン作成部111は、この場合、インデックス134を参照する場合を含めてアクセスプラン131を作成する。
その後、アクセス実行部113は、利用者端末21からデータベース2に記憶されたデータテーブル132に対するアクセス要求を再度受信するまで待機する(S11のNO)。
[DB制御処理の具体例]
次に、DB制御処理の具体例について説明を行う。以下、図20で説明したアクセスプラン131が既に存在している場合におけるDB制御処理の具体例について説明を行う。なお、以下、データベース2の設定の変更は行われていないものとする。
初めに、インデックス134の追加が行われている場合(S15のYES、S16のNO)におけるアクセスプラン131の具体例について説明を行う。図26及び図27は、インデックス134の追加が行われている場合におけるアクセスプラン131の具体例を説明する図である。
例えば、アクセス要求として「SELECT * FROM 利用者表 WHERE 年齢>40」を受信した場合(S11のYES)、アクセスプラン作成部111は、そのアクセス要求に対応するアクセスプラン131が情報格納領域130に存在するか否かを判定する(S14)。
具体的に、図20に示すアクセスプラン131における「項番」が「3」である情報の「アクセス要求」には、受信したアクセス要求である「SELECT * FROM 利用者表 WHERE 年齢>40」が設定されている。そのため、アクセスプラン作成部111は、受信したアクセス要求に対応するアクセスプラン131が存在すると判定する(S14のYES)。
そして、アクセスプラン作成部111は、存在したアクセスプラン131を参照して、データテーブル132に対するアクセスを行う(S21)。また、アクセスプラン作成部111は、図26の下線部分に示すように、図20のアクセスプラン131における「項番」が「3」である情報を維持する。
その後、図26の状態の後、アクセス要求として「SELECT * FROM 利用者表 WHERE 年齢=25」を受信した場合、アクセスプラン作成部111は、図26で説明した場合と同様に、そのアクセス要求に対応するアクセスプラン131が情報格納領域130に存在するか否かを判定する(S14)。
具体的に、図26のアクセスプラン131には、「アクセス要求」に「SELECT * FROM 利用者表 WHERE 年齢=25」が設定されている情報は存在しない(S14のNO)。そのため、アクセスプラン作成部111は、図27の下線部分に示すように、「アクセス要求」に「SELECT * FROM 利用者表 WHERE 年齢=25」が設定され、「インデックス参照要否」に「参照しない」が設定された情報(「項番」が「6」である情報)を情報格納領域130に記憶する(S31のYES、S33)。
すなわち、アクセスプラン作成部111は、インデックス134の追加が行われている間にアクセス要求を受信した場合、追加されるインデックス(インデックス134c及びインデックス134d)が参照されないように、アクセスプラン131の作成(更新)を行う。これにより、アクセスプラン作成部111は、インデックス134の追加が行われている間に、新たに発生したアクセス要求によって、追加されるインデックス134が参照されることを防止することが可能になる。そのため、アクセスプラン作成部111は、アクセス実行部113によるアクセスの失敗の発生を防止することが可能になる。
次に、インデックス134の追加が完了した場合(S15のYES、S16のYES)におけるアクセスプラン131の具体例について説明を行う。図28及び図29は、インデックス134の追加が完了した場合におけるアクセスプラン131の具体例を説明する図である。
例えば、図27に示す状態の後、アクセス要求として「SELECT * FROM 利用者表 WHERE 年齢<=30」を受信した場合であって(S11のYES)、インデックス134c及びインデックス134dの追加が完了している場合(S15のYES、S16のYES)、アクセスプラン再作成部114は、追加されたインデックス134に対応するアクセスプラン131を削除する(S18)。
具体的に、インデックス134c及びインデックス134dは、「年齢」に設定された情報に関するインデックスである。そして、図27に示すアクセスプラン131において、「年齢」に設定された情報に関する条件を含むアクセス要求は、「項番」が「3」及び「6」である情報である。そのため、アクセスプラン再作成部114は、この場合、図28に示すように、図27で説明したアクセスプラン131のうち、「項番」が「3」及び「6」である情報を削除する。
その後、アクセスプラン作成部111は、「アクセス要求」が「SELECT * FROM 利用者表 WHERE 年齢<=30」であるアクセスプラン131を情報格納領域130に記憶する(S31のNO、S34)。
具体的に、アクセスプラン作成部111は、このアクセス要求が「年齢」に設定された情報を条件として含んでいると判定する。さらに、アクセスプラン作成部111は、「年齢」に設定された情報に対するインデックスとしてインデックス134c及びインデックス134dが情報格納領域130に記憶されていると判定する。そのため、アクセスプラン作成部111は、図29の下線部分に示すように、「アクセス要求」に「SELECT * FROM 利用者表 WHERE 年齢<=30」が設定され、「インデックス参照要否」に「134c、134d参照」が設定された情報(「項番」が「7」である情報)を情報格納領域130に記憶する(S34)。
これにより、アクセスプラン作成部111は、アクセス実行部113によるデータベース2へのアクセスに要する時間を短縮させることが可能になる。
次に、インデックス134の追加が行われていない場合(S15のNO)におけるアクセスプラン131の具体例について説明を行う。図30は、インデックス134の追加が行われていない場合におけるアクセスプラン131の具体例を説明する図である。
例えば、図29に示す状態の後、アクセス要求として「SELECT * FROM 利用者表 WHERE 年齢=25」を受信した場合、アクセスプラン作成部111は、そのアクセス要求に対応するアクセスプラン131が情報格納領域130に存在するか否かを判定する(S14)。
具体的に、図29のアクセスプラン131において、「アクセス要求」に「SELECT * FROM 利用者表 WHERE 年齢=25」が設定されている情報は存在しない(S14のNO)。また、アクセスプラン作成部111は、受信したアクセス要求は、「年齢」に設定された情報を条件として含んでいると判定する。さらに、アクセスプラン作成部111は、「年齢」に設定された情報に対するインデックスとしてインデックス134c及びインデックス134dが情報格納領域130に記憶されていると判定する。そのため、アクセスプラン作成部111は、図30の下線部分に示すように、「アクセス要求」に「SELECT * FROM 利用者表 WHERE 年齢=25」が設定され、「インデックス参照要否」に「134c、134d参照」が設定された情報(「項番」が「8」である情報)を情報格納領域130に記憶する(S31のNO、S34)。
なお、「SELECT * FROM 利用者表 WHERE 年齢=25」は、情報格納領域130に以前記憶されていたアクセスプラン131であるが、アクセスプラン作成部111は、以前記憶されていたか否かを問わずに、新たなアクセスプラン131の作成を行う。すなわち、図28で説明したように、アクセスプラン再作成部114は、追加されたインデックス(インデックス134c及びインデックス134d)に対応するアクセスプラン131の削除を行う。そして、アクセスプラン作成部111は、新たなアクセスプラン131の作成を行う。
このように、情報処理装置1は、データベース2に記憶されたデータテーブル132についてのインデックス134の追加が発生したときに、アクセスプラン131の作成を行う。具体的に、情報処理装置1は、この場合、インデックス134の追加が完了するまでの間、インデックス134を参照せずにデータテーブル132を全走査することによりデータテーブル132に対するアクセスが行われるように、アクセスプラン131を作成する。
その後、情報処理装置1は、インデックス134の追加が完了した後、追加されたインデックス134を参照してデータテーブル132に対するアクセスが行われるように、アクセスプラン131を再作成する。
これにより、情報処理装置1は、インデックス134の追加が行われている場合であっても、アクセス失敗を発生させることなく、データテーブル132に対するアクセスを行うことが可能になる。そのため、情報処理装置1は、データテーブルが参照されている間にインデックスの追加を行うことが可能になる。
以上の実施の形態をまとめると、以下の付記のとおりである。
(付記1)
コンピュータに、
データベースに記憶されたデータテーブルについてのインデックスの追加が発生したときに、前記インデックスの追加が完了するまでの間、前記データテーブルを全走査することにより前記データテーブルに対するアクセスが行われるように、アクセスプランを作成し、
前記インデックスの追加が完了した後、追加された前記インデックスを参照して前記データテーブルに対するアクセスが行われるように、前記アクセスプランを再作成する、
ことを実行させることを特徴とするデータベース制御プログラム。
(付記2)
付記1において、
前記データテーブルは、複数の記憶領域に分割されて記憶されており、
追加される前記インデックスは、前記複数の記憶領域に含まれる1以上の記憶領域それぞれに対応する1以上のインデックスであり、
前記アクセスプランを再作成する処理では、前記1以上のインデックスの全ての追加が完了した場合に、前記アクセスプランの再作成を行う、
ことを特徴とするデータベース制御プログラム。
(付記3)
付記1において、
前記アクセスプランを作成する処理では、前記インデックスの追加が発生した後であって前記インデックスの追加が完了するまでの間において、前記データテーブルに対するアクセスを行うためのアクセス要求を受け付けた際に、前記アクセス要求に対応する前記アクセスプランの作成を行い、
前記アクセスプランを再作成する処理では、前記インデックスの追加が完了した後、前記アクセス要求を再度受け付けた際に、前記アクセス要求に対応する前記アクセスプランの再作成を行う、
ことを特徴とするデータベース制御プログラム。
(付記4)
付記1において、
前記アクセスプランを再作成する処理では、作成された前記アクセスプランを削除し、
前記アクセスプランを作成する処理では、受け付けた前記アクセス要求に対応するアクセスプランが存在しない場合に、削除された前記アクセスプランを含めて、受け付けた前記アクセス要求に対応する前記アクセスプランの作成を行う、
ことを特徴とするデータベース制御プログラム。
(付記5)
付記1において、
前記アクセスプランを作成する処理では、前記インデックスの追加が行われていない間に作成された前記アクセスプランが存在する場合、前記アクセスプランの作成を行わず、存在した前記アクセスプランを維持する、
ことを特徴とするデータベース制御プログラム。
(付記6)
付記1において、
前記アクセスプランを作成する処理では、前記インデックスを参照せずに前記データテーブルに対するアクセスが行われるように、前記アクセスプランを作成する、
ことを特徴とするデータベース制御プログラム。
(付記7)
データベースに記憶されたデータテーブルについてのインデックスの追加が発生したときに、前記インデックスの追加が完了するまでの間、前記データテーブルを全走査することにより前記データテーブルに対するアクセスが行われるように、アクセスプランを作成するアクセスプラン作成部と、
前記インデックスの追加が完了した後、追加された前記インデックスを参照して前記データテーブルに対するアクセスが行われるように、前記アクセスプランを再作成するアクセスプラン再作成部と、を有する、
ことを特徴とするデータベース制御装置。
(付記8)
付記7において、
前記アクセスプラン作成部は、前記インデックスの追加が発生した後であって前記インデックスの追加が完了するまでの間において、前記データテーブルに対するアクセスを行うためのアクセス要求を受け付けた際に、前記アクセス要求に対応する前記アクセスプランの作成を行い、
前記アクセスプラン再作成部は、前記インデックスの追加が完了した後、前記アクセス要求を再度受け付けた際に、前記アクセス要求に対応する前記アクセスプランの再作成を行う、
ことを特徴とするデータベース制御装置。
(付記9)
データベースに記憶されたデータテーブルについてのインデックスの追加が発生したときに、前記インデックスの追加が完了するまでの間、前記データテーブルを全走査することにより前記データテーブルに対するアクセスが行われるように、アクセスプランを作成し、
前記インデックスの追加が完了した後、追加された前記インデックスを参照して前記データテーブルに対するアクセスが行われるように、前記アクセスプランを再作成する、
ことを特徴とするデータベース制御方法。
(付記10)
付記9において、
前記アクセスプランを作成する工程では、前記インデックスの追加が発生した後であって前記インデックスの追加が完了するまでの間において、前記データテーブルに対するアクセスを行うためのアクセス要求を受け付けた際に、前記アクセス要求に対応する前記アクセスプランの作成を行い、
前記アクセスプランを再作成する工程では、前記インデックスの追加が完了した後、前記アクセス要求を再度受け付けた際に、前記アクセス要求に対応する前記アクセスプランの再作成を行う、
ことを特徴とするデータベース制御方法。