Oracleのエクスポート(exp)/インポート(imp)ユーティリティーを使うときはbufferサイズをでかくしましょう、というお話。
$ exp username@sid buffer=20971520 feedback=2000
とかする。このbufferで指定されているサイズのメモリ(20MB)にはいる分だけ、一気にフェッチするので、指定しないとき(デフォルトはたかだか4KB)とくらべて、ずいぶん実行速度が違う。ていうか全然違う。インポート(imp)のときもこのbuffer指定は使える。
でも、100MBでexpやったら、割り当てに失敗して(EXP-00020エラー)、失敗作ダンプが出来上がってしまった。このバッファが確保されるのがシステムのメモリか、インスタンスのどこかのキャッシュかは不明だけれども、100MBは無茶みたい。上限は、たぶんきっとOracleの設定とかでかわるようなきもするけど20MBぐらいなら無難であろう。たぶん。
Oracleのユーティリティガイドってこの辺の解説がちょっと薄っぺらいので(他のところにあるのか?)、適当な参考書を…。今回はこれにヒントがあった。
Oracle データベース管理を極める13章 (DB Magazine SELECTION)
Amazonレビューはそんなに高くないですが、とても読みやすいです。安いし、入り口としては良いんじゃないかと。はい。