ColumnStoreユーザーモジュール

ユーザーモジュールはエンドユーザーからのクエリ操作を管理します。各クエリの状態を管理し、クエリ処理を行うためにパフォーマンスモジュールへ処理を委譲します。全てのパフォーマンスモジュールからの処理結果をマージし、最終的にはエンドユーザーへ結果を返します。

ユーザーモジュールはいくつかのプロセスで構成されます。

  • MariaDB Serverプロセス:mysqld
    • mysqldはMariaDB ColumnStore用に特別に改修されたMariaDB Serverのバイナリです。
    • 通常のMariaDB Serverのサーバーバイナリと同様の処理(接続、SQLのパース、SQLプランの生成、最終的か結果セットの組み立て)を行います。
    • さらに、MariaDB Serverのクエリ実行計画を、MariaDB ColumnStore形式に変換します。MariaDB ColumnStore実行計画は、基本的には解析木ですが、実行におけるヒントがオプティマイザーより付加され、ユーザーモジュールによる解析木のジョブリストへの変換をサポートします。
  • 実行マネージャー:ExeMgr
    • ExeMgrはmysqldからのクエリー解析木をTCP/IPポートで待ち受けます。ExeMgrは解析木のジョブリストへの変換を受け持っています。ジョブリストはMariaDB ColumnStoreの構成要素であり、クエリに応答する命令の順序が記述されています。ExeMgrは解析木をパースし、ジョブステップをの生成およびジョブリストの最適化を繰り返します。ジョブステップの主な内容は、カラムへのフィルタの適用、結合処理、そして、クエリ結果のプロジェクションです。クエリ実行計画のそれぞれの処理は、ジョブリストによって並列に実行されます。そして、ユーザーモジュールだけもしくはパフォーマンスジュールだけ、またはそれらの組み合わせにより、処理される可能性があります。それぞれののノードは、エクステントマップを用いてどのパフォーマンスモジュールに処理命令を送るかを決定します(ColumnStore Storage Architecture参照)。
  • DML, DDL ,import分配マネージャー (DMLProc, DDLProc, cpimport).
    • DMLProcとDDLProcはDMLとDDLを適切なパフォーマンスモジュールに分配します。ユーザーモジュールでCpimportが動作する際には、ソースファイルをパフォーマンスもっジュールに分配します。

ユーザーモジュールはMariaDB ColumnSstoreの中心となる機能を処理します。

  • MariaDBプランをColumnStoreジョブリストに変換します。
  • MariaDB ColumnStoreシステムカタログから、InfiniDB OID(オブジェクトID)を検索します。
  • エクステントマップを検査します(エクステントマップについてはColumnStore Storage Architecture参照)。 不必要なエクステントを削除することでI/Oを減らすことにつながります。
  • パフォーマンスモジュールに指示(「プリミティブ操作」と呼ばれることもあります)を発行します。
  • 必要に応じてハッシュジョインを実行します(join操作時の小さい方のテーブルサイズに依存します)。ハッシュマップをパフォーマンスモジュールに送り。分散ハッシュジョインの実行を管理します。
  • ジョインの後に実施する、複数テーブルに渡る関数や式の処理を行います。
  • パフォーマンスモジュールから来たデータを受け取り、必要に応じて再要求します。
  • 全ての積算処理やdistinct処理のフォローアップステップを実行します。
  • MariaDBインターフェースにデータを返します。 ユーザーモジュールの主なジョブは、並行スケーリング動作を扱うことです。ユーザーモジュールはファイルには直接触れず、またそれらを見ることも要求はしません。サーバーのRAMを一時的に使用し、部分ごとに実行された呉理の結果を統合し、ユーザーへ処理結果を返します。

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.