- ベストアンサー
エクステント数
Oracle10gにて表領域Aを1GBで作りました。 そのあとにテーブルBを表領域AにStorageのInitialを10MB、 テーブルBを同じく表領域Aに30MBでつくりました。 そしてテーブルB,テーブルCにそれぞれ1MBほどのデータをいれました。 テーブルB,テーブルCのセグメントのエクステント数は1になるはずなの ですが、なぜかエクステント数が50とか30になってしまいます。 Storage句に大きめのInitialをCreate Table文でしていするだけでは Initialが1にならないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1個目のテーブルも2個目のテーブルも同様のStorage句の 記述にしましたか? 前回も書いたようにinitialを1Mとすれば1Mに達するまで 64Kのエクステントが複数割り当てられます。 まずはデータなどを一切挿入しないでテーブルをStorage句なしで 作成してみてください。全てのテーブルがエクステント数は1になるはずです。 逆に全てのテーブルでStorage句のintialを1Mで指定すれば全て エクステント数は16になると思います。 エクステント管理は自動にするべきです。手動にしてもほぼいいことは 無いと思っていいでしょう。また、エクステント数を減らそうとする こともしなくてよいことです。1000だろうが10000だろうがほぼ 気にする必要はありません。
その他の回答 (2)
- whiteline507
- ベストアンサー率63% (47/74)
前回の回答に一部誤りがありましたので。 ローカル管理表領域でかつエクステント管理がAUTOになっていれば (10gでは何もオプションをつけないとデフォルトそうなります) initialでエクステントサイズを指定しても指定サイズの1つの エクステントとはならず、Oracleが自動的に作成するエクステントサイズ数個でユーザ側が指定したinitialのサイズを少し上回るまで エクステントが確保されます。 最初の1MBに達するまでは64Kで作成され(つまり16個) その後は1MBづつ作成されていくため、例えば30Mでinitialを指定すると 64Kのエクステント16個と1Mのエクステント29個などといった形 で作成されるかと思います。
- whiteline507
- ベストアンサー率63% (47/74)
select bytes from dba_segments where owner = 'ユーザ名' and segment_name = 'テーブル名'; と打ってみて各エクステントのサイズを確認してみて下さい。 65536のサイズのものが16個くらい無いでしょうか? 10gではローカル管理表領域がデフォルトになっていて initialなどを指定しなければ自動でエクステントサイズがOracleによって決められます。 ただし質問者さんの言うようにinitialをちゃんと指定したのであれば たしかそちらが有効になるはずなのでエクステント数が50とかに なることは無いですね。 まずは上記SQL文で各エクステントのサイズを確認することからやってみてください。
補足
たしかに64Kのエクステントがありました。 ただ不思議なのは1表領域1テーブルの構成にすると エクステントは1つしかできません。 1表領域に複数のテーブルを作るとエクステントが 多くなってしまいます。 エクステント管理は手動にすべきなのでしょうか?