(57)【要約】データベースの少なくとも一部が格納される追記型不揮発記憶デバイスが、タイムスタンプ、物理アドレス及び参照カウンタが論理アドレス毎に関連付けられる拡張論物変換情報を有する。各参照カウンタは、その参照カウンタに対応した論理アドレス及びタイムスタンプに対応したデータを参照する参照元の数を表す。追記型不揮発記憶デバイスは、対象の論理アドレスについて、拡張論物変換情報を基に、最新のタイムスタンプより旧いタイムスタンプが関連付けられており、且つ、対象の論理アドレスと旧いタイムスタンプとに対応した参照カウンタが、参照元が存在しないことを表しているか否かを判断する。追記型不揮発記憶デバイスは、その判断結果が肯定の場合、対象の論理アドレスと前記旧いタイムスタンプとに対応した物理アドレスの物理領域を、消去可能な物理領域（無効物理領域）として管理する。
2016162981.tif 000002
【特許請求の範囲】
【請求項１】
複数の物理領域を含んだ不揮発記憶媒体を有し、データベースの少なくとも一部が格納される論理空間を提供する追記型不揮発記憶デバイスと、
データベース管理システムを含んだホストシステムと
を有し、
前記ホストシステムは、トランザクションの開始から終了までの間に前記データベースのデータの更新が生じる場合に、更新前データが格納されている領域に属する論理アドレスと同一の論理アドレスとタイムスタンプとを指定した書込み要求を前記追記型不揮発記憶デバイスに送信するようになっており、
前記追記型不揮発記憶デバイスは、タイムスタンプ、物理アドレス及び参照カウンタが論理アドレス毎に関連付けられるアドレス変換情報である拡張論物変換情報を有し、
各参照カウンタは、その参照カウンタに対応した論理アドレス及びタイムスタンプに対応したデータを参照する参照元の数を表し、
前記追記型不揮発記憶デバイスは、論理アドレスに新たに割り当てられた物理アドレスの物理領域を消去不可の物理領域として管理するようになっており、
前記追記型不揮発記憶デバイスは、対象の論理アドレスについて、
（Ａ）前記拡張論物変換情報を基に、最新のタイムスタンプより旧いタイムスタンプが関連付けられており、且つ、前記対象の論理アドレスと前記旧いタイムスタンプとに対応した参照カウンタが、参照元が存在しないことを表しているか否かを判断し、
（Ｂ）（Ａ）の判断結果が肯定の場合に、前記対象の論理アドレスと前記旧いタイムスタンプとに対応した物理アドレスの物理領域を、消去可能な物理領域として管理する、
計算機システム。
【請求項２】
前記追記型不揮発記憶デバイスは、（Ａ）の判断結果が肯定であり、且つ、前記トランザクションのコミットにより前記トランザクションが終了した場合に、（Ｂ）を実行する、
請求項１記載の計算機システム。
【請求項３】
前記追記型不揮発記憶デバイスは、前記トランザクションの開始から終了までの間に受信した書込み要求について、（Ａ）及び（Ｂ）を実行し、
前記対象の論理アドレスは、前記受信した書込み要求で指定されている論理アドレスであり、
前記最新のタイムスタンプは、前記受信した書込み要求で指定されているタイムスタンプである、
請求項２記載の計算機システム。
【請求項４】
前記追記型不揮発記憶デバイスは、前記トランザクションの開始からコミットまでの間に、前記受信した書込み要求で指定されている論理アドレス及びタイムスタンプに対応した参照カウンタに値を加算し、
前記追記型不揮発記憶デバイスは、前記トランザクションのコミットの場合に、前記対象の論理アドレス及び前記旧いタイムスタンプに対応した参照カウンタから値を減算し、（Ａ）を実行する、
請求項３記載の計算機システム。
【請求項５】
前記データベースのログが格納されるログ領域を有する不揮発記憶デバイスであるログ記憶デバイスを更に有し、
前記不揮発記憶デバイスに書き込まれるデータの単位サイズは、物理領域サイズの整数倍である、
請求項１記載の計算機システム。
【請求項６】
前記ホストシステムは、前記データベースのデータの他に前記データベースのログも前記追記型不揮発記憶デバイスに書き込むようになっており、
前記不揮発記憶デバイスは、
それぞれコピー元となる２以上の物理領域と、コピー先となる１つの空きの物理領域とを選択し、
２以上のコピー元物理領域内のデータを１つのコピー先物理領域にコピーし、
前記２以上のコピー元物理領域の各々に対応した論理アドレス及びタイムスタンプに、前記コピー先物理領域の物理アドレスを割り当てる、
請求項１記載の計算機システム。
【請求項７】
前記ホストシステムは、前記ホストシステムの負荷が高い場合は、物理領域サイズの整数倍の量のデータ及びログの書込み要求を、前記追記型不揮発記憶デバイスに送信する、
請求項６記載の計算機システム。
【請求項８】
前記ホストシステムは、論理アドレス及びタイムスタンプを指定した読出し要求を前記追記型不揮発記憶デバイスに送信し、
前記追記型不揮発記憶デバイスは、
前記読出し要求を受信し、
前記拡張論理物変換情報を基に、前記読出し要求で指定された論理アドレスについて、前記読出し要求で指定されたタイムスタンプ又はそれより旧いＴＳのうちの最も新しいタイムスタンプに割り当てられている物理アドレスを特定し、
特定した物理アドレスの物理領域からデータを読み出し、
読み出したデータを前記ホストシステムに送信する、
請求項１記載の計算機システム。
【請求項９】
前記不揮発記憶媒体は、複数のブロックを有するＮＡＮＤフラッシュメモリであり、
各ブロックは、複数のページを有し、
各物理領域は、ページである、
請求項１記載の計算機システム。
【請求項１０】
複数の物理領域を含んだ不揮発記憶媒体を有する追記型不揮発記憶デバイスにより、データベース管理システムを含んだホストシステムにより論理空間を提供し、
前記論理空間に、データベースの少なくとも一部を格納し、
トランザクションの開始から終了までの間に前記データベースのデータの更新が生じる場合に、更新前データが格納されている領域に属する論理アドレスと同一の論理アドレスとタイムスタンプとを指定した書込み要求を、前記ホストシステムから前記追記型不揮発記憶デバイスにより受信し、
前記受信した書込み要求で指定されている論理アドレス及びタイムスタンプを基に、前記追記型不揮発記憶デバイスにより、タイムスタンプ、物理アドレス及び参照カウンタが論理アドレス毎に関連付けられるアドレス変換情報である拡張論物変換情報を更新し、各参照カウンタは、その参照カウンタに対応した論理アドレス及びタイムスタンプに対応したデータを参照する参照元の数を表し、
対象の論理アドレスについて、前記追記型不揮発記憶デバイスにより、前記拡張論物変換情報を基に、最新のタイムスタンプより旧いタイムスタンプが関連付けられており、且つ、前記対象の論理アドレスと前記旧いタイムスタンプとに対応した参照カウンタが、参照元が存在しないことを表しているか否かを判断し、
その判断結果が肯定の場合、前記追記型不揮発記憶デバイスにより、前記対象の論理アドレスと前記旧いタイムスタンプとに対応した物理アドレスの物理領域を、消去可能な物理領域として管理する、
データベース管理方法。
【請求項１１】
複数の物理領域を含んだ不揮発記憶媒体と、
データベースの少なくとも一部が格納される論理空間を、データベース管理システムを含んだホストシステムに提供する媒体コントローラと
を有し、
前記ホストシステムは、トランザクションの開始から終了までの間に前記データベースのデータの更新が生じる場合に、更新前データが格納されている領域に属する論理アドレスと同一の論理アドレスとタイムスタンプとを指定した書込み要求を前記追記型不揮発記憶デバイスに送信するようになっており、
前記媒体コントローラは、論理アドレス毎に、タイムスタンプ、物理アドレス及び参照カウンタが関連付けられるアドレス変換情報である拡張論物変換情報を有し、
各参照カウンタは、その参照カウンタに対応した論理アドレス及びタイムスタンプに対応したデータを参照する参照元の数を表し、
前記媒体コントローラは、論理アドレスに新たに割り当てられた物理アドレスの物理領域を消去不可の物理領域として管理するようになっており、
前記媒体コントローラは、対象の論理アドレスについて、
（Ａ）前記拡張論物変換情報を基に、最新のタイムスタンプより旧いタイムスタンプが関連付けられており、且つ、前記対象の論理アドレスと前記旧いタイムスタンプとに対応した参照カウンタが、参照元が存在しないことを表しているか否かを判断し、
（Ｂ）（Ａ）の判断結果が肯定の場合に、前記対象の論理アドレスと前記旧いタイムスタンプとに対応した物理アドレスの物理領域を、消去可能な物理領域として管理する、
不揮発記憶デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データベース管理技術に関する。
【背景技術】
【０００２】
データベース管理に関して、例えば、ビッグデータ処理が知られている。ビッグデータ処理では、更新処理と分析処理の両立が望まれる。具体的には、例えば、スマートフォン経由の大量の小口決済データの取り込みと、取り込んだ大量の決済データの即時分析が望まれる。また、例えば、大量のセンサデータの取り込みと、取り込んだ大量のセンサデータの即時分析が望まれる。【０００３】
このような大量のデータの更新処理と分析処理を両立するためのデータベース一貫性制御方式として、ＭＶＣＣ（MultiVersion  Concurrency  Control）方式、特に、追記型ＭＶＣＣ方式が知られる。追記型ＭＶＣＣ方式によれば、データベース内のデータが更新される場合、更新前のデータが記憶されている領域とは別の新たな空き領域が確保され、更新後のデータは、確保された空き領域に書き込まれる。参照されることの無い旧いバージョンのデータは削除されてよい。【０００４】
このように、追記型ＭＶＣＣ方式では、バージョン管理と空き領域管理の両方を、データベース管理システム（以下、ＤＢＭＳ）が行う必要がある。すなわち、ＤＢＭＳが、或るバージョンにおいて、或る論理アドレス（例えばＤＢＭＳが認識している論理空間（例えば論理ボリューム）の論理アドレス）が属する領域内のデータを書き換える場合、空き領域を探し、見つかった空き領域に属する論理アドレスを指定した書込み要求を発行する。このため、ＤＢＭＳを実行するプロセッサの負荷が高い。例えば、空き領域管理では、空き領域のロックの取得及び解除といった処理が必要になる。このような処理が発生すると、シリアライズ処理（例えばシーケンシャルライト）において、処理が適宜待たされる。【０００５】
一方、データベースの格納先として採用され得る記憶デバイスとして、いわゆる追記型の記憶デバイス（更新前データを記憶している領域と別の領域に更新後データを書き込む記憶デバイス）、例えば、ＮＡＮＤフラッシュメモリ（ＮＡＮＤ−ＦＭ）を有する記憶デバイス（以下、ＦＭデバイス）がある。ＦＭデバイスでは、データは、ブロック単位で消去され、ページ単位で入出力される。ＦＭデバイスは、一般に、ＦＭの書込み寿命延長のためのウェアレベリング機能を有している。ウェアレベリング機能によれば、比較的消去回数（書込み回数）の多い１以上のブロックに格納されている有効データが、比較的消去回数の少ない１つのブロックにコピーされ、コピー元の１以上のブロックの各々について消去処理が行われる。【０００６】
追記型ＭＶＣＣのプロセッサ負荷を下げるための方法として、ＤＢＭＳの処理の少なくとも一部を、ＦＭデバイスにオフロードする方法が考えられる。しかし、その方法は知られていない。なお、スナップショット管理のためのプロセッサ負荷を軽減するための技術については、特許文献１の技術が知られている。特許文献１によれば、スナップショット管理の少なくとも一部がＦＭパッケージにオフロードされる。具体的には、スナップショットの世代番号を、ＦＭパッケージ（ＦＭデバイス）が管理する。ストレージコントローラが、世代番号を指定した読出し要求をホスト装置から受け、世代番号を指定したスナップショット取得要求をＦＭデバイスに送信する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】ＷＯ２０１２／１０４９０９
【発明の概要】
【発明が解決しようとする課題】
【０００８】
スナップショット管理のオフロードによれば、スナップショットデータ（スナップショットイメージを構成するデータ）を記憶しているページに世代番号が関連付けられてさえいれば、そのページ内のデータをスナップショットデータとして管理できる。【０００９】
しかし、スナップショット管理の少なくとも一部をＦＭデバイスにオフロードする技術を利用しても、追記型ＭＶＣＣ方式に従うバージョン管理及び空き領域管理のうちの少なくとも１つをＦＭデバイスにオフロードすることはできない。例えば、理由は以下の通りである。【００１０】
一般に、スナップショットは、バックアップの一例であり、スナップショットとして保存されているデータは、明示的な削除指示があるまで、削除されてはならない。一方、追記型ＭＶＣＣでは、データ更新によって旧いバージョンのデータが参照されなくなり得るるが、参照されなくなったデータは削除されてよい。スナップショット管理のオフロード技術を単純に適用しても、削除指示のような明示的な指示無しに、参照されなくなり削除されてよいデータを特定することができない。【００１１】
また、データベースでは、コミット処理及びアボート処理といったデータベース特有の処理もある。【００１２】
なお、上述の課題は、追記型不揮発記憶デバイスとしてＦＭデバイス以外の不揮発記憶デバイスが採用されても、有り得る。
【課題を解決するための手段】
【００１３】
データベース管理システムを含んだホストシステムが、トランザクションの開始から終了までの間に、記データベースのデータの更新が生じる場合に、更新前データが格納されている領域に属する論理アドレスと同一の論理アドレスとタイムスタンプとを指定した書込み要求を追記型不揮発記憶デバイスに送信するようになっている。追記型不揮発記憶デバイスは、タイムスタンプ、物理アドレス及び参照カウンタが論理アドレス毎に関連付けられるアドレス変換情報である拡張論物変換情報を有する。各参照カウンタは、その参照カウンタに対応した論理アドレス及びタイムスタンプに対応したデータを参照する参照元の数を表す。追記型不揮発記憶デバイスは、論理アドレスに新たに割り当てられた物理アドレスの物理領域を消去不可の物理領域（有効物理領域）として管理するようになっている。追記型不揮発記憶デバイスは、対象の論理アドレスについて、拡張論物変換情報を基に、最新のタイムスタンプより旧いタイムスタンプが関連付けられており、且つ、対象の論理アドレスと旧いタイムスタンプとに対応した参照カウンタが、参照元が存在しないことを表しているか否かを判断する。追記型不揮発記憶デバイスは、その判断結果が肯定の場合、対象の論理アドレスと前記旧いタイムスタンプとに対応した物理アドレスの物理領域を、消去可能な物理領域（無効物理領域）として管理する。なお、「追記型不揮発記憶デバイス」は、データが格納されている物理領域が割り当てられている論理アドレスを指定した書込み要求をホストシステムから受けた場合、その書込み要求に従うデータを空き物理領域に書き込み、その空き物理領域の物理アドレスを、指定された論理アドレスに割り当てるようになっている不揮発記憶デバイスである。つまり、追記型不揮発記憶デバイスは、同一物理領域内のデータを上書きできない不揮発記憶デバイスである。
【発明の効果】
【００１４】
追記型ＭＶＣＣ方式に従うバージョン管理及び空き領域管理のうちの少なくとも１つをＦＭデバイスのような追記型記憶デバイスにオフロードすることができる。
【図面の簡単な説明】
【００１５】
【図１】実施例１に係る計算機システムの構成を示す。
【図２】ＦＭデバイスの構成例を示す。
【図３】実施例１に係る追記型ＭＶＣＣ方式での書込みの論理的なイメージの一例の模式図である
【図４】実施例１に係る追記型ＭＶＣＣ方式に従う書込みの物理的なイメージの一例の模式図である。
【図５】拡張論物変換情報の構成例を示す。
【図６】トランザクション、タイムスタンプ、論理アドレス及びデータの対応関係の一例を示す。
【図７】タイムスタンプ、論理アドレス、データ、物理アドレス、ページ状態（有効／無効）及び参照カウンタの対応関係の一例を示す。
【図８】読出し処理の流れの一例を示す。
【図９】書込み処理の流れの一例を示す。
【図１０】参照カウンタ更新処理の流れの一例を示す。
【図１１】ＧＣ（ガベージコレクション）処理の流れの一例を示す。
【図１２】実施例１に係るログ格納の一例の模式図である。
【図１３】実施例２に係るログ格納の一例の模式図である。
【図１４】実施例２においてプロセッサ負荷が高い場合に採用されるデータ格納方式の模式図である。
【図１５】実施例２においてプロセッサ負荷が低い場合に採用されるデータ格納方式の模式図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照しながら、幾つかの実施例を説明する。なお、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶部（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置又はシステムが行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶部（例えばメモリ）を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【実施例１】
【００１７】
図１は、実施例１に係る計算機システムの構成を示す。【００１８】
データベースサーバ４０１は、計算機であって、例えば、パーソナルコンピュータ、ワークステーションまたはメインフレームであってよく、若しくは、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよい。データベースサーバ４０１は、ネットワークアダプタ４１３、メモリ４１６、記憶デバイス４１５及びそれらに接続されたプロセッサ４１４を有する。プロセッサ４１４は、例えば、マイクロプロセッサであり、コンピュータプログラムを実行する。プロセッサ４１４により実行されるコンピュータプログラムは、例えば、オペレーティングシステム４１７及びＤＢＭＳ４１２である。メモリ４１６は、例えば、揮発性のＤＲＡＭ（Dynamic Random-Access Memory）等であり、プロセッサ４１４によって実行されるプログラムと、プログラムが使用するデータを一時的に記憶する。記憶デバイス４１５は、例えば、不揮発性の磁気ディスク、フラッシュメモリ等であり、プログラム及びプログラムが使用するデータを格納する。ネットワークアダプタ４１３は、通信ネットワーク４０３とデータベースサーバ４０１を接続する。データベースサーバ４０１は、ネットワークアダプタ４１３を通じて、外部ストレージ装置４０２及びクライアント計算機４０６と通信する。クライアント計算機４０６で、アプリケーションプログラム４１１が実行される。クライアント計算機４０６が、クエリをＤＢＭＳ４１２に発行する。アプリケーションプログラム４１１は、クライアント計算機４０６に代えて、データベースサーバ４０１で実行されてもよい。プロセッサ４１４は、データの暗号化や復号を行う回路等の専用のハードウェア回路を含んでもよい。【００１９】
データベースサーバ４０１は、性能や冗長性を高めるために、プロセッサ４１４、メモリ４１６、記憶デバイス４１５及びネットワークアダプタ４１３のいずれか１つの要素を複数有してもよい。データベースサーバ４０１は、キーボードやポインティングデバイス等の入力デバイス（図示しない）と液晶ディスプレイ等の出力デバイス（図示しない）を有してもよい。入力デバイス及び出力デバイスは、プロセッサ４１４に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。【００２０】
データベースサーバ４０１では、ＤＢＭＳ４１２がアプリケーションプログラム４１１から発行されたクエリを実行し、そのクエリの実行において、データベース８５１からデータを読み出すために、若しくは、データベース８５１にデータを書き込むために、そのデータベース８５１を記憶する外部ストレージ装置４０２に対するＩ／Ｏ（Input/Output）要求をオペレーティングシステム４１７に発行する。オペレーティングシステム４１７は、そのＩ／Ｏ要求を受け付け、外部ストレージ装置４０２へＩ／Ｏ要求を発行する。【００２１】
外部ストレージ装置４０２は、複数の追記型記憶デバイスを含む記憶デバイス群４４３を有する装置であり、例えば、ディスクアレイ装置であるが、それに代えて、単一の追記型記憶デバイスであってもよい。外部ストレージ装置４０２は、データベースサーバ４０１が有するＤＢＭＳ４１２が管理するデータベース８５１を記憶するが、データベース８５１のデータに加えて、プログラムを記憶してもよい。外部ストレージ装置４０２は、データベースサーバ４０１からＩ／Ｏ要求を受け付け、そのＩ／Ｏ要求に従いデータの読み書きを行い、その結果をデータベースサーバ４０１に返す。【００２２】
外部ストレージ装置４０２は、記憶デバイス群４４３に加えて、ネットワークアダプタ４４１及びこれらに接続されたストレージコントローラ８４２を有する。【００２３】
ネットワークアダプタ４４１は、外部ストレージ装置４０２を通信ネットワーク４０３に接続し、これを介して、データベースサーバ４０１と接続される。通信ネットワーク４０３を介した通信プロトコルとしては、例えば、ファイバチャネル（ＦＣ）、ＳＣＳＩ（Small  Computer  System  Interface）、ＰＣＩｅ（PCI-Express）、又は、ＴＣＰ／ＩＰ（Transmission  Control  Protocol／Internet  Protocol）が採用されてよい。例えば、ファイバチャネル若しくはＳＣＳＩが採用される場合、データベースサーバ４０１のネットワークアダプタ４１３及び外部ストレージ装置４０２のネットワークアダプタ４４１は、ホストバスアダプタと呼ばれることがある。【００２４】
記憶デバイス群４４３が有する追記型記憶デバイスは、ＦＭデバイスである。記憶デバイス群４４３は、ＲＡＩＤ（Redundant  Array  of  Independent  Disks）機構を有し、所定のＲＡＩＤレベルでデータを記憶してもよい。記憶デバイス群４４３の記憶空間に基づく論理的な記憶デバイス（例えば、論理ユニット、論理ボリューム、ファイルシステムボリューム）が、データベースサーバ４０１に提供され、その論理的な記憶デバイス上にデータベース８５１が格納されてもよい。【００２５】
ストレージコントローラ８４２は、例えば、メモリ及びプロセッサを含み、データベースサーバ４０１からのＩ／Ｏ要求に応じて、データベース８５１を格納した記憶デバイス群４４３との間でデータの読出し、若しくは、書込みを行う。例えば、ストレージコントローラ８４２は、データベースサーバ４０１から、データの読出し要求を受け付けると、その要求に従って記憶デバイス群４４３からデータを読み出し、読み出したデータをデータベースサーバ４０１に返す。【００２６】
外部ストレージ装置４０２は、性能や冗長性を高めるために、ストレージコントローラ８４２等の構成要素を複数有してもよい。【００２７】
ＤＢＭＳ４１２は、データベース８５１を管理する。データベース８５１は、１以上の表４６２を含み、更に１以上の索引４６１を含んでよい。表４６２は、１以上のレコードの集合であり、レコードは１以上のカラムから構成される。索引４６１は、表４６２の１以上のカラム等を対象として作成されるデータ構造であり、その索引４６１が対象とするカラム等を含む選択条件による表４６２へのアクセスを高速化するためのものである。例えば、表４６２は、対象とするカラムの値の毎に、表４６２の中でその値を含むレコードを特定するための情報を保持するデータ構造である。データ構造としては、例えばＢ木等が用いられる。レコードを特定するための情報としては、物理アドレスや論理的な行ＩＤ等が用いられることがある。【００２８】
ＤＢＭＳ４１２は、クエリ受付部４２１、クエリ実行プラン生成部４２２及びクエリ実行部４２４を有する。【００２９】
クエリ受付部４２１は、アプリケーションプログラム４１１が発行するクエリを受け付ける。クエリは、例えば、構造化問合せ言語（ＳＱＬ、Structured Query Language）によって記述される。【００３０】
クエリ実行プラン生成部４２２は、クエリ受付部４２１が受け付けたクエリから、そのクエリを実行するために必要な１以上のデータベースオペレーションを含むクエリ実行プランを生成する。クエリ実行プランは、例えば、１以上のデータベースオペレーションと、データベースオペレーションの実行順序の関係を含む情報であり、クエリ実行プラン情報４２３に格納される。クエリ実行プランは、データベースオペレーションをノード、データベースオペレーションの実行順序の関係をエッジとする木構造で表されることがある。【００３１】
クエリ実行部４２４は、クエリ実行プラン生成部４２２が生成したクエリ実行プランに従って、クエリ受付部４２１が受け付けたクエリを実行し、その実行結果をアプリケーションプログラム４１１に返す。この際、クエリ実行部４２４は、データベースオペレーションの実行に必要なデータのＩ／Ｏ要求（書込み要求又は読出し要求）を発行することがある。発行されたＩ／Ｏ要求は、オペレーティングシステム４１７を介して外部ストレージ装置４０２に送信される。【００３２】
図１に示すＤＢＭＳ４１２の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が１つの構成要素に統合されていてもよい。【００３３】
また、本実施例では、データベースを記憶する１以上の追記型記憶デバイスの一例として、１以上のＦＭ（フラッシュメモリ）デバイスが採用される。【００３４】
図２は、ＦＭデバイスの構成例を示す。【００３５】
１つのＦＭデバイス３０には、データベース８５１の少なくとも一部が格納される。ＦＭデバイス３０は、ＦＭ３３、及び、ＦＭ３３に接続されたＦＭコントローラ３２を有する。ＦＭコントローラ３２は、ストレージコントローラ８４２からのＩ／Ｏ要求に従い、Ｉ／Ｏ要求をＦＭ３３に送信する。ＤＢＭＳ４１２を実行するプロセッサ４１４とストレージコントローラとを含んだシステムが、ＦＭデバイス３０のホストシステムの一例である。ホストシステムは、ＤＢＭＳ４１２を実行するプロセッサ４１４とストレージコントローラ８４２との一方を含み他方を含まないシステムであってもよい。【００３６】
ＦＭ３３は、例えばＮＡＮＤ−ＦＭであり、１以上のＦＭチップを含む。ＦＭチップは、複数のブロックを含む。複数のブロックの各々は、複数のページを含む。ページ単位でデータが入出力され、ブロック単位でデータが消去される。ＦＭ３３は、いわゆる追記型メモリであり、ページにデータを上書きすることができない。ページに書き込まれているデータの更新後データは、別の空きページに書き込まれる。各ブロックでは、データの書込み先は、先頭の空きページから末尾の空きページにかけて順にシフトする。末尾に空きページがあるブロックは、いわゆる途中書きブロック（オープンブロック）である。ページとしては、空きページの他に、有効ページと無効ページがある。有効ページは、有効データを格納しているページであり、無効ページは、無効データを格納しており有効データを格納していないページである。有効データは、対応する論理アドレスについて最新のデータである。無効データは、有効データにより更新された旧いデータ（更新前データ）である。【００３７】
ＦＭコントローラ３２は、プロセッサ４２、ＦＥ−Ｉ／Ｆ（フロントエンドのインターフェースデバイス）４１、バススイッチ４３、メモリＩ／Ｆ４７、低速メモリ４５、高速メモリ４４、及び、ＢＥ−Ｉ／Ｆ（バックエンドのインターフェースデバイス）４６を有する。【００３８】
ＦＥ−Ｉ／Ｆ４１は、ストレージコントローラ８４２に接続されるインターフェースデバイスであり、ストレージコントローラ８４２とバススイッチ４３側の部位との間のデータ通信を仲介する。【００３９】
バススイッチ４３は、プロセッサ４２、ＦＥ−Ｉ／Ｆ４１、メモリＩ／Ｆ４７、及びＢＥ−Ｉ／Ｆ４６に接続され、これら部位の間のデータを中継する。【００４０】
メモリＩ／Ｆ４７は、低速メモリ４５と接続されるインターフェースデバイスであり、低速メモリ４５に対するデータの入出力を制御する。【００４１】
低速メモリ４５は、例えば、ＤＲＡＭ（Dynamic  Random  Access  Memory）又は不揮発メモリであり、プロセッサ４２による処理に使用するデータ等を記憶する。低速メモリ４５は、拡張論物変換情報４５１及びブロック管理情報４５３を記憶する。【００４２】
拡張論物変換情報４５１は、ＦＭデバイス３０の論理アドレスと物理アドレスとの対応関係を表すアドレス変換情報が拡張された情報である。具体的には、拡張論物変換情報４５１は、論理アドレス及び物理アドレスの他に、ＴＳ（タイムスタンプ）及び参照カウンタを含む。詳細は後述する。【００４３】
ブロック管理情報４５３は、ＦＭ３３の各ブロックに関する情報、例えば、ブロック毎に、ブロック番号、書込み開始時刻（先頭ページにデータが書き込まれた時刻）、書込み終了時刻（末尾ページにデータが書き込まれた時刻）、ブロック状態（空き、不良等）、及び消去回数を含む。【００４４】
高速メモリ４４は、例えば、ＳＲＡＭ（Static  Random  Access  Memory）であり、プロセッサ４２と直接接続されている。高速メモリ４４は、プロセッサ４２により実行されるプログラム等を記憶する。本実施例では、高速メモリ４４は、フラッシュメモリ制御プログラム（以下、ＦＭ制御プログラム）４４２を記憶する。ＦＭ制御プログラム４４２は、ストレージコントローラ８４２からのＩ／Ｏ要求に応答してＦＭ３３に対してデータを入出力したり、ブロック間でデータを移動したりする。【００４５】
ＢＥ−Ｉ／Ｆ４６は、ＦＭ３３と接続されるインターフェースデバイスであり、ＦＭ３３に対するデータの入出力を制御する。【００４６】
ＦＭデバイス３０の構成は、図２の構成に限られない。例えば、高速メモリ４４及び低速メモリ４５のように性能の異なる複数のメモリに代えて、性能が同じ１以上のメモリが採用されてよい。【００４７】
以上のように、本実施例では、データベースを記憶する１以上の追記型記憶デバイスの一例として、１以上のＦＭデバイスが採用される。ＦＭデバイスは、外部ストレージ装置４０２が有するが、外部ストレージ装置４０２に代えてデータベースサーバ４０１が有してもよい。例えば、記憶デバイス４１５が、データベースが格納される１以上のＦＭデバイスであってもよい。また、追記型記憶デバイスが有する記憶メディアとしては、ＮＡＮＤ−ＦＭに代えて、他種の記憶メディア、例えば、ＰＲＡＭ（Phase  Change  Random  Access  Memory）、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＲｅＲＡＭ（Resistance  Random  Access  Memory）又はＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）が採用されてもよい。【００４８】
本実施例では、追記型ＭＶＣＣ方式に従いデータベースサーバ４０１から外部ストレージ装置４０２にデータが書き込まれる。【００４９】
図３は、実施例１に係る追記型ＭＶＣＣ方式での書込みの論理的なイメージの一例の模式図である。図４は、追記型ＭＶＣＣ方式に従う書込みの物理的なイメージの一例の模式図である。図３と図４は対応している。以下の説明において、「論理アドレス」及び「物理アドレス」は、ＦＭデバイス３０にとっての論理アドレス及び物理アドレスである。すなわち、ＦＭコントローラ３２（ＦＭ制御プログラム４４２）は、論理空間（論理アドレス空間）を提供し、その論理空間についての論理アドレスが指定されたＩ／Ｏ要求を受け付ける。Ｉ／Ｏ要求が書込み要求の場合、ＦＭコントローラ３２は、論理アドレスに対して物理アドレス（空きページの物理アドレス）を割り当て、割り当てられた物理アドレスが属する空きページに、書込み対象のデータを書き込む。【００５０】
本実施例に係る追記型ＭＶＣＣ方式によれば、少なくとも空き領域管理がＦＭデバイス３０にオフロードされているため、データの書き変え前後において、論理アドレスが同一である。すなわち、ＤＢＭＳ４１２（クエリ実行部４２４）が、データの書き換えの際に、空き領域を探す必要が無い。具体的には、例えば以下の（Ａ）〜（Ｄ）が行われる。【００５１】
（Ａ）トランザクション毎に、トランザクションに関連付けられるタイムスタンプが異なる。【００５２】
（Ｂ）トランザクションにおいて書込みが発生した論理アドレスについては、以下の通りである。すなわち、書込み先論理アドレスに、そのトランザクションに関連付いているタイムスタンプが関連付けられる。書込み先論理アドレスに、いずれのページの物理アドレスも割り当てられていなければ、その書込み先論理アドレスに、空きページの物理アドレスが割り当てられ、その空きページにデータが書き込まれる。一方、書込み先論理アドレスに、更新前データが書き込まれているページの物理アドレスが割り当てられていれば、その書込み先論理アドレスには、割当て済の物理アドレスに代えて、空きページの物理アドレスが割り当てられ、その空きページに更新後データが格納される。【００５３】
（Ｃ）トランザクションにおいて書込みが発生しない論理アドレスについては、以下の通りである。すなわち、その論理アドレスとそのトランザクションに対応したタイムスタンプとを指定した読出し要求をＦＭコントローラ３２が受信した場合、その論理アドレスについての最新のタイムスタンプに対応したデータが読み出される。【００５４】
（Ｄ）複数のトランザクションが並列に実行されてよい。すなわち、トランザクションがコミットする前に、別のトランザクションについてデータベースへのデータの書込みが行われてもよい。【００５５】
以上の（Ａ）〜（Ｄ）によれば、図３及び図４を参照して、例えば以下の（ａ）〜（ｃ）のことが言える。【００５６】
（ａ）トランザクション「Ｔ０」での書込み対象は、データ「Ａ０」〜「Ｈ０」である。データ「Ａ０」〜「Ｈ０」の書込み先は、それぞれ、論理アドレス「ＬＡ０」〜「ＬＡ７」である。論理アドレス「ＬＡ０」〜「ＬＡ７」の各々に、トランザクション「Ｔ０」に関連付いているタイムスタンプ「ＴＳ０」が関連付けられる。データ「Ａ０」〜「Ｈ０」が、物理アドレスが連続した異なる８つのページにそれぞれ書き込まれる。その８つのページの物理アドレスが、それぞれ、論理アドレス「ＬＡ０」〜「ＬＡ７」に割り当てられる。データ「Ｈ０」が書き込まれて、トランザクション「Ｔ０」がコミットする。【００５７】
（ｂ）トランザクション「Ｔ１」及び「Ｔ２」が並列に実行される。トランザクション「Ｔ１」での書込み対象は、データ「Ａ０」、「Ｃ０」、「Ｆ０」及び「Ｈ０」の更新後データ「Ａ１」、「Ｃ１」、「Ｆ１」及び「Ｈ１」であり、トランザクション「Ｔ２」での書込み対象は、データ「Ａ１」、「Ｆ１」及び「Ｈ１」の更新後データ「Ａ２」、「Ｆ２」及び「Ｈ２」である。データ「Ａ１」、「Ｃ１」、「Ｆ１」及び「Ｈ１」の書込み先は、それぞれ、論理アドレス「ＬＡ０」、「ＬＡ２」、「ＬＡ５」及び「ＬＡ７」である。論理アドレス「ＬＡ０」、「ＬＡ２」、「ＬＡ５」及び「ＬＡ７」の各々に、トランザクション「Ｔ１」に関連付いているタイムスタンプ「ＴＳ１」が関連付けられる。データ「Ａ１」、「Ｃ１」、「Ｆ１」及び「Ｈ１」が、４つのページにそれぞれ書き込まれる。その４つのページの物理アドレスが、それぞれ、論理アドレス「ＬＡ０」、「ＬＡ２」、「ＬＡ５」及び「ＬＡ７」に、割当て済の物理アドレスに代えて、割り当てられる。データ「Ｃ１」の書込みとデータ「Ｆ１」の書込みの間に、論理アドレス「ＬＡ０」について、別のトランザクション「Ｔ２」における１つの書込み対象データ「Ａ２」が書き込まれる。その論理アドレス「ＬＡ０」に、データ「Ａ１」が記憶されているページの物理アドレスに代えて、データ「Ａ２」の書込み先ページの物理アドレスが割り当てられる。データ「Ｈ１」が書き込まれて、トランザクション「Ｔ１」がコミットする。トランザクション「Ｔ２」での残りの書込み対象データ「Ｆ２」及び「Ｈ２」の書込み先は、それぞれ、論理アドレス「ＬＡ５」及び「ＬＡ７」である。データ「Ｆ２」及び「Ｈ２」が、それぞれ、２つのページに書き込まれる。その２つのページの物理アドレスが、それぞれ、論理アドレス「ＬＡ５」及び「ＬＡ７」に、割当て済の物理アドレスに代えて、割り当てられる。データ「Ｈ２」が書き込まれて、トランザクション「Ｔ２」がコミットする。【００５８】
（ｃ）トランザクション「Ｔ３」での書込み対象は、データ「Ｆ２」及び「Ｈ２」の更新後データ「Ｆ３」及び「Ｈ３」である。データ「Ｆ３」及び「Ｈ３」の書込み先は、それぞれ、論理アドレス「ＬＡ５」及び「ＬＡ７」である。論理アドレス「ＬＡ５」及び「ＬＡ７」の各々に、トランザクション「Ｔ３」に関連付いているタイムスタンプ「ＴＳ３」が関連付けられる。データ「Ｆ３」及び「Ｈ３」が、２つのページにそれぞれ書き込まれる。その２つのページの物理アドレスが、それぞれ、論理アドレス「ＬＡ５」及び「ＬＡ７」に、割当て済の物理アドレスに代えて、割り当てられる。データ「Ｈ３」が書き込まれて、トランザクション「Ｔ３」がコミットする。【００５９】
以上の（ａ）〜（ｃ）によれば、例えば、データ「Ａ０」は、データ「Ａ１」を書き込むトランザクション「Ｔ１」がコミットした時点で、別のトランザクションから参照されていない限り、参照されなくなるデータである。このようなデータは、削除されても構わない。【００６０】
そこで、本実施例では、ＦＭデバイス３０が上述の拡張論物変換情報４５１を保持する。【００６１】
図５は、拡張論物変換情報４５１の構成例を示す。【００６２】
拡張論物変換情報４５１は、例えばテーブル構造であり、上述したように、拡張されたアドレス変換情報である。拡張論物変換情報４５１は、複数のエントリを有する。エントリは、ＬＡ＋ＴＳ（論理アドレスとタイムスタンプの組）毎に存在する。各エントリが記憶する情報として、ＬＡ＋ＴＳ５０１、ＰＡ５０２及び参照カウンタ５０３がある。【００６３】
ＬＡ＋ＴＳ５０１は、論理アドレスとタイムスタンプの組を表す。タイムスタンプは、バージョンＩＤ（例えば通し番号）でもよいし、時刻でもよい。ＰＡ５０２は、論理アドレスに割り当てられた物理アドレスを表す。参照カウンタ５０３は、その物理アドレスが属するページを参照する参照元（例えば、トランザクション、又は、バージョン（タイムスタンプ））の数である参照カウンタを表す。従って、参照カウンタ（値）が１以上であれば、その参照カウンタに対応する論理アドレスが書込み先とされたデータが、少なくとも１つのトランザクションから参照されることを意味する。参照カウンタが「０」であれば、その参照カウンタに対応する論理アドレスが書込み先とされたデータが、いずれのトランザクションからも参照されないことを意味する。参照カウンタが「０」であり、且つ、その参照カウンタ「０」に対応した論理アドレスに関連付いているＴＳよりも新しいＴＳが、その参照カウンタ「０」に対応した論理アドレスと同じ論理アドレスに関連付いた場合、その参照カウンタ「０」に対応した論理アドレスが書込み先であるデータは消去されてよいデータ（無効化されるデータ）として扱うことができる。【００６４】
次に、図６及び図７を参照して、トランザクション、タイムスタンプ、論理アドレス、データ、物理アドレス、ページ状態（有効／無効）及び参照カウンタの対応関係の一例を説明する。【００６５】
図６は、トランザクション、タイムスタンプ、論理アドレス及びデータの対応関係の一例を示す。図７は、タイムスタンプ、論理アドレス、データ、物理アドレス、ページ状態（有効／無効）及び参照カウンタの対応関係の一例を示す。図６と図７が対応している。なお、以下の説明では、下記を前提とする。
（＊）図６の表記は、図３の表記と同じである。
（＊）図７において、２つのエントリから構成される１つのボックスは、１つのブロックに対応する。各エントリを構成する３つのフィールドは、左から順に、チェックボックスフィールド、データフィールド及び参照カウンタフィールドを意味する。１つのエントリは、１つのページに対応している。
（＊）従って、図７の例では、１つのブロックが、２つのページで構成されている。
（＊）また、図７において、物理アドレスは、物理アドレスを意味する符号（Ｐ）と、ブロック番号と、ページ番号との組合せである。例えば、ｎ番目のブロック（物理ブロック）におけるｍ番目のページ（物理ページ）の物理アドレスを、「Ｐｎｍ」と表記できる（ｎ及びｍは、それぞれ整数）。物理アドレスＰｎｍに該当するページを、「ページ＃ｎｍ」と表記できる。ｎ番目のブロックを、「ＰＢ＃ｎ」又は「ブロック＃ｎ」と表記できる。ｍ番目のページを、「ＰＰ＃ｍ」又は「ページ＃ｍ」と表記できる。
（＊）図７において、チェックマークは、参照カウンタが「１」以上のページを意味する。このため、チェックマークは、有効ページ（有効データ）をカバーする。チェックマーク無し且つデータ有りは、無効ページ（無効データ）を意味する。チェックマーク無し且つデータ無しは、空きページを意味する。
（＊）図７において、参照カウンタフィールドにおける値は、参照カウンタである。
（＊）データ「Ａｘ」（ｘ＝０、１、…）の書込み先論理アドレスは、論理アドレス「ＬＡ１」である。データ「Ｂｘ」（ｘ＝０、１、…）の書込み先論理アドレスは、論理アドレス「ＬＡ２」である。データ「Ｃｘ」（ｘ＝０、１、…）の書込み先論理アドレスは、論理アドレス「ＬＡ３」である。【００６６】
（７−１）トランザクション「Ｔ０」での書込み対象が、データ「Ａ０」〜「Ｃ０」である。従って、ＦＭコントローラ３２は、ＬＡ＋ＴＳとして、「ＬＡ０＋ＴＳ０」、「ＬＡ１＋ＴＳ０」、及び、「ＬＡ２」＋ＴＳ０」を拡張論物変換情報４５１に登録する。書込み先ブロックが空きブロック＃０（いずれのページも空き状態のブロック）の場合、ＦＭコントローラ３２は、ブロック＃０のページ＃０及び＃１にデータ「Ａ０」及び「Ｂ０」を書き込み、次に、書込み先ブロックを空きブロック＃１とし、残りのデータ「Ｃ０」を、ページ＃１０に書き込む。このため、ＦＭコントローラ３２は、「ＬＡ０＋ＴＳ０」、「ＬＡ１＋ＴＳ０」、及び、「ＬＡ２＋ＴＳ０」に、それぞれ、物理アドレス「ＰＡ００」、「ＰＡ０１」及び「ＰＡ１０」を割り当てる。物理アドレス「ＰＡ００」、「ＰＡ０１」及び「ＰＡ１０」にそれぞれ属する３つのページは、それぞれ有効ページである。ＦＭコントローラ３２は、「ＬＡ０＋ＴＳ０」、「ＬＡ１＋ＴＳ０」、及び、「ＬＡ２＋「Ｓ０」にそれぞれ対応した３つの参照カウンタの各々に１を加算する。結果として、３つの参照カウンタの各々は「１」となる。【００６７】
（７−２）ＦＭコントローラ３２は、データ「Ｃ０」の書込みによりトランザクション「Ｔ０」がコミットした場合、タイムスタンプ「ＴＳ０」に対応した「ＬＡ０＋ＴＳ０」、「ＬＡ１＋ＴＳ０」、及び、「ＬＡ２＋ＴＳ０」にそれぞれ対応した３つの参照カウンタの各々から１を減算する。結果として、３つの参照カウンタの各々は「０」となる。しかし、その３つの参照カウンタの各々には再び１が加算される。なぜなら、データ「Ａ０」及び「Ｃ０」は、それぞれ、トランザクション「Ｔ１」での書込み対象データ「Ａ１」及び「Ｃ１」の更新前データであり、データ「Ｂ０」は、トランザクション「Ｔ２」での書込み対象データ「Ｂ１」の更新前デーだからである。従って、ＦＭコントローラ３２は、ＬＡ＋ＴＳとして、「ＬＡ０＋ＴＳ１」、「ＬＡ１＋ＴＳ２」、及び、「ＬＡ２＋ＴＳ１」を、拡張論物変換情報４５１に登録する。また、ＦＭコントローラは、「ＬＡ０＋ＴＳ１」、「ＬＡ１＋ＴＳ２」、及び、「ＬＡ２＋ＴＳ１」にそれぞれ対応した３つの参照カウンタの各々に１を加算する。また、ＦＭコントローラは、「ＬＡ１＋ＴＳ２」に対応した更新前データ「Ｂ０」が属する「ＬＡ１＋ＴＳ０」に対応した参照カウンタにも１を加算する。結果として、チェックマークは、「ＬＡ０＋ＴＳ１」、「ＬＡ１＋ＴＳ２」、「ＬＡ２＋ＴＳ１」及び「ＬＡ２＋ＴＳ０」の各々に対応する。データ「Ａ１」、「Ｂ１」及び「Ｃ１」は、ページ＃１１、＃２０及び＃２１。このため、ＦＭコントローラ３２は、「ＬＡ０＋ＴＳ１」、「ＬＡ１＋ＴＳ２」、及び、「ＬＡ２＋ＴＳ１」に、それぞれ、物理アドレス「ＰＡ１１」、「ＰＡ２０」及び「ＰＡ２１」を割り当てる。ＦＭコントローラ３２は、データ「Ｃ１」の書込みによりトランザクション「Ｔ１」がコミットした場合、コミットしたトランザクション「Ｔ１」に対応するタイムスタンプ「ＴＳ１」と、そのタイムスタンプ「ＴＳ１」より旧いタイムスタンプのうちの最新のタイムスタンプとの両方に関連付いている論理アドレス「ＬＡ０」及び「ＬＡ２」を特定する。すなわち、「ＬＡ０＋ＴＳ０」及び「ＬＡ２＋ＴＳ０」が特定される。ＦＭコントローラ３２は、特定した「ＬＡ０＋ＴＳ０」及び「ＬＡ２＋ＴＳ０」にそれぞれ対応した２つの参照カウンタの各々から１を減算する。結果として、その２つの参照カウンタの各々は「０」となる。【００６８】
（７−３）タイムスタンプ「ＴＳ１」より旧いタイムスタンプ「ＴＳ０」に対応する「ＬＡ０＋ＴＳ０」及び「ＬＡ２＋ＴＳ０」にそれぞれ対応した２つの参照カウンタの各々は「０」である。このため、「ＬＡ０＋ＴＳ０」及び「ＬＡ２＋ＴＳ０」については、それぞれ、データが参照されることが無い。そこで、ＦＭコントローラ３２は、「ＬＡ０＋ＴＳ０」及び「ＬＡ２＋ＴＳ０」にそれぞれ対応した２つのエントリの各々を無効エントリとして扱う（図７においてブランクのエントリ）。ＦＭコントローラ３２は、ウェアレベリング処理の１つとして、ガベージコレクション処理（言い換えれば、リクラメーション処理）を行う。例えば、ＦＭコントローラ３２は、移動対象データの少ないブロック＃０及び＃１（すなわち、チェックマークが関連付けられているページの数が少ないブロック＃０及び＃１）から、それぞれ、空きブロック＃３に、チェックマークが関連付けられているページ内のデータ（参照カウンタが「１」以上であるページ内のデータ）をコピーする。これにより、ＦＭコントローラ３２は、「ＬＡ０＋ＴＳ０」及び「ＬＡ２＋ＴＳ０」に、コピー元物理アドレスＰ００及びＰ１０に代えて、コピー先物理アドレスＰ３０及びＰ３１を割り当てる。また、ＦＭコントローラ３２は、各コピー元ページを、無効ページとして管理する。結果として、無効化されたエントリに対応したページが無効ページとなる。ＦＭコントローラ３２は、有効ページの無いブロック＃０及び＃１からそれぞれデータを消去することで、ブロック＃０及び＃１を空きブロックとする（図７では、ブロック＃１及び＃２のうちブロック＃１のみ、空きブロックとなったことを示す）。なお、ウェアレベリング処理によれば、コピー元（移動元）ページ内のデータの更新頻度が比較的高い場合、コピー先（移動先）空きブロックは、消去回数が比較的少ないブロックでよい。一方、コピー元ページ内のデータの更新頻度が比較的低い場合、コピー先空きブロックは、消去回数が比較的多いブロックでよい。【００６９】
（７−４）ＦＭコントローラ３２は、トランザクションＴ２での残りのデータ「Ｃ２」を、空きブロック＃０の空きページ＃０に書き込む。このため、「ＬＡ２＋ＴＳ２」に、物理アドレス「Ｐ００」が割り当てられる。ＦＭコントローラ３２は、データ「Ｃ２」の書込みによりトランザクション「Ｔ２」がコミットした場合、コミットしたトランザクション「Ｔ２」に対応するタイムスタンプ「ＴＳ２」と、そのタイムスタンプ「ＴＳ２」より旧いタイムスタンプのうちの最新のタイムスタンプとの両方に関連付いている論理アドレス「ＬＡ１」及び「ＬＡ２」を特定する。すなわち、「ＬＡ１＋ＴＳ０」及び「ＬＡ２＋ＴＳ１」が特定される。ＦＭコントローラ３２は、特定した「ＬＡ１＋ＴＳ０」及び「ＬＡ２＋ＴＳ１」にそれぞれ対応した２つの参照カウンタの各々から１を減算する。結果として、その２つの参照カウンタの各々は「０」となり、論理アドレス「ＬＡ０＋ＴＳ１」、「ＬＡ１＋ＴＳ２」及び「ＬＡ２＋ＴＳ２」にそれぞれ対応した３つの参照カウンタは「１」のままである。「ＬＡ０＋ＴＳ１」、「ＬＡ１＋ＴＳ２」及び「ＬＡ２＋ＴＳ２」の各々に対応した参照カウンタ（つまり、各論理アドレスについて最新時点に対応した参照カウンタ）が「１」以上である（「０」にされない）理由は、最新のタイムスタンプ「ＴＳ２」時点の最新のデータは参照され得るためである。【００７０】
以下、図８〜図１１を参照して、本実施例で行われる読出し処理、書込み処理、参照カウンタ更新処理、ＧＣ（ガベージコレクション）処理を説明する。なお、図８〜図１１において、「ホスト」に対応した処理は、ホストシステム（ＤＢＭＳ４１２及びストレージコントローラ８４２）によって行われ、「ＦＭ」に対応した処理は、ＦＭコントローラ３２によって行われる。【００７１】
図８は、読出し処理の流れの一例を示す。【００７２】
ＤＢＭＳ４１２（クエリ実行部４２４）が、読出し元論理アドレス（ＬＡ）とタイムスタンプ（ＴＳ）とを指定した読出し要求を発行する（ステップ６０１）。発行された読出し要求は、オペレーティングシステム４１７を通じて外部ストレージ装置４０２に送られる。ストレージコントローラ８４２が、記憶デバイス群４４３のうちの、その読出し元論理アドレスに対応するＦＭデバイス３０に、ＬＡ及びＴＳを指定した読出し要求を送信する。【００７３】
ＦＭコントローラ３２（ＦＭ制御プログラム４４２）が、ＬＡ及びＴＳを指定した読出し要求を受信する（ステップ６０２）。ＦＭコントローラ３２が、指定されたＬＡについて、指定されたＴＳ又はそれより旧いＴＳのうちの最も新しいＴＳに対応したエントリを、拡張論物変換情報４５１から探す（ステップ６０３）。【００７４】
ＦＭコントローラ３２は、見つかったエントリから物理アドレスを特定する（ステップ６０４）。ＦＭコントローラ３２は、特定した物理アドレスが属するページからデータを読み出し、読み出したデータを、ステップ６０２で受信した読出し要求の応答として、ストレージコントローラ８４２に送信する（ステップ６０５）。ストレージコントローラ８４２は、１以上のＦＭデバイスからそれぞれ読み出された１以上のデータに基づくデータを、データベースサーバ４０１からの読出し要求の応答として、送信する。【００７５】
この読出し処理において、後述する参照カウンタ更新処理も行われる。【００７６】
図９は、書込み処理の流れの一例を示す。【００７７】
ＤＢＭＳ４１２（クエリ実行部４２４）が、キャッシュ領域（メモリ４１６上に設けられた領域）に格納されているチェックポイント対象データのうちの、ページサイズの整数倍量のデータを、書込み対象のデータとして決定する。ＤＢＭＳ４１２は、書込み先論理アドレス（ＬＡ）とタイムスタンプ（ＴＳ）とを指定した書込み要求を発行する（ステップ７００）。書込み対象データは、書込み要求に付随する。なお、ここで言う「ページサイズ」は、例えば、ページ毎にＥＣＣ（Error  Correcting  Code）が付加される場合、ＥＣＣを除いたサイズでよい。また、キャッシュ領域での領域単位サイズ（管理単位サイズ）と、ページサイズが同じであれば、ステップ７００は行われないでよい。【００７８】
発行された書込み要求は、オペレーティングシステム４１７を通じて外部ストレージ装置４０２に送られる。ストレージコントローラ８４２が、記憶デバイス群４４３のうちの、その書込み先論理アドレスに対応するＦＭデバイス３０に、ＬＡ及びＴＳを指定した書込み要求を送信する。【００７９】
ＦＭコントローラ３２（ＦＭ制御プログラム４４２）が、ＬＡ及びＴＳを指定した書込み要求を受信する（ステップ７０１）。ＦＭコントローラ３２が、指定されたＬＡについて、指定されたＴＳ又はそれより旧いＴＳのうちの最も新しいＴＳに対応したエントリであって、参照カウンタが「０」であるエントリを、拡張論物変換情報４５１から探す（ステップ７０２）。【００８０】
そのようなエントリが見つかった場合（ステップ７０３：ＹＥＳ）、ＦＭコントローラ３２は、見つかったエントリを無効化候補とする（ステップ７０４）。「無効化候補」とは、トランザクションのコミット時に無効化されることを意味する。無効化候補であることが、見つかったエントリに関連付けられる。例えば、拡張論物変換情報４５１が、無効化候補か否かを表すフラグが登録されるカラムを有していて、そのエントリに対応したフラグが、無効化候補を意味する値に更新される。或いは、例えば、そのエントリに対応したＬＡ＋ＴＳ５０１、ＰＡ５０２及び参照カウンタ５０３のうちの少なくとも１つに、無効化候補であることを意味するコードが関連付けられる。【００８１】
そのようなエントリが見つからなかった場合（ステップ７０３：ＮＯ）、又は、ステップ７０４の後、ＦＭコントローラ３２は、受信した書込み要求について新たなエントリを、拡張論物変換情報４５１から取得する（ステップ７０５）。ＦＭコントローラ３２は、ステップ７０６を行う。ステップ７０６では、例えば、ＦＭコントローラ３２は、下記を行う。
（＊）ＦＭコントローラ３２は、取得したエントリに、その書込み要求で指定されているＬＡ及びＴＳを登録する。
（＊）ＦＭコントローラ３２は、空きページを確保し、空きページの物理アドレス（ＰＡ）を、書込み要求で指定されているＬＡ及びＴＳに割り当てる。つまり、ＦＭコントローラ３２は、取得したエントリに、確保した空きページのＰＡを登録する。
（＊）ＦＭコントローラ３２は、確保した空きページ（割り当てた空きページ）に、書込み要求に付随するデータを書き込む。【００８２】
この書込み処理において、後述する参照カウンタ更新処理も行われる。【００８３】
図１０は、参照カウンタ更新処理の流れの一例を示す。【００８４】
１以上の読出し処理（図８）及び１以上の書込み処理（図９）のうちの少なくとも１つが、１つのトランザクションの処理において行われる。ＦＭコントローラ３２が、トランザクション開始を検出する（ステップ５０１）。トランザクション開始の検出は、例えば、トランザクション開始を意味する要求（ＢＥＧＩＮ）を、ＤＢＭＳ４１２からストレージコントローラ８４２を通じてＦＭコントローラ３２が受信することで、検出されてよい。【００８５】
トランザクション開始の検出からトランザクション終了の検出までの間、ステップ５０２が行われる。すなわち、ＦＭコントローラ３２は、読出し要求を受信した場合、その読出し要求で指定されているＬＡ（及びＴＳ）を、読出し元変数（例えば、キャッシュ領域の管理で使用されるReadSet）のリストにこのＬＡ（及びＴＳ）がまだ含まれていなければこのＬＡ（及びＴＳ）をそのリストに追加し、そのＬＡ及びＴＳに対応した参照カウンタに１を加算する。一方、ＦＭコントローラ３２は、書込み要求を受信した場合、その書込み要求で指定されているＬＡ（及びＴＳ）を、更新後変数（例えば、キャッシュ領域の管理で使用されるWriteNewSet）のリストにこのＬＡ（及びＴＳ）がまだ含まれていなければこのＬＡ（及びＴＳ）をそのリストに追加し、そのＬＡ及びＴＳに対応した参照カウンタに１を加算する。その書込み要求に従うデータの更新前データが存在する場合、ＦＭコントローラ３２は、その書込み要求で指定されているＬＡ（及びＴＳ）を、更新前変数（例えば、キャッシュ領域の管理で使用されるWriteOldSet）のリストにこのＬＡ（及びＴＳ）がまだ含まれていなければこのＬＡ（及びＴＳ）をそのリストに追加する。ステップ５０２は、読出し要求又は書込み要求が受信される都度に行われる。【００８６】
ＦＭコントローラ３２が、トランザクション終了を検出する（ステップ５０３）。トランザクション終了の検出は、例えば、トランザクション終了を意味する要求（ＣＯＭＭＩＴ）を、ＤＢＭＳ４１２からストレージコントローラ８４２を通じてＦＭコントローラ３２が受信することで、検出されてよい。この検出がされた場合、コミット処理が行われる。一方、例えば、トランザクションの処理中での所定のエラーの検出も、トランザクション終了の検出でよい。この検出がされた場合、アボート処理が行われる。【００８７】
コミット処理では、ＦＭコントローラ３２は、ステップ５０４を行う。すなわち、ＦＭコントローラ３２は、このトランザクションに対応する読出し元変数リストに含まれるＬＡ及びＴＳに対応した参照カウンタから１減算する。また、ＦＭコントローラ３２は、このトランザクションに対応する更新前変数リストに含まれるＬＡ及びＴＳに対応した参照カウンタから１減算する。これにより、このトランザクションに対応する読出し元変数リストに含まれているＬＡ及びＴＳに対応した参照カウンタは、トランザクション開始前の値に戻される。また、このトランザクションに対応する更新前変数リストに含まれているＬＡ及びＴＳに対応した参照カウンタは、ゼロになり得る。ＦＭコントローラ３２は、参照カウンタがゼロになった無効化候補エントリ（図９のステップ７０４で無効化候補とされたエントリ）を、無効化する。これにより、そのエントリに登録されていたＰＡに対応するページは無効ページであるとの扱いになる。なお、ＦＭコントローラ３２は、このトランザクションに対応する更新後変数リストに含まれるＬＡ及びＴＳに対応した参照カウンタから１減算することはしない。なぜなら、更新後変数リストに含まれるＬＡ及びＴＳに対応したデータ（コミット時の最新データ）は、参照され得るデータであり、故に、参照カウンタを１以上に維持する必要があるからである。【００８８】
一方、アボート処理では、ＦＭコントローラ３２は、ステップ５０５を行う。すなわち、ＦＭコントローラ３２は、このトランザクションに対応する読出し元変数リストに含まれるＬＡ及びＴＳに対応した参照カウンタから１減算する。更に、ＦＭコントローラ３２は、このトランザクションに対応する更新後変数リストに含まれるＬＡ及びＴＳに対応した参照カウンタから１減算する。これにより、このトランザクションに対応する読出し元変数リスト、更新前変数リスト及び更新後変数リストに含まれているＬＡ及びＴＳに対応した参照カウンタは、トランザクション開始前の値に戻される。なお、ＦＭコントローラ３２は、このトランザクションにおいて無効化候補となったエントリを、無効化候補としないようにしてよい（無効化候補状態をキャンセルしてよい）。【００８９】
図１１は、ＧＣ処理の流れの一例を示す。【００９０】
ＦＭコントローラ３２は、所定条件が満たされたか否かを判断する（ステップ８０１）。所定条件は、例えば、ブロック総数に対する空きブロックの比率が所定値より低下したこと、である。【００９１】
所定条件が満たされている場合（ステップ８０１：ＹＥＳ）、ＦＭコントローラ３２は、１以上のコピー元ブロックと、１つのコピー先空きブロックを選択する（ステップ８０２）。コピー元ブロックは、例えば、比較的有効ページの少ないブロック（コピー対象のデータの少ないブロック）である。コピー先ブロックは、例えば、コピー元ブロック内のコピー対象データの更新頻度が比較的高い場合、消去回数の比較的少ないブロックである。一方、コピー先ブロックは、例えば、コピー元ブロック内のコピー対象データの更新頻度が比較的低い場合、消去回数の比較的多いブロックである。【００９２】
ＦＭコントローラ３２は、ステップ８０３を行う。すなわち、ＦＭコントローラ３２は、１以上のコピー元ブロックから１つのコピー先空きブロックに有効データをコピーする。これにより、いずれのコピー元ブロックも、有効ページが存在しないブロックとなる。ＦＭコントローラ３２は、各コピー元ブロックに対して消去処理を行うことで、各コピー元ブロックを空きブロックとする。【００９３】
ＦＭコントローラ３２は、所定条件が満たされている状態が解消されたならば（ステップ８０４：ＹＥＳ）、処理を終了する。一方、所定条件が満たされている状態が解消されていなければ（例えば、空きブロックの比率が未だ所定値以上であれば）（ステップ８０４：ＮＯ）、ＦＭコントローラ３２は、ステップ８０２を行う。【００９４】
以上が、実施例１の説明である。実施例１によれば、追記型ＭＶＣＣ方式に従うバージョン管理及び空き領域管理のうちの少なくとも空き領域管理が、ＦＭデバイス３０にオフロードされる。これにより、ＤＢＭＳ４１２を実行するプロセッサ４１４の負荷が軽減される。
【実施例２】
【００９５】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。【００９６】
実施例１では、図１２に示すように、ログ領域が記憶デバイス４１５のような不揮発記憶デバイスに別途確保されている。このため、データベース８５１のログを、ＦＭデバイス３０に格納する必要が無い。従って、データベース８５１のデータの単位サイズ（書き込まれるデータの単位サイズ）を、ＦＭのページのサイズと同じとすることができる。結果として、ページに空き領域が生じない。つまり、データ格納効率が高い。【００９７】
一方、実施例２では、図１３に示すように、ログ領域が別途確保されていない。このため、データベース８５１のログ（キャッシュ領域上の更新前データを含む更新前イメージ）と、更新後データとを、ＦＭデバイス３０に格納する必要がある。従って、書き込まれるデータの単位サイズを、ＦＭのページのサイズと同じとすることが難しい。結果として、ページに空き領域が生じることがある。つまり、データ格納効率が低いことがある。【００９８】
そこで、実施例２では、プロセッサ４１４の負荷に応じて、データ格納方式を変更する。【００９９】
例えば、プロセッサ４１４の負荷が所定値よりも高い場合、図１４に示すように、ＤＢＭＳ４１２（クエリ実行部４２４）が、コミット処理をグループ化することで、書込み単位サイズをページサイズの整数倍とする。すなわち、ＤＢＭＳ４１２は、キャッシュ領域に、ページサイズの整数倍分のデータ及びログ（コミットしたデータおよびログ）が蓄積されるまで待つ。プロセッサ４１４の負荷が高いということは、ＦＭデバイス３０への書込み以外の処理をプロセッサ４１４が行っているということなので、ＦＭデバイス３０への書込みが待たれても、影響は小さい。プロセッサ４１４は、ページサイズの整数倍の量のデータ及びログ（コミットしたデータおよびログ）がキャッシュ領域に蓄積された場合、そのデータ及びログを、ＦＭデバイス３０（外部ストレージ装置４０２）に書き込む。つまり、ページサイズの整数倍の量のデータ及びログが書込み対象とされた書込み要求が、ＦＭデバイス３０に送信される。このように、書込み単位サイズがページサイズの整数倍であれば、後述するページ間マージコピーの必要性を軽減できる。【０１００】
一方、プロセッサ４１４の負荷が所定値以下の場合、図１５に示すように、ＤＢＭＳ４１２（クエリ実行部４２４）は、ページサイズの整数倍分のデータ及びログ（コミットしたデータおよびログ）が蓄積されるまで待たない（図１５において、「ＰＢ」はブロック（物理ブロック）を意味し、「ＰＰ」はページ（物理ページ）を意味する）。プロセッサ４１４は、ページサイズの整数倍に満たないデータ及びログ（コミットしたデータおよびログ）を、ＦＭデバイス３０（外部ストレージ装置４０２）に書き込む。図１５の例によれば、書込み先ブロックは、ブロック＃１である。また、図１５の例によれば、説明を分かり易くするため、ＰＡ１０、ＰＡ１１及びＰＡ１２にそれぞれ対応した３つのページの各々に、ページサイズよりも小さいデータ又はログが書き込まれている（ページ内のグレーのセルは、有効データを格納しているセクタを意味する）。この例によれば、３つのページのいずれにも空き領域（空きセクタ）が生じているので、データ格納効率が低い。ＦＭコントローラ３２は、空きセクタのあるページを検出する。ここでは、ＦＭコントローラ３２は、ＰＡ１０、ＰＡ１１及びＰＡ１２にそれぞれ対応した３つのページを検出する。ＦＭコントローラ３２は、検出した３つのページ内のデータを１つのページに集約する。つまり、ＦＭコントローラ３２は、ページ間マージコピーを行う。ページ間マージコピーでは、コピー元ページの割り当て先のＬＡ及びＴＳに対応した参照カウンタは、「１」以上である。なぜなら、その参照カウンタが「０」であれば、コピー元ページは無効ページであるからである。図１５の例によれば、ＦＭコントローラ３２は、ＰＡ１０、ＰＡ１１及びＰＡ１２にそれぞれ対応した３つのページから、有効データを、ＰＡ２０のページ（ブロック＃２におけるページ＃０）に集約（コピー）する。これにより、データ格納効率が向上する。なお、ＦＭコントローラ３２は、いずれのコピー元ページも、無効ページとして管理する。また、ＦＭコントローラ３２は、図１５に示すように、拡張論物変換情報において、ＰＡ１０、ＰＡ１１及びＰＡ１２にそれぞれ対応する異なる３つのＬＡに、それぞれ、ＰＡ１０、ＰＡ１１及びＰＡ１２に代えて、同一のＰＡ２０を関連付ける。なお、ＬＡとデータの対応関係を判別可能にするために、ＦＭコントローラ３２は、ＬＡに関連付けるＰＡに、セクタ番号を関連付けてよい。図１５の例によれば、ＰＡ２０のページにおいて、０番目〜１番目のセクタが、ＬＡ０に対応し、２番目〜５番目のセクタがＬＡ１に対応し、６番目〜７番目のセクタがＬＡ２に対応していることがわかる。【０１０１】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、データベースの一部が１以上のＦＭデバイスに格納され、残りがメモリ４１６又は記憶デバイス４１５に格納されてもよい。
【符号の説明】
【０１０２】
３０…フラッシュメモリ（ＦＭ）デバイス、４０１…データベースサーバ、４１２…データベース管理システム（ＤＢＭＳ）
【図１】
2016162981.tif 000003
【図２】
2016162981.tif 000004
【図３】
2016162981.tif 000005
【図４】
2016162981.tif 000006
【図５】
2016162981.tif 000007
【図６】
2016162981.tif 000008
【図７】
2016162981.tif 000009
【図８】
2016162981.tif 000010
【図９】
2016162981.tif 000011
【図１０】
2016162981.tif 000012
【図１１】
2016162981.tif 000013
【図１２】
2016162981.tif 000014
【図１３】
2016162981.tif 000015
【図１４】
2016162981.tif 000016
【図１５】
2016162981.tif 000017
【国際調査報告】
2016162981.tif 000018
2016162981.tif 000019