ColumnStoreバッチInsertモード
MariaDB ColumnStoreは非トランザクション型のLOAD DATA INFILEとINSERT INTO SELECT FROM SQL文に対するcpimport高速データインポートツールを備えています。この方法を使うと、これらの二つのSQL文を実行するのに比べ、明らかにパフォーマンスが向上します。この最適化方法は、SELECT対象で使用されるストレージエンジンとは独立です。
バッチInsertに対するcpimportの有効化/無効化
これらのSQL文にcpimportを使うか否かの制御については、infinidb_use_import_for_batchinsert変数が参照されます。この変数は一時的、セッションレベル、またはステートメントレベルでオンオフの制御を行うことが可能です。
バッチInsertでのcpimport仕様有無をセッションレベルで制御するには、次のコマンドを実行します。セッションが終了すると、次のセッションはデフォルト値に戻ります。
set infinidb_use_import_for_batchinsert = n where n is: * 0 (disabled) * 1 (enabled)
INSERT SELECTに対するデフォルトのデリミタの設定
- infinidb_import_for_batchinsert_delimiter変数が内部的に使用されており、MariaDB ColumnStoreで非トランザクション型のINSERT INTO SELECT FROM文の際に、デフォルトのデリミタはcpimportツールへ転送されます。デフォルトの値は文字の"7"で、データに文字の"7"の値が含まれていない限り、この値を変更する必要はありません。
この変数をセッションレベルで変更するには、次のコマンドが使用されます。一回セッションが終了すると、次のセッションではデフォルトに戻ります。
set infinidb_import_for_batchinsert_delimiter = ascii_value where ascii_value is an ascii value representation of the delimiter desired.
マルチバイト文字では問題があるかもしれません。UTF8のファイルで直接cpimportを使用することをお勧めします。
バージョンバッファーファイル管理
トランザクションモードでのLOAD DATA INFILEやINSERT INTO SELECTで次のエラーが発生した場合、小さな複数のチャンクへロードをするのをやめ、VersionBufferFileSizeの設定を増やし、非トランザクションでのLOAD DATA INFILEかcpimportの使用を検討することをお勧めします。
ERROR 1815 (HY000) at line 1 in file: 'ldi.sql': Internal error: CAL0006: IDB-2008: The version buffer overflowed. Increase VersionBufferFileSize or limit the rows to be processed.
VersionBufferFileSizeは通常は/usr/local/mariadb/columnstore/etcにあるColumnStore.xmlで設定可能です。この値はDMLトランザクション処理を提供するためのバージョンバッファーファイルのディスク上のサイズを指定しています。規定値である1GBは、1GBまで拡張可能であることを示しています。もし大きい値に設定したい場合、PM1ノード上にある設定ファイルを修正してください。