メモリ管理
メモリデータベースのキーポイントは、データベース用として必要な大量のメモリをいかに上手く利用するかという点にあります。すなわち、メモリに最適化したデータベース構造の設計技法によって性能に大きく差が現れます。
ハイブリッドメモリデータベースのキーポイントは、メモリデータベースとディスクデータベースにいかに効率的にデータを配置するかという点にあります。つまり、高速アクセスが必要なデータとそれ以外のデータの取り扱いのポリシーを明確に設定することが重要です。
![]()
高性能データベースを効率的に管理するため、Altibaseは、各階層に効率的なメモリ使用のために慎重に設計されています。データベースのようなシステムソフトウェアは、単純なメモリの割り当て(malloc)や、値を指定(memset)する演算も性能に非常に大きな影響を与えるため、Altibaseは、メモリプールを利用したメモリ管理モジュールを非常に慎重に設計して実現しました。また、Altibaseの保存デバイス管理階層(Storage Management Layer)は、メインメモリに最適化された保存単位でページを構成し、各ページの連携性を最大化することにより、データベースを効率的に保存・管理します。クエリ処理階層(Query Processing Layer)は、クエリ処理の際に必要な一時的空間(temporary storage)を効率的に管理するため、実行中に不要なメモリリソースの割り当てや解放による性能低下の要素を最小化しました。
![]()
大容量データベースの効率的な代案として、Altibaseは、メモリとディスクの2つの保存領域を一つのDBMSで提供します。メモリ領域と同様にディスク基盤の保存領域は、従来のDRDBMSで提供するLRUアルゴリズムをベースとしたバッファプール領域や物理的ディスク保存領域をサポートします。 ユーザが要求するデータをバッファプールにキャッシュして使用し、高性能なメモリ保存領域のデータと保存領域の速度に対する性能低下の要素を最小化しました。
![]()
メモリデータベースを運用すると、実際にテーブルに必要なメモリ空間よりはるかに多い量のメモリが消費されることがあります。これは、主に大量のデータがテーブルに挿入された後や、変更や削除が頻繁に行われた時に発生します。このような場合、該当するテーブルから不要なメモリをシステムに返還することができれば、より効率的にメモリを使うことができます。Altibaseは、テーブル単位のcompaction機能を提供しており、この機能を利用すると、メモリやテーブルを効率的に管理することができます。
![]()
Altibaseは、メインメモリ上のデータベース空間を共有メモリまたはプロセスローカルメモリに確保できる機能を提供します。共有メモリをデータベース空間として使うと、システムが正常な状態では、Altibaseの再実行にかかる時間を非常に短くすることができます。これは、共有メモリ内のデータベースが安全に維持されているため、バックアップデータベースからデータを読み込む必要がなく、すぐに共有メモリ内のデータベース領域をAltibaseサーバープロセスに割り当てて使うことができるためです。 メモリ内のデータベース空間は、永続空間(persistent space)と一時的空間(temporary space)に分けられます。永続空間は、実際のテーブルとメタ情報に関するデータを保存しています。この空間は、ディスク上のバックアップデータベース内容を反映しています。一時的空間は、インデックスデータやクエリ演算中に発生する作業用のテーブルが置かれる場所です。
この空間は、ディスク上にあるバックアップデータベースには反映されず、Altibaseサーバーが終了すると消えてしまう空間です。Altibaseのインデックスデータはバックアップデータベースに保存されず、一時的空間に保存・管理されます。Altibaseは、サーバー開始時にシステムカタログからインデックス情報を取得して、一時的空間にインデックスを速やかに生成します。インデックスをバックアップデータベースに保存しないことにより、Altibaseは、サーバー実行中にインデックスの変更に対してロギングする必要がなく、その分データベースの性能をアップさせることができます。
継続したデータの挿入により、メモリ内のデータベースの永続空間が足りない場合、Altibaseは、自動でデータベースの永続空間を一定のサイズに拡張して管理します。もちろん拡張されたデータベースの永続空間はバックアップデータベースに反映され、データの永続性を保障します。
Altibaseには、メモリデータベースのデータサイズの拡張に対応するため、ディスクテーブルスペース上のテーブルにデータを移動する機能を提供します。この移動機能(MOVE DML)は、同じスキーマのテーブルが存在する場合、メモリてーブルスペースのデータをディスクテーブルスペースに移動し、該当データを元のテーブルから削除する機能です。このデータ移動機能により、アクセスの多いデータやアクセスが比較的少ないデータを分離して保存し、応答性能を最適化し、保存空間をさらに効率的に使うことができます。