ColumnStoreバッチInsertモード

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...
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.