電子書籍の厳選無料作品が豊富!

こんにちは
Oracleサーバ負荷試験のため、下記2つの試験をやりました。
1、Commitなしで500万件のレコードをDBにINSERTしました。
2、Commitありで400万件のレコードをDBにINSERTしました。
その後、Delete from TABLEで中身を削除しましたが、
そのテーブルのSELECTがすごく重くなっているのは変わりませんでした。

心当たりがある方、解決法を教えていただけませんか?

ちなみに、関係あるかどうか分かりませんが、そのテーブルの初期化サイズが7100KBぐらいなっています。ほかのテーブルは64KBぐらいですが、もしそれが原因だったら、最適化する方法ありますでしょうか?
(できれば、テーブルの削除・再作成を避けたいです。)

A 回答 (1件)

こんにちわ。



> テーブルのSELECTがすごく重く・・・
Oracle は最終レコードと言う管理を行っていないため、
全件検索時は過去にデータが格納されていた所 (High Water Mark)
まで検索が行われます。
データ削除前に900万件のレコードが入っていたため、たとえ全レコード
を削除しても、900万件分の無効ブロックが読み込まれます。

> 心当たりがある方、解決法を教えていただけませんか?
Delete ではなく、Truncate 文を使うと空きブロックの解放も
行われるので、性能が改善する筈です。
但し、Delete 文と違って条件を指定しての削除はできませんので
注意して下さい。

どうしてもDelete で削除した後に空きブロックの解放を行う
必要があるのであれば、「Alter table 表名 move」で
解放可能です。
但し、Alter table を行うと、該当表に定義されている索引が
無効になりますので、その後
「Alter index 索引名 rebuild」で索引も再作成して下さい。
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。
Truncateですね^^

やってみます^^

お礼日時:2006/12/06 22:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す