MariaDB ColumnStoreは、クエリにおいて、ColumnStoreのテーブルと非ColumnStoreのテーブル(MyISAMのテーブルなど)の結合をサポートします。非ColumnStoreのテーブルは、MariaDB ColumnStoreシステム上に存在してもJDBCをサポートする外部サーバーに存在しても問題ありません。

本機能をサポートするには、Columnstore.xmlの<CrossEngineSupport>にJDBCの情報を記載します。

以下は、結合対象のデータベースがMariaDB ColumnStoreと同じサーバー上に存在する場合のColumnstore.XMLファイルの記述例です。

<CrossEngineSupport>
       <Host>127.0.0.1</Host>
       <Port>3306</Port>
       <User>mydbuser</User>
       <Password>pwd</Password>
</CrossEngineSupport>

この設定変更は、ColumnStore serverが停止中に行われる必要があります。マルチノード環境では、再起動時に変更が各ノードに反映されるので、PM1上でのみ設定変更を行ってください。

Columnstore.xmlをコマンドラインから変更するには以下を参照してください。

https://mariadb.com/kb/en/mariadb/columnstore-configuration-file-update-and-distribution

トラブルシューティング

ERROR 1815 (HY000): Internal error: IDB-8001: CrossEngineSupport section in Columnstore.xml is not properly configured

  • ColumnStore.xmlが、PM1(パフォーマンスモジュール1)で正しく更新されて、再起動されていることを確認してください。

ERROR 1815 (HY000): Internal error: fatal error in drizzle_con_connect()(23)(23)

  • ColumnStore.xmlのCrossEngineSupportの記載がログイン情報と相違ないことを確認してください。

ERROR 1815 (HY000): Internal error: fatal error executing query in crossengine client lib(17)(17)

  • ログインユーザーが、infinidb_vtableの一時テーブル作成権限をもつことを確認してください。
grant create temporary tables on infinidb_vtable.* to mydbuser@127.0.0.1;
  • ログインユーザーが、クロス・エンジン結合で参照されるテーブルの参照権限をもつことを、各UMから接続し対象テーブルについて以下のように参照してクエリーを実行できることを確認してください。
mcsmysql -u mydbuser -p -h 127.0.0.1 
> use mydb;
> select * from innodb_table limit 10;

メモ

  • クロス・エンジン結合は、結合対象がMyISAMやAriaで、1行以下の行数の場合は実行されません。これは、MariaDBのオプティマイザーがこのケースをスキップしてしまうためです。そのため、MyISAMやAriaの代わりにInnoDBを使うことをお勧めします。

Comments

Comments loading...