• 締切済み

ORACLEのテーブル作成

ORACLE8iのテーブル作成で、 FREE、USEDEなどのパフォーマンスに関わるようなものの設定の適正値をどなたか教えて下さい。 (いまいち、何を指定してけばよいのかわからないのです。。。とほほ) デフォルトで充分なのか、または適正値の算出する方法などがあるのでしょうか? よろしくおお願いいたします。

みんなの回答

  • msystem
  • ベストアンサー率42% (79/186)
回答No.1

Free,Usede(Used?)は、PCT FREE,PCT USEDのことでしょうか? そうであれば、適正値を判断するのは難しくなります。 詳しいことは、Oracleのマニュアル(データベース、チューニング)を読んでいただくとして、簡単に説明すると、PCT FREEは、あとからUPDATEコマンドを使ってデータを更新するときに、データ量が増えることがありますよね。(たとえば、VARCHAR2の列で、空白だった列を50文字ぐらいの文字列にするなど)当然それだけの容量が新たに必要になるのですが、そのようなときのためのあらかじめとっておくための空きの容量です。具体的にはパーセントで示しますので、データベースの容量にPCT FREEをかければあらかじめあけておく量となります。もし、この容量が小さすぎてあふれた場合、1つの行がばらばらに格納され、パフォーマンスが悪くなることになります。なお、INSERTでばらばらに格納されることはありません。(まったくないわけではありませんが、INSERTでばらばらに格納されるならば、それは、ORACLE BLOCKのサイズが小さすぎるということで、PCT FREEが原因ではありません) PCT USEDは、一度作られた行を、DELETE文などで削除した場合、その部分に空きができますよね。当然その部分をそのままほっておくのはもったいないので、新しい行を追加するときには、使いたいのですが、すぐには使いません。INSERTするときにデータの容量がPCT USED(同じくパーセントで示します)以下になっていれば、空いた部分を使ってデータを追加します。 つまり、まっさらなデータベースにデータを追加するときは、残り容量がPCT FREEになるまではそのまま追加し、さらに追加するときはPCT FREEだけ残して別の部分を使ってデータを追加します。 UPDDATEするときは、以前は言っているデータより大きいデータで更新するときに、PCT FREEで確保した部分を使います。 DELETEするときは、そのまま削除するのですが、データ容量がPCT USED以下になるまで再利用しないということです。 では、どう設計するかですが、上記の原理を理解して設計するのですが、そのデータベースをどのように使うかで決まります。つまり、UPDATEが多くINSERT時はデータ量が少ないのであればPCT FREEは大きくしておく必要がありますが、UPDATEがほとんどない場合は、PCT FREEを小さくしたほうが、データベースが小さくなりますしパフォーマンスもよくなります。 PCT USEDも同じで、DELETE分が多いのであれば大きめにしてやると、データ容量は小さくなりますが、連続的に追加したデータがばらばらに追加される可能性がありますので、パフォーマンスが落ちるかもしれません。逆にDELETEがほとんどないのであれば、大きくとってやればデータ容量も小さくなりパフォーマンスもあがることになります。 つまり、どれだけ使い方を把握できるかになります。わからなければ取りあえずデフォルトで使い、運用やテストするときにデータベースの状態を分析し、適正な値を見つけるというのが、普通です。ただし、よほど特殊なことをしない限り(DWHやパフォーマンスが厳しいとき以外)気にしなくてもいいように思います。パフォーマンスに関しても、このあたりの値よりも索引やSQL文の書き方のほうが大きく影響します。 このあたりの講習会としては「ORACLE データベース管理 基礎編」をお勧めします。

関連するQ&A