(57)【特許請求の範囲】
【請求項１】
１つまたは複数のセグメントとして格納されたデータベースの選択的なスナップショットを生成するためのシステムであって、セグメントは１つまたは複数のメモリ・ページを含み、前記システムは、
−スナップショット・プロセスが前記１つまたは複数のセグメントの一部のセグメントにアクセスするように構成されるかどうかを、前記スナップショット・プロセスがその実行のために前記一部のセグメントを必要とするかの情報に基づいて、判定するための判定ユニットと、
−前記スナップショット・プロセスによりアクセスされるように構成されると前記判定ユニットが判定したアクセスされたセグメントに正のマッピング・ステータスを割り当て、前記スナップショット・プロセスによってアクセスするように構成されていないと前記判定ユニットが判定したアクセスされていないセグメントに負のマッピング・ステータスを割り当てるための割当てユニットと、
−前記スナップショット・プロセスをフォークし、前記スナップショット・プロセスが利用するスナップショットを生成するためのスナップショット・ユニットであって、前記スナップショット・プロセスは、前記１つまたは複数のセグメントのサブセットを含むアドレス空間を有し、負のマッピング・ステータスを割り当てられたマップされていないセグメントは前記アドレス空間内でマップされず、親プロセスの書込みによるコピー・オン・ライトを受けない、スナップショット・ユニットと、
を備える、システム。
【請求項２】
前記判定ユニットは、前記スナップショット・プロセスが、前記スナップショット・プロセスの実行が開始される前に前記選択されたセグメントにアクセスするように構成されるかどうかを判定するように構成される、請求項１に記載のシステム。
【請求項３】
前記判定ユニットは、アクティブなスナップショット・プロセスの実行中に、前記アクティブなスナップショット・プロセスが、前記アクティブなスナップショット・プロセスの残存実行時間中に前記選択されたセグメントにアクセスするように構成されるかどうかを判定するように構成される、請求項１または２に記載のシステム。
【請求項４】
前記割当てユニットは、前記スナップショット・プロセスにより実行されるべき物理実行計画をコンパイルするように構成されたコンパイル・ユニットであって、前記コンパイルされた物理実行計画は、好適には、前記セグメントは前記物理実行計画の残存実行時間の間アクセスされないとき、前記物理実行計画内の位置にあるセグメントに対するアンマップ・コマンドを含む、コンパイル・ユニットを備える、請求項１乃至３の１項に記載のシステム。
【請求項５】
正のマッピング・ステータスをアクセスされたセグメントに割り当てるステップは、前記アクセスされたセグメントのアドレスおよびサイズならびにＭＡＤＶ＿ＮＯＲＭＡＬパラメータを含む引数でｍａｄｖｉｓｅオペレーティング・システム関数を呼び出すステップを含み、かつ／または、負のマッピング・ステータスをアクセスされていないセグメントに割り当てるステップは、前記アクセスされていないセグメントのアドレスおよびサイズならびにＭＡＤＶ＿ＤＯＮＴＦＯＲＫパラメータを含む引数でｍａｄｖｉｓｅオペレーティング・システム関数を呼び出すステップを含む、請求項１乃至４の１項に記載のシステム。
【請求項６】
１つまたは複数のセグメントとして格納されたデータベースの選択的なスナップショットを生成するための方法であって、セグメントは１つまたは複数のメモリ・ページを含み、前記方法は、
−親プロセスが、スナップショット・プロセスが前記１つまたは複数のセグメントの一部のセグメントにアクセスするように構成されるかどうかを、前記スナップショット・プロセスがその実行のために前記一部のセグメントを必要とするかの情報に基づいて、判定するステップと、
−前記親プロセスが、前記セグメントが前記スナップショット・プロセスによりアクセスされるように構成されると判定された場合、正のマッピング・ステータスを前記セグメントに割り当てるステップおよび／または前記親プロセスが、前記セグメントが前記スナップショット・プロセスによりアクセスするように構成されていないと判定された場合前記セグメントに負のマッピング・ステータスを割り当てるステップと、
−前記親プロセスが前記スナップショット・プロセスをフォークし、前記スナップショット・プロセスが利用するスナップショットを生成するステップであって、前記スナップショット・プロセスは、前記１つまたは複数のセグメントのサブセットを含むアドレス空間を有し、負のマッピング・ステータスを割り当てられたマップされていないセグメントは前記アドレス空間内でマップされず、親プロセスの書込みによるコピー・オン・ライトを受けない、ステップと、
を含む、方法。
【請求項７】
正の継承可能ステータスをアクセスされたセグメントに割り当てるステップは、
−前記アクセスされたセグメントのステータス変数をマスク変数とＯＲ結合された前記ステータス変数に設定するステップと、
−ハッシュ・テーブル内の前記アクセスされたセグメントにポインタを挿入するステップと、
−前記ポインタが前記ハッシュ・テーブルに新たに挿入された場合、正のマッピング・ステータスを設定するステップと、
を含み、
前記親プロセスが前記スナップショットを生成するステップは、前記マスク変数を更新するステップを含み、前記マスク変数を更新するステップは特に、前記マスク変数のビット値を回転するステップを含む、
請求項６に記載の方法。
【請求項８】
前記スナップショットを生成するステップはさらに、前記マスク変数にＡＮＤ結合された前記セグメントのステータス変数が０である場合、前記ハッシュ・テーブル内のセグメントごとに負のマッピング・ステータスを設定するステップを含む、請求項７に記載の方法。
【請求項９】
前記方法はチェックポイント生成方法であり、前記スナップショット・プロセスは、前記１つまたは複数のセグメントのサブセットを含む前記データベースの選択的なスナップショットを永続記憶に書き込むように構成される、請求項８に記載の方法。
【請求項１０】
前記親プロセスが、スナップショット・プロセスが前記１つまたは複数のセグメントの選択されたセグメントにアクセスするように構成されるかどうかを判定するステップは、前記選択されたセグメントが以前のチェックポイント間隔において変更されているかどうかを判定するステップを含む、請求項９に記載の方法。
【請求項１１】
前記方法はハイブリッド・オンライン・トランザクション処理、ＯＬＴＰ、およびオンライン分析処理、ＯＬＡＰ、データベースシステムを保守するための方法であり、前記方法は、前記親プロセスがスナップショットを生成した後に、
−前記親プロセスがＯＬＡＰクエリを受信するステップと、
−前記スナップショット・プロセスが前記ＯＬＡＰクエリを実行するステップと、
を含む、請求項８乃至１０の１項に記載の方法。
【請求項１２】
前記親プロセスが前記ＯＬＡＰクエリに基づいて前記スナップショット・プロセスをコンパイルするステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記親プロセスが、スナップショット・プロセスが選択されたセグメントにアクセスするように構成されるかどうかを判定するステップは、前記親プロセスが物理実行計画を生成するステップであって、特に前記親プロセスは正のマッピング・ステータスを前記物理実行計画内で参照される参照セグメントに割り当てる、ステップを含む、請求項１１または１２の１項に記載の方法。
【請求項１４】
−前記スナップショット・プロセスがフォークされた後、前記スナップショット・プロセスによりアクセスされていない、アクセスされていないセグメントを決定するステップと、
−前記アクセスされていないセグメントをアンマップするステップと、
をさらに含む、請求項８乃至１３の１項に記載の方法。
【請求項１５】
請求項８乃至１４の１項に記載の方法を実行するための命令を含むプログラム・コードを格納した、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１つまたは複数のセグメントとして格納されたデータベースの選択的なスナップショットを生成するためのシステムおよび方法に関する。セグメントは１つまたは複数のメモリ・ページを含む。
【０００２】
本発明はまた、１つまたは複数のセグメントとして格納されたデータベースの選択的なスナップショットを生成するための方法を実行するための命令を含むプログラム・コードを格納したコンピュータ可読記憶媒体に関する。セグメントは１つまたは複数のメモリ・ページを含む。
【背景技術】
【０００３】
幾つかのデータベース操作は、当該データベースのスナップショットを生成するためにスナップショット・プロセスをフォークさせるステップを含む。例えば、ハイブリッド・オンライン・トランザクション処理およびオンライン分析処理、ＯＬＴＰ−ＯＬＡＰ、データベースは、長期のクエリ実行の期間にわたって当該ＯＬＡＰの部分に対する一貫したスナップショットを生成するスナップショット・プロセスに対してフォーク・システム・コールを利用することができる。
【０００４】
同様な機構をデータベースのチェックポイント生成に利用することができる。当該チェックポイント生成は、スナップショット・プロセスにおける一貫したデータベース・スナップショットを永続記憶にフラッシュする。当該スナップショット・プロセスはまた、それが当該スナップショットのサイズとＩ／Ｏの速度に依存するので、長期間のプロセスとなりうる。増分的チェックポイント生成のような様々な最適化を、連続するチェックポイントの間のデータベース・アプリケーション状態の差分修正の追跡に適用でき、当該差分のみ存続することができる。
【０００５】
一般に、子プロセスにおけるスナップショット、またはポイント・イン・ア・タイム・コピーはコピー・オン・ライト（ＣｏＷ）最適化によって動的に保持される。即ち、フォーク・システム・コールが、両方のプロセスにおける共有ページ・フレームを読取り専用としてマップし、ページがプロセスにより修正されるときのみ、カーネルが新たなページ・フレームを割り当て、当該ページのデータを当該新たなフレームにコピーする。これはさらなるオーバヘッドおよび性能劣化を生み出す。特に、上述の同様なアプリケーションにおいて、性能は、スナップショット・プロセスを保持するときのオーバヘッドに大きく依存する。
【０００６】
システムのスケーラビリティを改善するために、特にコピー・オン・ライト・アクセスに起因するスナップショットを保持するコストを軽減する問題は、学界で活発に研究されている。しかし、当該研究に基づく生産水準のシステムが利用可能であるとは知られていない。
【発明の概要】
【課題を解決するための手段】
【０００７】
本発明の目的は、１つまたは複数のセグメントとして格納されたデータベースの選択的なスナップショットを生成するためのシステムおよび方法を提供することである。セグメントは１つまたは複数のメモリ・ページを含み、当該システムおよび当該方法は、先行技術の上述の問題のうち１つまたは複数を克服する。
【０００８】
本発明の第１の態様では、１つまたは複数のセグメントとして格納されたデータベースの選択的なスナップショットを生成するためのシステムを提供する。セグメントは１つまたは複数のメモリ・ページを含み、当該システムは、
−スナップショット・プロセスが当該１つまたは複数のセグメントの選択されたセグメントにアクセスするように構成されるかどうかを判定するための判定ユニットと、
−当該スナップショット・プロセスによりアクセスされていると当該判定ユニットが判定したアクセスされたセグメントに正のマッピング・ステータスを割り当て、当該スナップショット・プロセスによってアクセスされていないと当該判定ユニットが判定したアクセスされていないセグメントに負のマッピング・ステータスを割り当てるための割当てユニットと、
−スナップショットを生成するためのスナップショット・ユニットであって、当該スナップショットを生成するステップは、当該１つまたは複数のセグメントのサブセットを含むアドレス空間を有するスナップショット・プロセスをフォークさせるステップを含み、負のマッピング・ステータスを割り当てられたマップされていないセグメントは当該アドレス空間内でマップされない、スナップショット・ユニットと、
を備える。
【０００９】
第１の態様のシステムは、どのメモリ・サブセットがスナップショット・プロセスによりアクセスされるかという知識を利用する。本発明の諸実施形態では、この知識により、割当てユニットを、必要なセグメントのみを当該スナップショット・プロセスにおいてマップされると設定するように構成することができる。当該スナップショット・プロセスを実行すると、当該プロセスは、そのアドレス空間内でマップされた、マップされたセグメントのみを発見する。他の実施形態では、親プロセスの全てのセグメントは当該スナップショット・プロセスから継承されるが、セグメントを用いて当該スナップショット・プロセスを行うとき、当該プロセスは当該セグメントをアンマップするかもしれない。同時に、親プロセスにおける書込みが、当該スナップショット・プロセス内でその時点でマップされているセグメントでのみコピー・オン・ライトをトリガする。
【００１０】
当該セグメントの残りは負のマッピング・ステータスを有する、即ち、スナップショット・プロセスのアドレス空間内でマップされるように設定されないので、それらは全く当該スナップショットアドレス空間の一部ではなく、後に、親プロセスにおいて書き込まれている場合、コピー・オン・ライトは受けない。書込み操作はスナップショット・プロセスが存在しないかのように、これらのセグメントをインプレースで修正する。結果として、親が受けるコピー・オン・ライトの数を数桁減らすことができる。
【００１１】
第１の態様に従うシステムは、データベースのどのメモリ領域がスナップショット消費者により読まれるかに関する知識を利用し、これらのメモリ領域のみをスナップショットすることができる。さらに、当該スナップショット消費者は、当該スナップショットの実行時保守、即ち、コピー・オン・ライトのコストを減らすために、スナップショットされた領域またはこれらの領域の一部の保持を断念するかもしれない
【００１２】
ｆｏｒｋベースのスナップショット技術のケースでは、ｍａｄｖｉｓｅ（）システム・コールをメモリ領域ごとに起動して、スナップショット・プロセス内のそのマッピング・ステータスを設定でき、ｍｕｎｍａｐ（）システム・コールを、当該スナップショット・プロセス内の領域の保持を断念するために起動することができる。特に、当該マッピング・ステータスが、継承可能ステータス、即ち、セグメントが新たに生成されたプロセスのアドレス空間にマップされるかどうかを示すステータスであることができる。
【００１３】
本発明の諸実施形態では、セグメントは、メモリ内の連続する位置に配置された１つまたは複数のメモリ・ページを含む。
【００１４】
第１の態様のシステムでは、スナップショット・プロセスによりアクセスされることになっているページのみが、親がそれを修正する場合にコピーされるので、親プロセス内で遭遇するコピー・オン・ライトの数の大幅な削減をもたらすことができる。
【００１５】
第１の態様のシステムではまた、非常に少ない割合のページ・テーブル・エントリをスナップショット・ページ・テーブルにコピーする必要があるので、フォーク回数を減らすことができる。
【００１６】
コピー・オン・ライトの数が削減されるため、第１の態様の実施形態では、システムは、短く均一な行更新レイテンシを提供することができる。
【００１７】
さらなる実施形態では、第１の態様に従うシステムは、必要なユースケースをサポートするための予約されたページ・フレームのプールのサイズ削減、および、一般に、大幅に削減されたシステム・メモリ圧力を実現することができる。したがって、幾つかの実施形態では、削減されたメモリ圧力およびより軽量のスナップショット生成工数のため、データベースはより頻繁な長期のスナップショット・プロセスを提供することができる。
【００１８】
第１の態様に従うシステムの第１の実装では、判定ユニットは、スナップショット・プロセスが、当該スナップショット・プロセスの実行が開始する前に選択されたセグメントにアクセスするように構成されるかどうかを判定するように構成される。
【００１９】
第１の実装によれば、割当てユニットは、どのセグメントを継承すべきか、即ち、どのセグメントを新たに生成されたスナップショット・プロセスのアドレス空間にマップすべきかを判定することができる。したがって、当該スナップショット・プロセスを、当該スナップショット・プロセスの実行中に必要とされるそのアドレス空間にマップされるセグメントのみで開始することができる。当該スナップショット・プロセスが必要とするセグメントを、当該スナップショット・プロセスを開始する前に判定することには、当該スナップショット・プロセスの実行中の不要なセグメントのアンマップを回避できるという利点がありうる。
【００２０】
第１の態様に従うシステムの第２の実装では、判定ユニットは、アクティブなスナップショット・プロセスの実行中に、当該アクティブなスナップショット・プロセスが当該アクティブなスナップショット・プロセスの残存実行時間中に選択されたセグメントにアクセスするように構成されるかどうかを判定するように構成される。
【００２１】
第１の実装および第２の実装を組み合せることができる。即ち、どのセグメントがとにかくスナップショット・プロセスによりアクセスされるかを実行前に判定でき、どのセグメントが残存実行時間において依然としてアクセスされるかを実行中に判定することができる。例えば、特定のセグメントがスナップショット・プロセスによりその実行中に１度だけアクセスされることがありうる。したがって、この１度のアクセスの後、判定ユニットは、当該特定のセグメントが再びアクセスされないと判定でき、割当てユニットは、以前に（スナップショット・プロセスの実行が開始する前に）正のマッピング・ステータスを当該特定のセグメントに割り当てたけれども、負のマッピング・ステータスを当該特定のセグメントに割り当てることができる。
【００２２】
第２の実装の実施形態では、割当てユニットを、スナップショット・プロセスの残存実行時間において当該スナップショット・プロセスによりアクセスされないと判定ユニットが判定した１つまたは複数のセグメントを、当該スナップショット・プロセスのアドレス空間からアンマップするように構成することができる。
【００２３】
第１の態様に従うシステムの第３の実装では、割当てユニットは、スナップショット・プロセスにより実行されるべき物理実行計画をコンパイルするように構成されたコンパイル・ユニットを備える。コンパイルされた物理実行計画は、好適には、セグメントが当該物理実行計画の残存実行時間の間はもはやアクセスされないとき、当該物理実行計画内の位置にあるセグメントに対するアンマップ・コマンドを含む。これは、セグメントがスナップショット・プロセスにおいてもはや必要とされないと判定されたとき、当該セグメントを即座にアンマップできるという利点を有する。
【００２４】
第１の態様に従うシステムの第４の実装では、正のマッピング・ステータスをアクセスされたセグメントに割り当てるステップは、アクセスされたセグメントのアドレスおよびサイズならびにＭＡＤＶ＿ＮＯＲＭＡＬパラメータを含む引数でｍａｄｖｉｓｅオペレーティング・システム関数を呼び出すステップを含み、かつ／または、負のマッピング・ステータスをアクセスされていないセグメントに割り当てるステップは、当該アクセスされていないセグメントのアドレスおよびサイズならびにＭＡＤＶ＿ＤＯＮＴＦＯＲＫパラメータを含む引数でｍａｄｖｉｓｅオペレーティング・システム関数を呼び出すステップを含む。
【００２５】
本発明の諸実施形態では、正のまたは負のマッピング・ステータスを設定するステップが、「内部」変数を正のまたは負のマッピング・ステータスに対応する値に設定するステップを含んでもよく、また、オペレーティング・システム・レベルで正のまたは負のマッピング・ステータスを設定するためにｍａｄｖｉｓｅ（）のようなオペレーティング・システム関数を起動するステップを含んでもよい。
【００２６】
ｍａｄｖｉｓｅ（）オペレーティング・システム関数は、特定のアドレス範囲にあるメモリ・ページに関してカーネルにアドバイスまたは指示を与えるために使用される。ＭＡＤＶ＿ＮＯＲＭＡＬ、ＭＡＤＶ＿ＤＯＦＯＲＫまたはＭＡＤＶ＿ＤＯＮＴＦＯＲＫのような幾つかの所定のパラメータにより、アプリケーションはカーネルに、どのようにアプリケーションが幾つかのマップまたは共有されたメモリ領域を使用するのを期待するかを伝えることができ、その結果、カーネルは適切な先読みおよびキャッシュ技術を選択することができる。特に、当該システムの第４の実装によれば、ｍａｄｖｉｓｅ（）をＭＡＤＶ＿ＮＯＲＭＡＬパラメータで起動することには、デフォルトの扱いがこのセグメントに対して使用されるという効果がある。例えば、スナップショット・プロセスは、そのアドレス空間に含まれる特定のセグメントで生成される。
【００２７】
セグメントが１つより多くのメモリ・ページを含む場合、ｍａｄｖｉｓｅ（）関数を、引数として当該セグメントのメモリ・ページにより起動することができる。
【００２８】
本発明の第２の態様は、１つまたは複数のセグメントとして格納されたデータベースの選択的なスナップショットを生成するための方法に関する。セグメントは１つまたは複数のメモリ・ページを含み、当該方法は、
−親プロセスが、スナップショット・プロセスが当該１つまたは複数のセグメントの選択されたセグメントにアクセスするように構成されるかどうかを判定するステップと、
−当該親プロセスが、当該セグメントが当該スナップショット・プロセスによりアクセスされていると判定された場合、正のマッピング・ステータスを当該セグメントに割り当てるステップ、および／または、当該親プロセスが、当該セグメントが当該スナップショット・プロセスによりアクセスされていないと判定された場合に当該セグメントに負のマッピング・ステータスを割り当てるステップと、
−当該親プロセスがスナップショットを生成するステップであって、当該スナップショットを生成するステップは、当該スナップショット・プロセスをフォークするステップを含み、負のマッピング・ステータスを割り当てられたマップされていないセグメントは当該スナップショット・プロセスのアドレス空間内でマップされていない、ステップと、
を含む。
【００２９】
本発明の第２の態様に従う方法を本発明の第１の態様に従うシステムにより実施することができる。本発明の第２の態様に従う方法のさらなる特徴または実装が、本発明の第１の態様に従う装置の機能およびその異なる実装形式を実施することができる。
【００３０】
第２の態様の方法の第１の実装では、正のマッピング・ステータスをアクセスされたセグメントに割り当てるステップは、
−当該アクセスされたセグメントのステータス変数をマスク変数とＯＲ結合された当該ステータス変数に設定するステップと、
−ハッシュ・テーブル内の当該アクセスされたセグメントにポインタを挿入するステップと、
−当該ポインタが当該ハッシュ・テーブルに新たに挿入された場合、正のマッピング・ステータスを設定するステップと、
を含み、
当該親プロセスが当該スナップショットを生成するステップは、当該マスク変数を更新するステップを含み、当該マスク変数を更新するステップは特に、当該マスク変数のビット値を回転するステップを含む。
【００３１】
ハッシュ・テーブルを全てのアクセスされたセグメントで最新に保ち、アクセスされたセグメントへのポインタが新たに挿入されたかどうかを判定することによって、マッピング・ステータスへの不要な更新を回避することができる。例えば、セグメントのマップまたはアンマップに関連するシステム・コマンドを、このセグメントのマッピング・ステータスが変化した場合のみ、起動する必要がある。
【００３２】
本発明の諸実施形態では、マスク変数は２ビットの変数である。このように、一方のビットは現在の時間間隔に対応でき、他方のビットは以前の時間間隔に対応することができる。
【００３３】
新たなスナップショット・プロセスが生成されたときマスク変数を更新し、セグメントのステータス変数を設定するとき当該マスク変数を使用することによって、第１の実装に従う方法は、各セグメントの現在のマッピング・ステータスと以前のマッピング・ステータスの記録を保つことができる。したがって、マッピング・ステータスに関連するオペレーティング・システム関数の不要な起動を回避することができる。
【００３４】
第２の態様の方法の第２の実装では、スナップショットを生成するステップはさらに、マスク変数にＡＮＤ結合されたセグメントのステータス変数が０である場合にハッシュ・テーブル集合内のセグメントごとに負のマッピング・ステータスを設定するステップを含む。
【００３５】
特に、マスク変数にＡＮＤ結合されたセグメントのステータス変数が、ＡＮＤ結合の結果の全ビットに対して０であるかどうかを判定することができる。
【００３６】
マスク変数とのＡＮＤ結合を用いてセグメントのマッピング・ステータス変数にアクセスすることは、現在の位置に対応するマッピング・ステータスのビットのみにアクセスする効率的な方法を提供する。
【００３７】
第２の態様の方法の第３の実装では、方法はチェックポイント生成方法であり、スナップショット・プロセスは、１つまたは複数のセグメントのサブセットを含むデータベースの選択的なスナップショットを永続記憶に書き込むように構成される。チェックポイント生成方法では、当該スナップショット・プロセスは一般に、最後のチェックポイント生成間隔において変化したデータベースのセグメント（「差分」）のみを永続メモリに書き込む。幾つかの実施形態では、当該スナップショット・プロセスはしたがって、変化したセグメントの各々を１度だけ読むだけでよい。特定のセグメントへの読取りアクセスが実施された後、このセグメントへのさらなるアクセスは当該スナップショット・プロセスにより実施されず、負のマッピング・ステータスを設定することができる。
【００３８】
例えば、多くのセグメントが最後のチェックポイント生成間隔で変更されているケースでは、第３の実装の方法はコピー・オン・ライトの大幅な削減を提供することができる。
【００３９】
第２の態様の方法の第４の実装では、親プロセスが、スナップショット・プロセスが１つまたは複数のセグメントの選択されたセグメントにアクセスするように構成されるかどうかを判定するステップは、当該選択されたセグメントが以前のチェックポイント間隔において変更されているかどうかを判定するステップを含む。これは、セグメントが当該スナップショット・プロセスによりアクセスされないと判定するための単純なルールを提供する。当該ルールは比較的単純であるので、アクセスされていないセグメントを決定しそれらに対して負のマッピング・ステータスを設定するのに必要な計算オーバヘッドは非常に低い。
【００４０】
第２の態様の方法の第５の実装では、方法はハイブリッド・オンライン・トランザクション処理、ＯＬＴＰ、およびオンライン分析処理、ＯＬＡＰ、データベースシステムを保守するための方法であり、当該方法は、
−親プロセスがＯＬＡＰクエリを受信するステップと、
−当該スナップショット・プロセスが当該ＯＬＡＰクエリを実行するステップと
を含む。
【００４１】
ハイブリッドＯＬＴＰおよびＯＬＡＰデータベースシステムによりトランザクション・データに対する直接的な分析クエリを処理することができる。ＯＬＡＰに関するトランザクション・データの現在のスナップショットを任意に提供することによって、これらのシステムはリアルタイムなビジネス・インテリジェンスを可能とすることができる。しかし、ハイブリッドシステムにおけるＯＬＡＰクエリの実行には、スナップショット・プロセスが生成されることが必要であるので、当該スナップショット・プロセスを生成するときに不要なコピー・オン・ライトが回避されることが特に重要である。
【００４２】
第２の態様の方法の第６の実装では、当該方法はさらに、親プロセスがＯＬＡＰクエリに基づいてスナップショット・プロセスをコンパイルするステップを含む。当該スナップショット・プロセスのコンパイルは、どのセグメントが当該スナップショット・プロセスによりアクセスされるかの知識に部分的に基づくことができる。これには、例えばアンマップ・コマンドを当該コンパイルされたスナップショット・プロセス内の適切な場所に挿入できるという利点がある。
【００４３】
第２の態様の方法の第７の実装では、親プロセスが、スナップショット・プロセスが選択されたセグメントにアクセスするように構成されるかどうかを判定するステップは、当該親プロセスが物理実行計画を生成するステップであって、特に当該親プロセスは正のマッピング・ステータスを当該物理実行計画内で参照される参照セグメントに割り当てる、ステップを含む。
【００４４】
物理実行計画は、ＳＱＬ関係データベース管理システムにおいてデータにアクセスするために使用されるステップの順序集合を含むことができる。このように、いつスナップショット・プロセスがどのセグメントにアクセスする必要があるかを判定でき、例えば、不要なセグメントを当該スナップショット・プロセスのアドレス空間からアンマップするアンマップ・コマンドをそれに従って配置することができる。
【００４５】
典型的なＳＱＬクエリに対して、それぞれ異なるクエリ実行計画に対応する、当該クエリを実行するための多数の代替的な方法がある。一般に、データベース管理システムは幾つかの性能基準に基づいて好適な物理実行計画を選択する。本発明の諸実施形態では、複数の利用可能な物理実行計画から、好適な物理実行計画は、負のマッピング・ステータスをスナップショット・プロセスのセグメントに対して設定できるかに基づいて選択される。例えば、セグメントがこの物理実行計画に対してより早期の位置で必要とされないと判定できる場合に、物理実行を好適な物理実行計画として選択でき、したがってアンマップ・コマンドをより早期に起動することができる。
【００４６】
第２の態様の方法の第８の実装では、当該方法はさらに、
−もはやスナップショット・プロセスによりアクセスされていない、アクセスされていないセグメントを決定するステップと、
−当該アクセスされていないセグメントをアンマップするステップと、
を含む。
【００４７】
上述のように、当該アクセスされていないセグメントをアンマップするステップを、メモリ・ページのアンマップのためのシステム・コマンドを用いて実施することができる。
【００４８】
本発明の第３の態様は、第２の態様の方法または第２の態様の実装の１つを実行するための命令を含むプログラム・コードを格納したコンピュータ可読記憶媒体に関する。
【００４９】
本発明の諸実施形態の技術的特徴をより明確に説明するために、当該実施形態を説明するために提供される添付図面を以下で簡単に説明する。以下の説明における添付図面は本発明の幾つかの実施形態にすぎず、特許請求の範囲で定義した本発明の範囲から逸脱しないこれらの実施形態の修正が可能である。
【図面の簡単な説明】
【００５０】
【図１】同一の物理ページへのポインタを含む親ページ・テーブルと子ページ・テーブルの略図である。
【図２】コピー・オン・ライトの影響が示される、同一の物理ページへのポインタを含む親ページ・テーブルと子ページ・テーブルの略図である。
【図３】本発明の１実施形態に従うコピー・オン・ライトの影響が示される、同一の物理ページへのポインタを含む親ページ・テーブルと子ページ・テーブルの略図である。
【図４】本発明に従うデータベースの３つのテーブルの２つの結合の物理実行計画の１例の略図である。
【図５】本発明に従う、チェックポイント生成方法のスナップショット・プロセスによりアクセスされたセグメントを決定する方法の略図である。
【図６】本発明に従う、データベースの選択的なスナップショットを生成するためのシステムの略図である。
【図７ａ】新たなスナップショット・プロセスの初期化を開始するためのルーチンの流れ図である。
【図７ｂ】正のマッピング・ステータスを有するセグメントを追加するためのルーチンの流れ図である。
【図７ｃ】新たなスナップショット・プロセスの初期化を終了させるためのルーチンの流れ図である。
【発明を実施するための形態】
【００５１】
図１は、親ページ・テーブル１０および子ページ・テーブル２０の略図を示す。子ページ・テーブル２０は、親プロセスからフォークされているスナップショット・プロセスのページ・テーブルである。親ページ・テーブル１０は、物理メモリ・ページ３２へのポインタ１４を含む第１のエントリ１２を含む。子ページ・テーブル２０は、同一の物理メモリ・ページ３２への第２のポインタ２４を含む第２のエントリ２２を含む。ｆｏｒｋ（）システム・コマンドが起動されたとき、灰色の陰影で示すように、親アドレス空間３０全体が継承可能と設定され、したがって当該スナップショット・プロセスのアドレス空間にマップされる。ｆｏｒｋ（）コマンドの後、子のページ・テーブルは親の同一の物理ページを指す。点線４０は、アドレス空間全体までコピーする必要があることを示す。
【００５２】
親プロセスのアドレス空間全体がｆｏｒｋ（）にわたって継承されるとき、そのページの各々は、それらにアクセスする子に関わらずコピー・オン・ライトを受ける。
【００５３】
図２は、親プロセスが物理メモリ・ページ３２に書き込むときのシナリオを示す。親アドレス空間の全てが継承されるとき、親のページへの書込みは、子プロセスが当該ページにアクセスするか否かに関わらず、新たに割り当てられたメモリ・ページ４２にコピー・オン・ライトをトリガする。当該メモリ・ページが新たな位置４２にコピーされると、親ページ・テーブル１０内の第１のエントリ１２内のポインタ１４が新たなポインタ１６に更新され、新たなポインタ１６が、当該新たに割り当てられたメモリ・ページを指す。
【００５４】
親プロセスの長期の実行にわたって、親プロセスの後続の書込みが、新たなメモリ・ページのますます多くのコピー・オン・ライト割当てをトリガする。これらの新たなメモリ・ページを図２の参照番号４０で示す。均一な書込み分布および長期の子プロセスにより、親におけるページの大部分は、対応するオーバヘッドで、コピーされる。
【００５５】
フォーク・システム・コールの期間は、子のページ・テーブルにコピーされた親プロセスのページ・テーブル内のＰＴＥ（ページ・テーブル・エントリ）の数に比例する。一般にＯＬＴＰ処理をフォーク・システム・コールの期間一時停止する必要があるので、大きなメモリ内データ・セットはしたがって、フォーク中に大幅な応答時間スパイクを引き起こす。
【００５６】
さらに、ｆｏｒｋ（）は十分な空きページ・フレームの供給を必要とする。例えば、巨大なＬｉｎｕｘ（登録商標）  ＴＬＢ  Ｃｏｐｙ−ｏｎ−ｗｒｉｔｅページ・フォルト・ハンドラが新たなページ・フレームを発見できない場合に、当該ハンドラは黙って子のページをアンマップされているとしてマークし、後続の子のページのアクセスが当該プロセスを終了させる。この状況を予期し防止するのは極めて困難である。
【００５７】
コピー・オン・ライトのステップの規模は、以下のように大幅な直接的および間接的なオーバヘッドを伴う。
【００５８】
一般に、コピー・オン・ライトのページ・フォルト・オーバヘッドはスケーラブルではない。なぜならば、当該オーバヘッドはＴＬＢを全てのコアにフラッシュする必要性に起因して、コアの数とともに増大するからである。例えば、ＴＬＢシュートダウン手続きを参照。これは、比例的に分割されたアプリケーション状態でより多くのスレッドをさらに利用することによって、ＯＬＴＰ性能を増大できるという主張に反する。
【００５９】
親プロセス内で遭遇するコピー・オン・ライトの数は、子プロセスの寿命中の親における書込みの分布に、子が当該ページにアクセスするか否かと無関係に比例する。例えば、十分に長い子の実行と親における均一な書込み分布により、そのアドレス空間の全てがコピーされる。
【００６０】
カラム・ストア・データベース内の行の更新は、当該行の中の修正された列の数と同数でありうる、コピー・オン・ライトを受ける幾つかのページへの書込みを伴う。したがって、更新／挿入操作のレイテンシはコストが高く、大きく変動する。
【００６１】
図３は、本発明に従うシステムと方法がどのように上述の制限を克服するかを示す。子プロセスをフォークするとき、親プロセスのアドレス空間のサブセットのみが当該子プロセスにより継承される（当該子プロセスは例えばスナップショット・プロセスでありうる）。どのデータ集合を当該子プロセスがその実行のために必要とするかの情報に基づいて、親のアドレス空間内の陰影領域３４のみが継承可能として設定される。したがって、コピー・オン・ライトは、あるとしても、陰影領域３４内のメモリ・ページに対して行われた書込みに対してのみ発生する。親アドレス空間３０内のページの残りはコピー・オン・ライトを受けない。これは、コピー・オン・ライトでコピーする必要があるかもしれない、かなり小さな全体メモリ領域４４に対応する。
【００６２】
図４は、３つのテーブルＲ、Ｓ、およびＵの２つの結合の物理実行計画の１例を示す。当該物理実行計画は、当該クエリが動作するセグメントの指定を含む。
【００６３】
特に、当該物理実行計画は、テーブルＲのセグメントのＴａｂｌｅＳｃａｎを実施するステップＳ１６と、テーブルＳのセグメントのＴａｂｌｅＳｃａｎを実施するステップＳ１８とを含む。その後、ステップＳ１２で、ハッシュ結合がステップＳ１６およびＳ１８のマテリアライズされた結果に実施され、ステップＳ１４でＴａｂｌｅＳｃａｎがテーブルＵのセグメントに実施される。最後に、ステップＳ１２の２パスハッシュ結合の結果に対して、ステップＳ１０でＴａｂｌｅＳｃａｎがステップＳ１４およびＳ１２のマテリアライズされた結果に実施される。
【００６４】
クエリを実行するように構成されたスナップショット・プロセスを生成する前に、クエリ計画器が、物理計画において参照されるセグメントを当該スナップショット・プロセスに対して継承可能と設定するようにスナップショット・マネージャに要求する。
【００６５】
本発明の１実施形態では、システムは、どのセグメントがクエリを実行するスナップショット・プロセスにおいて必要とされるかを判定するＯＬＡＰクエリ計画器モジュールを備える。同様に、チェックポインタ・モジュールが、当該チェックポインタの子プロセスで実行される増分的チェックポイント生成アルゴリズムで必要とされるセグメントを決定する。
【００６６】
初期化の際、全てのデータベース・セグメントは継承可能として設定されない。同じことは、新たなセグメントが当該データベースに挿入されるときにも当てはまる。
【００６７】
ＯＬＡＰクエリ計画器モジュールは、それが解析し、分析し、再書き込みするＯＬＡＰＳＱＬクエリ・ステートメントを受け付け、データベースのメタデータを用いてクエリ解析ツリーを、物理実行計画、例えば、オペレータ関数呼出しおよびその引数からなるツリーに変換する。
【００６８】
チェックポインタ・モジュールが増分的チェックポイント生成アルゴリズムを実行する。時間がチェックポイント間隔に分割され、間隔のそれぞれの終わりで、当該間隔にわたって修正されたメモリ・セグメントを構成するスナップショットが、当該セグメントを継承可能として設定しｆｏｒｋ（）を呼び出すようにスナップショット・マネージャに要求することによって取得される。子チェックポインタ・プロセスはこれらのセグメントをディスクに出力する。全てのセグメントが成功裏に存続した場合には、子プロセスは成功ステータスを返す。そうでない場合、チェックポインタ・モジュールは、以前の間隔において存続に失敗したセグメントを、現在の間隔の終わりに存続すべき同一のスナップショットにおいて現在の間隔にわたって修正されたものとともに蓄積する。
【００６９】
図５は、幾つかのチェックポイント間隔にわたるチェックポイント生成のための方法の図を提供する。複数の４つのオブジェクト１３１、１３２、１３３および１３４が４つの時間間隔にわたって追跡される。第１の、第２のおよび第３の時間間隔は図５において参照番号１１１、１１２、および１１３で示されている。第１の時間間隔１１１は第１のチェックポイント１２１に先行する。第２のおよび第３の時間間隔１１２、１１３は第１の、第２のおよび第３のチェックポイント１２１、１２２、１２３の間の間隔として定義される。第４の時間間隔１１４は第３のチェックポイント１２３の後に来る。第１のおよび第４のオブジェクト１３１、１３４が第１の間隔１１１において変更されている（参照番号１４１、１４２で示す）。第４のオブジェクトは第２の間隔１１２において再度変更されている（１４３）。第３の間隔１１３において、第２のおよび第３のオブジェクト１３２、１３３が変更されている（１４４、１４５）。
【００７０】
（第１のチェックポイント１２１の時点で終了する）第１の時間間隔１１１において、変更集合は、第１のおよび第４のオブジェクト１３１、１３４、即ち、第１のチェックポイント１２１の前に修正されたオブジェクトから成る。第１のチェックポイントの時点で、即ち、第２の時間間隔が開始したとき、当該オブジェクトは、第１のチェックポイントに対して相対的に変化したとしてマークされる。第１のおよび第４のオブジェクト１３１、１３４から成る変更集合は第２の時間間隔の間に成功裏に存続している。
【００７１】
第３の時間間隔の発生時、第４のオブジェクトから成る変更集合が検出される。即ち、ｏｂｊ４が第１のおよび第２のチェックポイント１２１、１２２の間に修正されていることが検出される。第２の変更集合をディスクにフラッシュすることが試みられる。これが、（幾つかの未知の理由のため）ディスク書込み失敗の結果となる。第４の時間間隔１１４において、計算された変更集合は第２の、第３のおよび第４のオブジェクト１３２、１３３、１３４から成る。この変更集合は、第３の時間間隔１１３において存続に失敗した第４のオブジェクト１３４と、第３の時間間隔１１３において変更されたと検出された第２のおよび第３のオブジェクト１３２、１３３から成る変更集合との和から生ずる。
【００７２】
一般に、「関心事の分離」の概念を適用すると、オブジェクトの状態の一貫した不変レプリカが生成される限り、スナップショット取得方法はチェックポイント生成方法の関心事でない必要がある。
【００７３】
新たなチェックポイントの発生時、最後のチェックポイントに対して変化したオブジェクトのステータス変数を、来るべきチェックポイントの期間に対して不変であるとして全ての当該オブジェクトのマークとともに、これら全てを複数の並列更新の存在下で、保持する必要がある。
【００７４】
本発明の好適な実施形態では、本発明に従うデータベースの選択的なスナップショットを生成するためのシステムは、ＯＬＡＰクエリ計画器モジュールおよびチェックポイント生成モジュールの両方に対してスナップショットを管理する責任を負うスナップショット・マネージャを備える。
【００７５】
図６は、クエリ計画器モジュール２０２、チェックポイント生成モジュール２０４およびスナップショット・マネージャ２２０を備えたシステム２００を示す。クエリ計画器モジュール２０２は、どのセグメントがクエリ実行器プロセス２３０によりアクセスされるかを判定するための第１の判定ユニット２０３を備える。クエリ計画器モジュール２０２は、クエリ実行器プロセス２３０によりアクセスされたこれらのセグメント２１０をスナップショット・マネージャ２２０に渡すように構成される。同様に、チェックポイント生成モジュール２０４は、どのセグメントがチェックポイント生成プロセス２３２によりアクセスされるかを判定するための第２の判定ユニット２０３を備える。チェックポイント生成モジュール２０４はセグメント２１２をスナップショット・マネージャ２２０に渡すように構成される。クエリ実行器プロセス２３０およびチェックポインタ・プロセス２３２はスナップショット取得プロセスである。
【００７６】
スナップショット・マネージャ２２０は割当てユニット２２２およびスナップショット・ユニット２２４を含む。
【００７７】
当該実施形態はさらに、セグメントの継承可能ステータスが既に正しく設定されている場合に、ｍａｄｖｉｓｅ（）システム・コールによりセグメントの継承可能ステータスを設定するのを回避するためのスナップショット・マネージャ２２０における以下の最適化を使用する。
【００７８】
クエリ計画器モジュール２０２は、その物理計画に出現するセグメントを決定するように構成される。チェックポイント生成モジュール２０４は、当該チェックポイント生成間隔において変化したセグメントを追跡する。それらの各々は次いでそのセグメントをスナップショット・マネージャ２２０に渡す。
【００７９】
スナップショット・マネージャ２２０は、どのセグメントがｎ番目のフォークで継承可能として設定されたかを覚えておくために集合Ａｎを保持する。最初にＡ０＝｛｝であり、データベース内の全てのメモリ・セグメントが継承可能でないと設定される。新たな子プロセスｎ＋１が発生すると、Ａｎ＋１が当該新たな子プロセスで必要とされるセグメントの集合である場合、集合Ａｎ−Ａｎ＋１は継承可能である必要がないセグメントを含み、したがってｍａｄｖｉｓｅ（）がフラグＭＡＤＶ＿ＤＯＮＴＦＯＲＫでそれらの各々に対して呼び出される。当該集合Ａｎ＋１−Ａｎは、継承可能として設定されなければならない新たな必要なセグメントを含み、ｍａｄｖｉｓｅ（）がそれらの各々に対してフラグＭＡＤＶ＿ＮＯＲＭＡＬで呼び出される。最後に、ｆｏｒｋ（）システム・コールが起動される。
【００８０】
好適な実施形態では、セグメント構造は、以下のメンバ、即ち、割り当てられたページ範囲のアドレスを保持するアドレス・メンバ、セグメントのサイズを保持するサイズ・メンバ、およびゼロに初期化されている３２ビットの整数である、ｉｎｈｅｒｉｔａｂｌｅ＿ｓｔａｔｕｓと呼ばれるステータス変数を含む。スナップショット・マネージャは、セグメントのｉｎｈｅｒｉｔａｂｌｅ＿ｓｔａｔｕｓをマークしテストするために使用されるｉｎｈｅｒｉｔａｂｌｅ＿ｍａｓｋと呼ばれる３２ビット整数のマスク変数を保持する。当該ｉｎｈｅｒｉｔａｂｌｅ＿ｍａｓｋ変数は初期化の際に１に設定される。当該スナップショット・マネージャは、それを通じてセグメントを継承可能として設定できるインタフェースをエクスポートし、ｆｏｒｋ（）が呼び出される。特に、当該スナップショット・マネージャは、スナップショット内のセグメントをマークするために使用される、ｉｎｈｅｒｉｔａｂｌｅ＿ｍａｓｋを左に循環させるｓｎａｐｓｈｏｔ＿ｉｎｉｔ＿ｂｅｇｉｎ（）、当該セグメントを継承可能と設定するために使用されるｓｎａｐｓｈｏｔ＿ｉｎｉｔ＿ｓｅｇｍｅｎｔ（ｓｅｇｍｅｎｔ）、および最後に、実際にｆｏｒｋ（）を呼び出すｓｎａｐｓｈｏｔ＿ｉｎｉｔ＿ｅｎｄ（）をエクスポートする。
【００８１】
本発明の諸実施形態では、集合Ａを実装するデータ構造はハッシュ・テーブルであることができる。
【００８２】
本発明の諸実施形態では、スナップショット・マネージャ２２０は、新たなスナップショット・プロセスの生成を初期化するための関数、セグメントを追加するための関数および／または当該スナップショット・プロセスの生成を終了するための関数をインタフェースに提供する。
【００８３】
図７ａ乃至７ｃは、新たなスナップショットの生成の開始（図７ａ）、セグメントのハッシュ・テーブルへの追加（図７ｂ）および新たなスナップショットの生成の終了（図７ｃ）に関する流れ図を示す。
【００８４】
初期化の際、ハッシュ・テーブルは空である。新たな子プロセスをフォークする際、関数ｓｎａｐｓｈｏｔ＿ｉｎｉｔ＿ｂｅｇｉｎ（）がステップＳ１０で呼ばれる。当該ｉｎｈｅｒｉｔａｂｌｅ＿ｍａｓｋはステップＳ１２で１ビット左に循環される。
【００８５】
子において必要とされるセグメントを、ステップＳ２０で関数ｓｎａｐｓｈｏｔ＿ｉｎｉｔ＿ｓｅｇｍｅｎｔ（ｓｅｇｍｅｎｔ）を起動することによりスナップショットに追加することができる。この関数の第１のステップＳ２２で、セグメントが、そのｉｎｈｅｒｉｔａｂｌｅ＿ｓｔａｔｕｓをｉｎｈｅｒｉｔａｂｌｅ＿ｍａｓｋの値に設定することによってマークされる。その後、ステップＳ２４で、当該セグメントがハッシュ・テーブル内で探索され、当該セグメントが当該テーブル内に無い場合、当該セグメントが挿入され、続いてステップＳ２８で当該セグメントのメモリ領域に対してｍａｄｖｉｓｅ（）がＭＡＤＶ＿ＮＯＲＭＡＬで呼ばれる。そうでない場合、当該セグメントが当該ハッシュ・テーブルに既に存在する場合、このセグメントに対してさらなる動作は必要でない。
【００８６】
全ての必要なセグメントがハッシュ・テーブル内にあると、ステップＳ３０で関数ｓｎａｐｓｈｏｔ＿ｉｎｉｔ＿ｅｎｄ（）を起動することができる。次いで、ステップＳ３２で当該ハッシュ・テーブルをトラバースし、ステップＳ３４でｉｎｈｅｒｉｔａｂｌｅ＿ｍａｓｋとのビット毎ＡＮＤを用いて各セグメントのｉｎｈｅｒｉｔａｂｌｅ＿ｓｔａｔｕｓをテストする。その結果がゼロである場合、当該セグメントが、そのｉｎｈｅｒｉｔａｂｌｅ＿ｓｔａｔｕｓをクリアし、ｍａｄｖｉｓｅをＭＤ＿ＤＯＮＴＦＯＲＫでそのメモリ領域に対して呼び出すことと共に除去される。さらなる最適化として、不要なセグメントの除去を、必要なセグメントを探索している間に当該不要なセグメントに遭遇したとき行うことができる。
【００８７】
以上の説明は本発明の実装方式にすぎず、本発明の範囲の保護はこれに限定されない。当業者を通じて任意の変更または置換えを容易に行うことができる。したがって、本発明の保護範囲は添付の特許請求の範囲の保護範囲に支配されるべきである。
【符号の説明】
【００８８】
２０４  チェックポインタ
２２０  スナップショット・マネージャ
２３０  子プロセス―クエリ実行器
２３２  子プロセス―チェックポインタ
【図１】
0006365858.tif 000002
【図２】
0006365858.tif 000003
【図３】
0006365858.tif 000004
【図４】
0006365858.tif 000005
【図５】
0006365858.tif 000006
【図６】
0006365858.tif 000007
【図７ａ】
0006365858.tif 000008
【図７ｂ】
0006365858.tif 000009
【図７ｃ】
0006365858.tif 000010