ColumnStoreクロス・エンジン結合の構成
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を使うことをお勧めします。