データベースの表データをCSV形式にして、オブジェクト・ストレージにエクスポートします。以下の2通りの方法で実施し、速度を比較してみました。
- DBMS_CLOUD.EXPORT_DATAを使って、直接オブジェクト・ストレージにCSV形式でエクスポートする
- APEX_DATA_EXPORT.EXPORTを使ってBLOBにCSVデータを書き出した後、DBMS_CLOUD.PUT_OBJECTを呼び出してアップロードする
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と比べるとかなり重い処理になっているようです。