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でもインポート可能なようにフィールドサイズを拡張したテーブルに書き換えちゃえ! と思っている。

 そんな状態でテストすると、文字化けのリスクがあるわけだが、現在作っている部分では日本語の読み書きは無いので、問題は出ないはずだ。

Posted by rukihena at 00:41:58
トラックバックURL

このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/866

コメント