2009年8月22日
やたらとデカイ initial extent
たまには本業の話。
DBの深いところには手を出さないつもりだった。しかし、手を出してしまった。
高速化をやろうとすると、まずはパフォーマンス測定が必要になる。それを忙しいテストサーバでやると他ユーザのアクセスに邪魔をされて正しい測定ができない。
そこで、ローカルにDBを作っちゃえと思った。しかし、「サーバのライセンスが無い」と言われた。それで、Oracle XE を使うことにした。XEは無料版で、容量が4GBまでなどの制限がある。
XEに小さいマスタをインポートしてみる。DMPファイルは200Mぐらいだ。しかし、imp でインポートすると、あっとゆーまに4GBを超えて失敗する。
なぜだ?
調べてみると、initial extent がやたらとデカイ。テーブルによってはいきなり4GBが指定されている(w
ほとんどが旧システム用のゴミテーブルで、いらないものだらけだ。テストサーバ上でいらないテーブルをもりもり削ったら、インポート後で300MBぐらいまで削ることができた。さらに、残ったテーブルの initial extent の値も適切に設定すれば、一桁減らすことも可能だろう。DMPファイルは1.3MBほどだし。
旧システムが容量をバカ食いする仕様だったので、その時の無駄な設定が残っていたのだろうとは思う。しかし、「このテーブルの内容でこのサイズは無いだろう。」と思うところが多々あるので、容量見積もりをマジメにやっていたら、やっぱりこんなバカ食いにはならなかったのではないだろうか。
現状でも動作はするのでこれ以上の容量節約は不要なのだが、来週は initial extent の値をまじめに考えちゃおうかと思っている。
さらに、元のDBはSJISで作られており、インスコしたままのXEにインポートするとUTF8に変換されてフィールドサイズがうんたらかんたらで失敗する。XEのデータベースをSJISで作りなおせばいいのだが、これは非常に手間がかかる。
そこで、UTF8でもインポート可能なようにフィールドサイズを拡張したテーブルに書き換えちゃえ! と思っている。
そんな状態でテストすると、文字化けのリスクがあるわけだが、現在作っている部分では日本語の読み書きは無いので、問題は出ないはずだ。
このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/866