MariaDB ColumnStoreは非トランザクション型のLOAD DATA INFILEINSERT 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ノード上にある設定ファイルを修正してください。

Comments

Comments loading...