いつもお世話になってます。
他プロジェクトのまた聞きなのですが。。。。
oracle9iからoracle10gにバージョンアップを行いました。
数日後、数千万件にバインド変数でアクセスするSQLがインデックスを使用せず、フルアクセスしてしまい、トラブルとなりました。
この事象はCBOのデメリットなので、納得なのですが。
1.トラブル発生前は該当SQLはINDEX RANGE SCANを使用していた。
2.トラブル対処として、ヒント句を使用すると、INDEX FULL SCANになってしまい、結果として遅くなってしまった。
前置きが長くなりましたが、ヒント句を使用してINDEX FULL SCANになってしまった場合、明示的にINDEX RANGE SCANを適用させる方法はあるのでしょうか?
ネット検索してもそのような方法を見つけることができませんでした。
No.3ベストアンサー
- 回答日時:
> おそらくバインドピークのデメリットが顕著にでてしまった
値の偏った列ということですね。
> 表名+インデックス名を書いてました
/*+ index(table_name index_name) */ですね。
以下はマニュアルの抜粋ですが
別名の件はご存知でしたか?
--------------------------------------------------
アクセスする表は、文に指定する場合と同じように正確
に指定してください。文が表の別名を使用している場合、
表の名前ではなく、表の別名をヒントで使用する必要が
あります。スキーマ名が文中にある場合は、ヒント内の
表名にそのスキーマ名を入れないでください。
--------------------------------------------------
http://otndnld.oracle.co.jp/document/products/or …
SQL、ヒント、統計情報の取得に問題がないのであれば、
INDEX RANGE SCANよりINDEX FULL SCANがコストが低いと
オプティマイザが判断したということでしょうね。
# バインド変数をやめてリテラルで指定するとか……
> タイトルをつけないで投稿してしまい
タイトルとつけないとこうなるんですか。
(知らなかった……)
勉強になります(笑)。
# 現場にいれば、あれこれとできるんですけどね。
# もどかしいものですね(笑)。
No.2
- 回答日時:
NO_INDEX_FFS ヒントも指定することで INDEX FULL SCAN は回避できるで
しょう。でもその前に、索引作成後に統計情報はちゃんと取得しましたか?
この回答への補足
回答ありがとうございます。
NO_INDEX_FFSだと、Fast Full Index scansだけが回避されるのかと思ってました。
INDEX FULL SCANも回避できるのですね。
他プロジェクトなので、簡単には試せませんが、自プロジェクトで環境を作って試してみたいと思います。
>でもその前に、索引作成後に統計情報はちゃんと取得しましたか
ORACLEデフォルトと22時で自動取得しているそうです。
10g移行後数日間や、トラブル当日の午前中は、それなりに動いていた(性能がでていた)そうなので、バインドピークのハードバースで
ハズレをひいたのか? と想像しています。
No.1
- 回答日時:
> トラブル発生前は該当SQLはINDEX RANGE SCANを使用していた
10gにバージョンアップした後、
数日間はINDEX RANGE SCANだったということですね?
> トラブル対処として、ヒント句を使用すると、INDEX FULL SCANになってしまい
ヒントの書き方は間違っていないのですね?
# 質問の内容がわかるようなタイトルをつけていただく
# わけにはいかないですか?
この回答への補足
回答ありがとうございます。
>10gにバージョンアップした後、
>数日間はINDEX RANGE SCANだったということですね?
はい。
INDEX RANGE SCANだったものが、ある瞬間からINDEX FULL SCANになったそうです。
おそらくバインドピークのデメリットが顕著にでてしまったと想像してます。
>ヒントの書き方は間違っていないのですね?
はい。
表名+インデックス名を書いてました。
# 質問の内容がわかるようなタイトルをつけていただく
# わけにはいかないですか?
タイトルをつけないで投稿してしまい、1行目がタイトルになってしまいました。
今後、気をつけたいとおもいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- その他(IT・Webサービス) Windows Defender Scheuled Scanの表示方法を教えて下さい。 仕事でWin 1 2022/07/25 17:45
- Excel(エクセル) INDEX関数とMATCH関数を使用し値を返す数式についてです 2 2022/04/20 13:40
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- Visual Basic(VBA) RemoveDuplicatesメソッドについて教えてください。 シート1にシート2から値をもってく 1 2023/02/28 22:43
- WordPress(ワードプレス) httpからhttpsへのリダイレクト設定について 2 2022/04/17 09:49
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- 法学 不正アクセス禁止法の扱いについて 4 2022/03/23 18:13
- マルウェア・コンピュータウイルス Norton Security Scanのアンインストール 2 2023/01/03 13:16
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
likeとsubstrの使いわけについて
-
キャッシュを使わずにSELECTを...
-
oracleのanalyzeと処理時間につ...
-
WHERE句の実行順序
-
WHERE句はJOIN結合前結合後どち...
-
アナライズでほとんどの処理が...
-
ヒント句が無効になります
-
問題解決のストーリーにて PDCA...
-
【チューニング】インデックス...
-
エクセルVBAでUserFormを起動し...
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
Statement ignored というエラー
-
VBA プロシージャの名前の取得
-
今日の日付が入った行のデータ...
-
ODBCリンクの際にACCESSでは読...
-
SQLで部分的にGROUP BYしたいとき
-
Accessの数値から時間に変換す...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQL*Loaderでのsysdate使用
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
likeとsubstrの使いわけについて
-
WHERE句の実行順序
-
Like文の速度について教えてく...
-
WHERE句はJOIN結合前結合後どち...
-
ヒント句が無効になります
-
JOINの時のONとWHEREの違いにつ...
-
あいまい検索のパフォーマンス...
-
アナライズでほとんどの処理が...
-
SQL ORDER BYにおける条件について
-
800万件のテーブル読み込み...
-
問題解決のストーリーにて PDCA...
-
実行計画HASH JOIN RIGHT OUTER
-
oracleのanalyzeと処理時間につ...
-
PDCAを回すって?
-
【チューニング】インデックス...
-
Oracleで検索すると、フリーズ...
-
Oracle 実行計画、統計情報の見方
-
OEMで負荷の少ないSQLの実行計...
-
データ抽出の速度について
おすすめ情報