- PR -

PKインデックスの再構築

投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-02-21 13:04
引用:

momoさんの書き込み (2007-02-20 13:29) より:
サイズの確認は
SELECT *
FROM dba_segments
WHERE SEGMENT_TYPE = 'INDEX'
ORDER BY OWNER,SEGMENT_NAME;


で全INDEXの情報を持ってきました。
これのBYTES列を見て確認しています。



で、その件のインデックスのセグメントサイズが、最初にリビルドやったら減らなくて、次にDROP&CREATEやったら減ったということで、理解は正しいですか?

STORAGEパラメータにも依存しそうですが、REBUILDの前に表領域のデフォルトSTORAGEパラメータ変更したり、CREATEの時にSTORAGEパラメータ指定したりしてないですか?
momo
常連さん
会議室デビュー日: 2006/11/06
投稿数: 35
投稿日時: 2007-02-21 15:31
引用:

カーニーさんの書き込み (2007-02-21 13:04) より:

で、その件のインデックスのセグメントサイズが、最初にリビルドやったら減らなくて、次にDROP&CREATEやったら減ったということで、理解は正しいですか?


そうです。

引用:

STORAGEパラメータにも依存しそうですが、REBUILDの前に表領域のデフォルトSTORAGEパラメータ変更したり、CREATEの時にSTORAGEパラメータ指定したりしてないですか?



INDEXのCREATE時にSTRAGEのパラメータを指定しています。

STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

こんな感じで。

STRAGEパラメータがREBUILD時のインデックスサイズに
影響してくることがあるということでしょうか?

あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2007-02-22 10:46
もし DROP & CREATE したいのであれば、

alter table <table_name> disable constraint <constraint_name>;

alter table <table_name> enable constraint <constraint_name>;

これで PK に付随した索引が再作成されます。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-02-26 10:46
引用:

momoさんの書き込み (2007-02-21 15:31) より:
引用:

STORAGEパラメータにも依存しそうですが、REBUILDの前に表領域のデフォルトSTORAGEパラメータ変更したり、CREATEの時にSTORAGEパラメータ指定したりしてないですか?



INDEXのCREATE時にSTRAGEのパラメータを指定しています。

STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

こんな感じで。

STRAGEパラメータがREBUILD時のインデックスサイズに
影響してくることがあるということでしょうか?





dba_segmentsでサイズの確認をしているのですよね。これは「各オブジェクトに割り当てられている領域の大きさ」を意味します。割り当てられた領域のうち、どれくらいが実際に使用されているか、は分かりません。
STORAGE句は領域割り当てのためのものですので、前回と今回で異なるSTORAGE句を指定していないか? というのが、私の疑問でした。
特に、リビルド時に明示的にSTORAGE句を指定するケースは少ないと思いますので、気づかないうちにDROP&CREATEのときと異なるSTORAGE句を使っていやしないか? と思いました。
momo
常連さん
会議室デビュー日: 2006/11/06
投稿数: 35
投稿日時: 2007-02-26 11:10
引用:

あんとれさんの書き込み (2007-02-22 10:46) より:
もし DROP & CREATE したいのであれば、

alter table <table_name> disable constraint <constraint_name>;

alter table <table_name> enable constraint <constraint_name>;

これで PK に付随した索引が再作成されます。




ありがとうございます。
無事PKの再作成ができました。
割当領域も縮めることができました。
momo
常連さん
会議室デビュー日: 2006/11/06
投稿数: 35
投稿日時: 2007-02-26 11:16
引用:

カーニーさんの書き込み (2007-02-26 10:46) より:

dba_segmentsでサイズの確認をしているのですよね。これは「各オブジェクトに割り当てられている領域の大きさ」を意味します。割り当てられた領域のうち、どれくらいが実際に使用されているか、は分かりません。
STORAGE句は領域割り当てのためのものですので、前回と今回で異なるSTORAGE句を指定していないか? というのが、私の疑問でした。
特に、リビルド時に明示的にSTORAGE句を指定するケースは少ないと思いますので、気づかないうちにDROP&CREATEのときと異なるSTORAGE句を使っていやしないか? と思いました。



なるほど、知識不足ですいません。
リビルドの目的は割当領域の縮小(断片化?の縮小)ですが、
リビルド時には特にSTRAGE句は指定していません。
割当領域を縮小するためにはCREATE時と
同じSTRAGEパラメータを与えてやる必要が
あるということですかね?
もうちょっと調べてみます。
ありがとうございました。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-02-26 11:47
引用:

momoさんの書き込み (2007-02-26 11:16) より:
割当領域を縮小するためにはCREATE時と
同じSTRAGEパラメータを与えてやる必要が
あるということですかね?



そうではなくて、「適切なSTORAGE句を指定して下さい」ということです。不相応に大きなINITIALは無駄ですから。
データ量やキー長によって適切なSTORAGE句はインデックスごとに異なります。
momo
常連さん
会議室デビュー日: 2006/11/06
投稿数: 35
投稿日時: 2007-02-26 14:52
引用:

カーニーさんの書き込み (2007-02-26 11:47) より:

そうではなくて、「適切なSTORAGE句を指定して下さい」ということです。不相応に大きなINITIALは無駄ですから。
データ量やキー長によって適切なSTORAGE句はインデックスごとに異なります。



増加したデータ量に合わせて適切なINITIALを再計算しリビルド時に
STRAGE句として指定するということですか?
ということはインデックスごとに適切な値を算出する
必要があるということですね。
インデックスがかなり大量に存在するので結構大きなタスクになりそうですね。

ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)