2022年4月1日金曜日

DBMS_CLOUD.EXPORT_DATAを使ったエクスポートとの速度比較

 データベースの表データをCSV形式にして、オブジェクト・ストレージにエクスポートします。以下の2通りの方法で実施し、速度を比較してみました。

  1. DBMS_CLOUD.EXPORT_DATAを使って、直接オブジェクト・ストレージにCSV形式でエクスポートする
  2. APEX_DATA_EXPORT.EXPORTを使ってBLOBにCSVデータを書き出した後、DBMS_CLOUD.PUT_OBJECTを呼び出してアップロードする
最初の方法を実行するコードは以下です。


2番目の方法を実行するコードは以下です。


作業自体は表BRICKSの作成なども含め、こちらの記事で作成した環境にて実施しています。

1番目の方法 - 行数10,000 - 約1秒

22-04-01 02:29:51.498847000 +00:00: dbms_cloud.export_data

22-04-01 02:29:52.537668000 +00:00: end


2番目の方法 - 行数10,000 - 約2.5秒

22-04-01 02:30:02.391526000 +00:00: start

22-04-01 02:30:02.397568000 +00:00: apex_exec.open_query_context

22-04-01 02:30:02.399717000 +00:00: apex_data_export.export

22-04-01 02:30:04.462289000 +00:00: utl_compress.lz_compress

22-04-01 02:30:04.487900000 +00:00: utl_file

22-04-01 02:30:04.589217000 +00:00: dbms_cloud.put_object

22-04-01 02:30:04.713105000 +00:00: end


1番目の方法 - 行数100,000 - 約1.5秒

22-04-01 02:31:06.601669000 +00:00: dbms_cloud.export_data

22-04-01 02:31:07.966000000 +00:00: end


2番目の方法 - 行数100,000 - 約25秒

22-04-01 02:31:15.171480000 +00:00: start

22-04-01 02:31:15.176659000 +00:00: apex_exec.open_query_context

22-04-01 02:31:15.178690000 +00:00: apex_data_export.export

22-04-01 02:31:39.284485000 +00:00: utl_compress.lz_compress

22-04-01 02:31:39.469500000 +00:00: utl_file

22-04-01 02:31:39.595496000 +00:00: dbms_cloud.put_object

22-04-01 02:31:39.778184000 +00:00: end


1番目の方法 - 行数1,000,000 - 約3秒

22-04-01 02:54:53.030251000 +00:00: dbms_cloud.export_data

22-04-01 02:54:56.010861000 +00:00: end


2番目の方法 - 行数1,000,000 - 約4分

22-04-01 02:32:12.818698000 +00:00: start

22-04-01 02:32:12.829158000 +00:00: apex_exec.open_query_context

22-04-01 02:32:12.831126000 +00:00: apex_data_export.export

22-04-01 02:36:08.515317000 +00:00: utl_compress.lz_compress

22-04-01 02:36:10.202244000 +00:00: utl_file

22-04-01 02:36:10.474738000 +00:00: dbms_cloud.put_object

22-04-01 02:36:11.024944000 +00:00: end


1番目の方法 - 行数10,000,000 - 約21秒

22-04-01 03:14:09.332436000 +00:00: dbms_cloud.export_data

22-04-01 03:14:30.916486000 +00:00: end


パッケージAPEX_DATA_EXPORTはクラシック・レポート、対話モード・レポートや対話グリッドのダウンロードの機能で使用されています。画面から100万行のデータをダウンロードするといったユース・ケースはあまりないので気にしたことはなかったですが、DBMS_CLOUD.EXPORT_DATAと比べるとかなり重い処理になっているようです。

APEX_DATA_EXPORT.EXPORTがサポートしているファイル形式はXLSX、PDF、HTML、CSV、XMLおよびJSONで、人間が利用するを想定していることがわかります。大量のデータを交換する用途には向いていようです。

列数にも依存関係があるかもしれないので一概には言えないですが、100万行で苦しい感じで1千万行は実行できないでしょう。

Autonomous Databaseで大量のデータをCSVやJSON形式で交換するには、DBMS_CLOUD.EXPORT_DATAの使用を優先的に検討する必要があるででしょう。