- 締切済み
Oracleでデータ取得処理を高速化するには?
DBサーバー(Oracle10g)でCPU使用率が100%近くとなり、システムを調べたところ、どのSQL文が遅いかを特定する事はできました。 SQL文の見直しはするとして、それでも改善できない場合、高速化にはどのような手立てをするものなのでしょうか? 自分の考えでは↓を考えています。 ・SQL見直し ・VIEWを使う あらかじめ特定のテーブルを結合しておけば速くなる?と思っています ・ストアドプロシージャーにする すいませんがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 3rd_001
- ベストアンサー率66% (115/174)
流れ的には以下です。 全体に影響のないところから進めていった方がよいでしょう。 ----- 調査 (1)ADDM or STATSPACKで現状を確認。 (2)該当SQLのトレースを取り実行計画を調べる。 ----- 対応1 (3)該当SQLを書き換える。 無駄な結合を省く、索引を使用するSQLに修正するなど。 ヒント句などを埋め込む。 (4)統計情報を取得する。 アナライズを行い、最新の統計情報を使用する。 ----- 対応2 ※他の影響が大きい。 (5)物理構造を変更する。 索引の追加やテーブル構造変更。 ※該当SQL以外も参照している可能性があるので注意。 (6)初期化パラメーターを調整する。 (1)と(2)で調査した結果を元にチューニング可能なパラメータを変更 ※該当SQL以外にも影響があるので変更には注意。 ※自動統計収集など自動系の処理を見直す。 (7)ハードを増強する。 最終手段。メモリ・CPUの増設、高速ハードディスクへの変更など 順番は適宜、入れ替えてください。 個別SQLが速くなっるかどうかはテーブル定義、実SQLと実行計画、データ量などの情報がないと判断できません。
- entree
- ベストアンサー率55% (405/735)
SQL を見直しても改善しない場合、 statspack を取得されてみてはいかがでしょうか。どこが問題になっているか比較的容易に特定できるようになります。 SQL なのか、バッファキャッシュにヒットせず、ディスク読み込みが多発しているのか、CPU 処理が多すぎるのか、メモリが足りないのか、I/O 負荷が高いのか、全体的の遅いのか特定のSQL だけが遅いのか・・・などなど。 > ・SQL見直し SQL を見直しても改善しない場合と言っているのに「SQL 見直し」はおかし いですよね。やるのであれば、ヒント句の使用やアウトラインによる、最適 な実行計画の固定化でしょう。バージョンが上がるにつれてオプティマイ ザも随分賢くはなってきていますが、完全ではありません。 > ・VIEWを使う > あらかじめ特定のテーブルを結合しておけば速くなる?と思っています VIEW じゃなくて MVIEW (マテリアライズドビュー) ですよね? 普通の VIEW にしただけでは同じか劣化の要因になります。 > ・ストアドプロシージャーにする クライアントとのネットワーク処理やAPサーバの負荷に問題があるのであれば効果が上がるでしょうが、そうでなければ逆効果になることもあるので注意。PL/SQL は元々そんなに高速ではないし、DBサーバのリソースを食うことになるので。
データ構造がわからないので適切な回答が出来ません インデックスの見直し マテライズドビューの使用 CPUの増強 RAC化 データの配置確認 オンメモリDBの検討 いくらでも考えることはありますね
お礼
あいまいな質問に答えていただきありがとうございます。 あまり聞きなれない言葉で詳細わからないものもありますが調べて検討してみます。