- - PR -
トレースからどのようにチューニングをすれば。。。
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-03-27 07:34
お世話になっております。
OS:linux turbo 6.5 DB:Oracle 8.1.7 selectに多大な時間を要しています。 トレースを取ったのですが、どのようにチューニングすれば良いか分かりません。 disk と query の表示の関係も分かりません。 ブロックバッファサイズなどを大きくしてみましたが、ダメでした。 下記はトレース内容です。 どなたか助けて下さい!! SELECT DISTINCT T_I_ORDER.PAT_ID, T_I_ORDER.ORDER_NO, T_I_ORDER.ORDER_IN_DAY, T_I_ORDER.SHINRYO_COD, T_I_ORDER.IRAI_DOCTOR_NO, T_I_ORDER.BUNSHO_HANN_SUU, T_I_ORDER.ORDER_KBN, T_I_ORDER.KEI_SHUBETSU, T_I_ORDER.JISSHI_DAY, T_I_ORDER.DENPYO_COD, T_I_ORDER.VALID_KBN, T_I_ORDER.STATUS, T_I_ORDER.FKY_KAISHI, T_I_ORDER.FKY_SHURYO, T_I_ORDER.CHUSHI_KANREN_ORDER, T_I_ORDER.CHUSHI_KANREN_ORDER_INDATE FROM T_I_ORDER WHERE (((T_I_ORDER.ORDER_NO = 4070834) AND (T_I_ORDER.VALID_KBN = 0)) OR ((T_I_ORDER.PAT_ID = 9990089) AND (T_I_ORDER.VALID_KBN = 0) AND (((T_I_ORDER.DENBUN_SHUBETSU = 'II') AND (T_I_ORDER.NJI_CHECK_FLG = '1') AND (T_I_ORDER.KANREN_ORDER <> 4070834)) OR ((T_I_ORDER.DENBUN_SHUBETSU <> 'II') AND (T_I_ORDER.NJI_CHECK_FLG = '1')))) AND (T_I_ORDER.FKY_SHURYO >= '2004/12/26 00:00:00')) ORDER BY T_I_ORDER.ORDER_IN_DAY desc call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 703980 1324590 0 11 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 703980 1324590 0 11 Misses in library cache during parse: 1 Optimizer goal: CHOOSE Parsing user id: 38 (JASMINE) Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: CHOOSE 0 SORT (ORDER BY) 0 SORT (UNIQUE) 0 CONCATENATION 0 TABLE ACCESS (BY INDEX ROWID) OF 'T_I_ORDER' 0 INDEX (RANGE SCAN) OF 'T_I_ORDER_IDX13' (NON-UNIQUE) 0 TABLE ACCESS (BY INDEX ROWID) OF 'T_I_ORDER' 0 AND-EQUAL 0 INDEX (RANGE SCAN) OF 'T_I_ORDER_IDX12' (NON-UNIQUE) 0 INDEX (RANGE SCAN) OF 'T_I_ORDER_IDX13' (NON-UNIQUE) 0 TABLE ACCESS (BY INDEX ROWID) OF 'T_I_ORDER' 0 INDEX (RANGE SCAN) OF 'T_I_ORDER_IDX4' (NON-UNIQUE) [ メッセージ編集済み 編集者: なんぺい 編集日時 2005-03-27 07:51 ] | ||||
|
投稿日時: 2005-03-27 14:27
おふぃすこまです。
その状態でトレースを取るとは無謀ですね(^^; とりあえずOracleのリファレンスを見ましょう。(と言いつつ回答はします) disk = ディスクI/Oが発生したブロック数 query = メモリ上にあったブロック数 ただ、幾つか気になる点が、 1.Fetch のcpu時間、elapsed時間がゼロ 2.トレース実行時の実行計画(Row Source Operation)が出力されていない。 1.「select に多大な時間を要してる」のにゼロ秒って事ないですね・・・? 2は、どのフェーズでどのくらい時間を要したかが分かります。 これが無いと、どこをチューニングしてよいか不明です。 (Oracle8iは9iより情報少ないのかな??) それから、トレースを取る前にまずSQL自体のチューニングなのですが、 DISTINCTは無条件でSORTが実行されますので、使用控えた方がいいですよ。 それと、インデックスについての見直しも必要かと。 (・・・なんだか回答になってないかも) [ メッセージ編集済み 編集者: おふぃすこま 編集日時 2005-03-27 17:08 ] | ||||
1
