ColumnStoreパフォーマンスモジュール

パフォーマンスモジュール

パフォーマンスモジュールはクエリと書き込み処理のサポートにおける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の構成に自動付加され、稼働を開始します。

Comments

Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.