ColumnStoreパフォーマンスモジュール
Contents
パフォーマンスモジュール
パフォーマンスモジュールはクエリと書き込み処理のサポートにおけるI/O操作を行っています。User Moduleから要求を受けます。パフォーマンスモジュールはクエそのものを参照するだけでなく、ユーザーモジュールでの処理結果も参照します。パフォーマンスモジュールはデータベースのスケールアウトに重要な3つの特徴を提供します。分散スキャン、分散ハッシュジョイン、分散集計処理です。これら3つの特徴の組み合わせにより、クエリの負荷が高いシステムにおいて、真の超並列処理(MPP, Massive Parallel Processing)を可能にします。
クエリ処理
- PrimProcはクエリの実行を行います。ユーザーモジュールから送られる指示はPrimProcにより実行されます。フィルタリング、ジョイン操作、データの初期集計はブロックI/O処理として実行され、その後、PrimProcはユーザーモジュールに結果を返します。
シェアード・ナッシング・データキャッシュ
全てのパフォーマンスモジュールはシェアード・ナッシング型のキャッシュを備えています。データが最初にアクセスされた際、パフォーマンスモジュールはLRU方式のキャッシュにそのデータをキャッシュします。パフォーマンスモジュールが実行しているサーバーでは、メモリの多くがパフォーマンスモジュールのデータキャッシュに利用されます。パフォーマンスモジュールのキャッシュはシェアード・ナッシング型のため、
- 共有ストレージ型のデータベースシステムにありがちな、パフォーマンスモジュール間での同期を考える必要がありません。
- パフォーマンスモジュールノードが増えると、それに伴ってキャッシュサイズも増加します。
ロードと書き込み処理
パフォーマンスモジュールノードは永続化ストレージに対してのロードや書き込みを実行します。パフォーマンスモジュールで書き込み処理を行うプロセスが2つあります。
- WriteEngineServer: WriteEngineServerはDML、DDL、インポートを各パフォーマンス上で実行します。DDLはMariaDB ColumnStoreシステムカタログ内に保存され、全てのColumnStoreメタデータの履歴を保持します。
- cpimport: cpimportはバルクデータがロードされたときのデータベースファイルの更新を行います。cpimportはどのモジュールが稼働しているか常に認識しています。また、パフォーマンスモジュール上で動作する際には、データベースディスクファイルの実際の更新を取り扱います。このように、MariaDB ColumnStoreは完全に並列化されたロード処理を提供しています。
MariaDB ColumnStoreプロセス管理
プロセス管理: ProcMgr
- ProcMgrは全てのMariaDB ColumnStoreプロセスの起動、モニタ、再起動処理を行います。また、プロセスモニター(ProcMon)という別プロセスも存在し、各ノード上のMariaDB ColumnStoreの操作履歴を収集します。
MariaDB ColumnStoreパフォーマンスモジュール・フェールオーバー
パフォーマンスモジュールのマルチノード構成では、ハートビート処理を行い、すべてのノードがオンラインであるかを確認しています。パフォーマンスモジュールの一部が失敗した場合でも、フェールオーバープロセスにより元に戻ります。もし、パフォーマンスモジュールが不正終了していた場合、すべてのクエリはエラー終了することになります。また、パフォーマンスモジュールの失敗によりエラーを受け取っているユーザーは、クエリを再度登録することで残りのパフォーマンスモジュールにより処理が引き継がれます。
フェールオーバーの際、外部ストレージがマウントされている場合、データブロックのパフォーマンスモジュールへのマッピングが重要となります。そしてパフォーマンスモジュールは、稼働中のパフォーマンスモジュールと、残りのパフォーマンスモジュールへ処理が分散されます。失敗パフォーマンスモジュールに紐づけられたDbRootsが、残りの稼働中のパフォーマンスモジュールに引き継がれます。この処理は透明性が重要で、データ処理全般に公開されています。
また、パフォーマンスモジュールがオンラインに戻った際、MariaDB ColumnStoreの構成に自動付加され、稼働を開始します。