1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IBM Cloud Object StorageファイルをDB2へロードする(2) ~ SQL Query性能チューニングについて

Last updated at Posted at 2022-06-07

目的

前回はICOS上のファイルをSQLQueryによりDB2テーブルにLoadを実施して処理時間を測定しましたが、DB2Nativeに実施するのに比べて性能が劣化するという結論を得ました、本文書ではPARALLELISM機能を利用してSQLQueryの性能チューニングを検証します。

IBM Cloud Object StorageファイルをDB2へロードする(1)
IBM Cloud Object StorageファイルをDB2へロードする(2) ~ SQL Query性能チューニングについて: 本文書

なおIBM Cloud SQL Queryは2022年5月よりIBM Cloud Data Engineにサービス名称が変更になりました。

性能チューニングについて

SQLQueryではDB2に結果を書き出す時に限りPARALLELISM x 節を使用して、複数の並列データベース接続を開くことを指定することがサポートされます。
IBM Cloud DOCでは下記の通り処理時間が短縮される可能性がある旨記述があり検証を実施しました。

dbResultClause
https://cloud.ibm.com/docs/sql-query?topic=sql-query-sql-#dbResultClause
抜粋
PARALLELISM x 節を使用して、結果を書き出すために複数の並列データベース接続を開くことを指定します。 この指定を行うと、結果のサイズと、ターゲット・データベース・サービスのネットワーク接続状態によっては、 照会の処理時間が大幅に短縮される可能性があります。

またSQLQueryはSpark/Queryをベースにしており、その並列処理を最大限に活かすため、事前に複数のCSV/Parquetファイルに分割(Partition化)しておき、PARALLELISMを10~20に指定して複数のDB2接続をオープンして並列Loadを実施し処理時間を測定しました。

1.環境

  1. SQLQuery@Dallas, ICOS@Tokyo, DB2on IBMCloud@Tokyo(2Core 8GBRAM)のインスタンスを活用
  2. SQLQueryはWebコンソールを利用して、Query実行、時間を測定

2.検証手順

下記のようなSQL文(サンプル)を実行しています。

#CSVファイルから10個のParquetファイルにPartition化

SELECT *
FROM cos://jp-tok/dbload/data500.csv STORED AS CSV
into cos://jp-tok/dbload/500MPAQ     STORED AS parquet
partitioned into 10 objects

#CSVファイルから10個のcsvファイルにPartition化

SELECT *
FROM cos://jp-tok/dbload/data500.csv STORED AS CSV
into cos://jp-tok/dbload/500MCSV     STORED AS CSV
partitioned into 10 objects

#Partition化されたParquetファイルをDB2にロード,parallelismは5を指定
SELECT *
FROM cos://jp-tok/dbload/500MPAQ/* STORED AS parquet
into crn:v1:bluemix:public:dashdb-for-transactions:jp-tok:a/039dbe6794084c7cb514a276dd2345da:4299a8bc-68c6-4080-895f-cfa4e3cf78fe::/EMPLOYEE40
with parallelism 5

3.検証結果

スクリーンショット 2022-06-06 12.36.53.png

4.結果考察

◼︎100MB以上のファイルで性能向上が見られる
(ファイルサイズが小さいとSQLQueryのOverHeadが大きい、開発元の推奨は100MByte以上)

◼︎10個のParquetに分割されたFileで、10~20のParallelism処理によりロード時間は1/3~1/4に短縮された(Partition化された複数ファイルのロードでParallelismの効果は大きい)

◼︎CSVに比べるとParquetの効果が大きい
(SQLQueryはリモート処理になるので圧縮効果の高いParquetの効果がより大きい)

◼︎500MB以上のファイルではDB2Deadlock/timeoutを発生させ処理が中断(別途チューニング要)

◼︎SQLQueryでParquet分割/Parallelism利用したとしてもDB2Nativeに比べると依然遅い

*現時点ではDB2 NativeではParquetファイルを直接外部表として指定することはサポートされていません。

まとめ

SQLQueryでは馴染みのある(ANSI SQLに準拠した)SQL Select文でICOS上のファイルを簡易にデータ変換/分析を行えます。その際列ベースのParquetフォーマットに分割して処理すれば性能/コスト(ストレージ消費量)の観点から大変有利になります。また結果はICOSだけでなくDB2に保管することも可能です。その時Parallelismを併用して並列ロードすれば処理時間は大幅に短縮されます。

スクリーンショット 2022-05-18 12.49.21.png

リンク先

dbResultClause
https://cloud.ibm.com/docs/sql-query?topic=sql-query-sql-#dbResultClause

IBM Cloud Object StorageファイルをDB2へロードする(1)
https://qiita.com/nori0315/items/779fc8d543658d2225a1

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?