Oracle8.0.5を使っています。
Analyzeを定期的に実行しているのですが、データ量が多くなってしまい、時間が掛かっています。
現在はCOMPUTEで週1回くらい実行しています。

Analyzeを月1回に変更するとパフォーマンスが低下したりしますか?
Oralceマスターの皆様、よろしくお願いします。

A 回答 (1件)

どういう理由でAnalyzeコマンドを発行していますか。



"Analyze ... compute statistics;"
を実行すると正確な情報が取得できますが、非常に時間がかかります。

もし正確さをそれ程必要としないのならば、
"Analyze ... estimate statistics;"
を実行してみてください。すぐに終わりますよ。

この回答への補足

ご返答有難うございます。
この統計情報は何の目的で取られるのでしょうか?
Oracleのパフォーマンス向上と聞いたことがあるのですが。
compute → estimate に変更することでパフォーマンスに影響でることなどはないのでしょうか?

もし、estimateにする場合、走査割合はどのくらいを設定すべきでしょうか?
Oracleについてほとんど知識がありませんので、
質問ばかりで恐縮ですが、よろしくお願い致します。

補足日時:2002/01/15 13:17
    • good
    • 0

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q索引の再構築をすべき?

とあるプロジェクトに放り込まれた新人SEです。
当該PJでは、客先にDBを構築して納入しているのですが、最近動作が遅くなってきたというクレームを耳にしました。調べてみると、特定のテーブルのSelect処理に時間がかかっているようです。問題のテーブルは、毎日数十万件のデータがInsertされ、一定の保持期限より古いデータは毎日削除されます。
問題はここからで、索引は設定されていますが、それをメンテしているという話を聞かないのです。
ちなみに、日付に対応するパーティションがあり、表・索引ともにパーティションで管理されています。毎日深夜に一番古いパーティションを削除し、翌日分のパーティションを新規作成するデーモンが動きます。
OracleSilver挑戦中の頭で一生懸命考えたのですが、納入から時間が経っているので索引が凄いことになっているのでは・・・という考えと、毎日新しいパーティションが生成されてるから大丈夫なのでは・・・という根拠の無い考えが渦巻いています。
アドバイス、お願いできますでしょうか。

Aベストアンサー

>CBOでは実行計画の最適化には統計情報が使われるのですか・・・!
>ということは、定期的にANALYZEしないとボケた実行計画を選択してしまう、ということですか。
>(ちなみにCBO or RBOは少し調べて理解したのですが、どこかで明示されているんでしょうか?)

CBOは、原則として、統計情報が必要です。
統計情報にあるテーブル/インデックスの特性と実態が異なるようなケースでは、
統計情報が悪さをして、まともな実行計画が立案できません。
なので、テーブルの登録内容が大きく変わる場合は、統計情報の更新を行う必要が
あります。
ただし、統計情報が一度も採取されていないテーブルやインデックスについては、
CBOは、類推して、実行計画を算定します。
これが偶々良い方向で実行計画に作用する場合も無いとは限りません。
少なくとも、大嘘付きの統計情報を使うくらいなら、ない方がましかもしれません。


現在どのオプティマイザを使っているかは、初期化パラメータに
指定があるはずです。(デフォルトはCHOOSE)
特定のSQLのみルールベースにしたり、コストベースオプティマイザの種類を変更したり
というのは、オプティマイザヒントで行えるので、統計情報が信頼できず、
統計情報の更新タイミングが持てないような運用の場合、ヒントで切り抜けるのが
ラクな解決法だと思います。
少なくとも、他への影響がないので。

>CBOでは実行計画の最適化には統計情報が使われるのですか・・・!
>ということは、定期的にANALYZEしないとボケた実行計画を選択してしまう、ということですか。
>(ちなみにCBO or RBOは少し調べて理解したのですが、どこかで明示されているんでしょうか?)

CBOは、原則として、統計情報が必要です。
統計情報にあるテーブル/インデックスの特性と実態が異なるようなケースでは、
統計情報が悪さをして、まともな実行計画が立案できません。
なので、テーブルの登録内容が大きく変わる場合は、統計情...続きを読む

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。


人気Q&Aランキング