- PR -

トレースからどのようにチューニングをすれば。。。

1
投稿者投稿内容
なんぺい
常連さん
会議室デビュー日: 2003/09/26
投稿数: 26
投稿日時: 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/01/24
投稿数: 22
投稿日時: 2005-03-27 14:27
おふぃすこまです。

引用:

トレースを取ったのですが、どのようにチューニングすれば良いか分かりません。
disk と query の表示の関係も分かりません。


その状態でトレースを取るとは無謀ですね(^^;
とりあえず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

スキルアップ/キャリアアップ(JOB@IT)