ガード私は日付の間に月単位のレポートを提供する次のOracle SQLクエリーを持っています.Nov月間は基本的には01novから30novの間の値の合計が必要です。 照会されているテーブルは別のデータベースに存在し、dblinkを使用してアクセスされています。 DT列のタイプはNUMBERです(20101201以前)。Oracle Sql dblinkを使用して結果を返すクエリー
SELECT /*+ PARALLEL (A 8) */ /*+ DRIVING_STATE(A) */
TO_CHAR(TRUNC(TRUNC(SYSDATE,'MM')- 1,'MM'),'MONYYYY') "MONTH",
TYPE AS "TYPE", COLUMN, COUNT (DISTINCT A) AS "A_COUNT",
COUNT (COLUMN) AS NO_OF_COLS, SUM (DURATION) AS "SUM_DURATION",
SUM (COST) AS "COST" FROM **[email protected]_PROD A**
WHERE DT >= TO_NUMBER(TO_CHAR(add_months(SYSDATE,-1),'YYYYMM"01"'))
AND DT < TO_NUMBER(TO_CHAR(SYSDATE,'YYYYMM"01"'))
GROUP BY TYPE, COLUMN
クエリの実行に1日かかり、完了していません。 dblinkで私のDBAに提案することができる最適化、またはクエリで実行できるチューニング、または同じものを書き直すことができれば、私に親切にお勧めします。テーブルの上に
UPDATES
テーブルは、日付列、ほぼ10億レコードにpartiontionedれます。私の下
はが
**Plan**
SELECT STATEMENT REMOTE ALL_ROWSCost: 1,208,299 Bytes: 34,760 Cardinality: 790
12 PX COORDINATOR
11 PX SEND QC (RANDOM) SYS.:TQ10002 Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
10 SORT GROUP BY Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
9 PX RECEIVE Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
8 PX SEND HASH SYS.:TQ10001 Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
7 SORT GROUP BY Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
6 PX RECEIVE Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
5 PX SEND HASH SYS.:TQ10000 Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
4 SORT GROUP BY Cost: 1,208,299 Bytes: 34,760 Cardinality: 790
3 FILTER
2 PX BLOCK ITERATOR Cost: 1,203,067 Bytes: 15,066,833,144 Cardinality: 342,428,026 Partition #: 11 Partitions accessed #1 - #5
1 TABLE ACCESS FULL TABLE CDRR.FRD_CDF_DATA_INTL_IN_P Cost: 1,203,067 Bytes: 15,066,833,144 Cardinality: 342,428,026 Partition #: 11
私は今日をするつもりです以下のものは、任意の追加のヒントが参考になるTOADからPLANをEXPLAIN与えています。
- 私は、最適な 実行計画を与える可能性がある、このテーブルのtablewise統計を収集するつもりです。
- パーティションに対してローカルインデックスが作成されているかどうかを確認します。
- > =と<の代わりにBETWEENを使用します。
興味があるだけで
を、どのくらいの時間が直接、リモート・データベース上で実行するために時間がかかりますか?クエリー自体が単に長い時間がかかっている場合は、DB Linkが赤字になっている可能性があります。 –
億行!それは長い時間がかかるのも不思議ではありません! –