- 締切済み
エクステントについて
データベースをOracle8i→Oracle10gへ移行しました。 10gのデフォルトであるローカル管理で表領域を管理していますが、 これまでディクショナリ管理にしか接していなかったため困っています。 で、疑問が出てきました。 ローカル管理でも、フラグメンテーションは発生するとは思いますが それに対してはどのように対応したらよいでしょう。 データをDrop/Createすればデータの並びはきれいになると思いますが もし、そのように対応するならどのような基準で対象となるテーブルを選んだらよいでしょうか。 もちろん、簡単に対応する方法があったら教えてください。 これまでは複数エクステントにデータがまたがっているテーブルをディクショナリからSelectし、 第1エクステント内にデータが収まるようテーブルをDrop/Createして データをインポートしていました。 サーバ環境は OS:Windows2003Server StandardEdition DB:Oracle Database 10g 10.2.0.1.0 StandartEdition
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- entree
- ベストアンサー率55% (405/735)
結論から言えば、ディクショナリ管理の時とは異なり、フラグメンテーションについてはあまり気にしなくても良いと思います (フラグメンテーションが領域の無駄遣いにはなっても性能への影響がディクショナリ管理の場合に比べて極端に小さい)。 ただ、どうしてもフラグメンテーションを起こさせたくないのであれば、表領域を作成するときに uniform 指定をしてあげればよいです。(デフォルトは autoallocate 既に存在する表領域を uniform 指定に変更することはできません) create tablespace example datafile 'c:\oracle\oradata\orcl\example01.dbf' size 10m uniform size 64k; ^^^^^^^^^^^^^^^^
- gdcootie
- ベストアンサー率42% (3/7)
ディクショナリ管理ですと、フラグメンテーションが発生しても連結できる空きが発生するとSMONがコアレスしてくれます(5分毎)。 コアレスされる度にデータディクショナリを更新にいきますので、ビットマップで空きを認識しているローカル管理よりパフォーマンスが悪くなるというのが特徴で、9iからは更新量の多い業務データ領域はすべてローカル管理するよう推奨されています。 ご認識のとおりローカル管理領域に関して、空き領域を連結するにはコアレスを明示的に発行できないため、未使用領域(HWM以降)を解放するか、オブジェクトを圧縮(COMPRESS=y)したものをexp後、DROP&CREATEする、または表領域単位で再構築する以外に手はありません。 また、断片化を解消すべき対象となる基準は10gにて搭載されたAWR機能を利用していないと難しいと思います。 表領域の再構築には再構築対象の表領域と同一サイズの表領域をもう1つ用意する必要があり、あまりコスト的に現実的ではありませんし、影響も1オブジェクトというわけにはいきませんから大きいです。 未使用領域の解放コマンドを発行した場合、9iですとHWM以降の予約領域のみ開放されます。 これは、HWM以下の実際にデータが格納されていない領域に対しての解放ができないため、DROP&CREATEしてHWMをリセットすることになっているとお考えください。 10gからはコアレスの明示発行においてHWM以下のデータ未格納領域を開放してくれるコマンドが新たに追加されています。 ただし、内部的にOracle側でDROP&CREATEしてHWMをリセットしているだけですのでやっていることは同じですが、コマンド1発になったというだけです。時間はかわりません。 このセグメント縮小機能は、いくつか制限があり自動管理セグメントであり、行管理が有効化されていることが必須となります。 また、EMのセントラルアドバイザにて縮小可能なデータ量を見ることができます。(ただしAWR機能はEEの有償オプションだった気がします) 環境の特性に応じて、影響度の少ない方式を検討されてメンテナンスされてはいかがかと思います。 補足となりますが、セグメント単位は断片化の解消の効果は少なく、どちらかというと使用できる領域の解放といった意味合いが強いことを理解してください。
お礼
丁寧なご回答ありがとうございました。 読むだけですごく勉強になります。 実際にどうメンテナンスするかは未定ですが、参考にさせていただきたいと思います。
お礼
回答ありがとうございました。 表領域はデフォルトのautoallocateになっています。 このDBについては作成済、本番稼動中ですので適用できませんが 別の機会があれば、uniform指定も検討したいと思います。