本番環境ではパフォーマンス上の問題があります。 Mv参照プログラムは、ほぼ13〜14時間長く実行されています。パフォーマンスチューニングのヒント-Plsql/sql-Database
MV参照プログラムで、MVを参照しようとしています。その中でMVの1つは長い間実行されています。
以下は、長い間実行されているMVスクリプトです。
出荷表には何百万ものレコードが含まれており、上記のクエリはデータの60〜70%を抽出しようとしています。私たちは、データの読み込みが理由であると考えています。 上記のスクリプトのパフォーマンスを向上させようとしています。データを制限する日付フィルタを追加しました。
SELECT rcvt.transaction_id,
rsh.shipment_num,
rsh.shipped_date,
rsh.expected_receipt_date,
(select rcvt1.transaction_date from rcv_transactions rcvt1
where rcvt1.po_line_id = rcvt.po_line_id
AND rcvt1.transaction_type = 'RETURN TO VENDOR'
and rcvt1.parent_transaction_id=rcvt.transaction_id
)transaction_date
FROM rcv_transactions rcvt,
rcv_shipment_headers rsh,
rcv_shipment_lines rsl
WHERE 1 =1
AND rcvt.shipment_header_id =rsl.shipment_header_id
AND rcvt.shipment_line_id =rsl.shipment_line_id
AND rsl.shipment_header_id =rsh.shipment_header_id
AND rcvt.transaction_type = 'RECEIVE'
AND TRUNC(rsh.creation_date) >= NVL(TRUNC((sysdate - profile_value),'MM'),TRUNC(rsh.creation_date));
1年間のプロファイルでは、改善が見られますが、2年間は前回のクエリより悪化しています。
パフォーマンスを向上させるためのご提案です。
PLSのは、私は定期的に外にスカラー副問合せが参加することを引き出すだろう
さて、explain plan、tkprof、ADDMレポートのような基本的なプロファイリングツールを実行しましたか?ここでは、システム、環境、および多くの他の多くの詳細を深く理解することなく、いくつかのクエリを調べることで、パフォーマンスの問題を診断することは誰もいません。ごめんなさい。 – OldProgrammer
インクリメンタルリフレッシュを行っていますか?または完全リフレッシュ?第2のアプローチは、非決定的な関数呼び出し( 'sysdate')を参照しているので完全にリフレッシュする必要があります。ソーステーブルのMVログに応じて増分リフレッシュを実行する可能性があります(単に外部結合を行うか、または単にそれを分解するのではなく、インラインサブクエリについてはわかりません)。通常、MVはデータの集約やリモートデータベースからのデータの複製に使用されますが、データベースリンクや集約関数は表示されません。 –
@JustinCaveは更新してくれてありがとう。私たちは完全リフレッシュではなく、完全リフレッシュを行っています理由は毎日平均10kのレコードがベーステーブルに挿入され、高速参照を使用するとシステムパフォーマンスが低下します。 –