Home » RDBMS Server » Performance Tuning » Query does not error, but does not come back with a result set (as if it's in an endless loop) (Oracle 11G running on UNIX AIX 6.1 O/S)
Query does not error, but does not come back with a result set (as if it's in an endless loop) [message #642508] |
Sun, 13 September 2015 17:15 |
|
aft5425@anthem.com
Messages: 11 Registered: September 2015
|
Junior Member |
|
|
Hi, I've searched for answers on this forum, as well as google and I've tried a few suggestions, but nothing has worked so far. I'm running what I think is a simple nested subquery.
Issue is that the query never stops. I let it run for more than 15 minutes, but it still doesn't come back. When I run everything except the outermost query, I get a result set in less than 2 seconds (I have a hardcoded grup in the innermost query to limit the data). But adding the outermost query causes it to never stop!
Starting with the innermost query...
The innermost query uses D_ESTABLISH which is the most recent established date, where the D_UPDT is greater than 8/31/13.
The 2nd subquery gives me the specific group where the D_RELEASE date is not null.
The 3rd subquery gives me the I_CUST with the lowest number for that I_GRUP (1 to many -- I_GRUP to I_CUST)
Up to here, it's fine and runs fast
The 4th outermost query simply takes the I_CUST from previous query and gives me
SELECT DISTINCT ACCT.I_CUST FROM SFDC_STAGING.STG_IND_SALI_PERSON_ACCNT ACCT
WHERE ACCT.I_CUST IN
(SELECT DISTINCT MIN(CUST.I_CUST)
FROM SFDC_STAGING.STG_IND_SALI_CUST CUST,
SFDC_STAGING.STG_IND_SALI_ADDR ADDR,
SFDC_STAGING.STG_IND_SALI_EMAIL EMAL,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE ACCT.I_CUST = CUST.I_CUST
AND CUST.I_CURR_GRUP = GRUP.I_GRUP
AND ADDR.I_GRUP = GRUP.I_GRUP
AND CUST.I_CUST = EMAL.I_CUST(+)
AND CUST.C_STAT = 'A' --ONLY GET ACTIVE CUSTOMERS
AND ADDR.C_STAT = 'A' --WITH A VALID ADDRESS
AND (EMAL.C_STAT = 'A' OR EMAL.C_STAT IS NULL) --AND ONLY IF THE EMAIL STATUS NOT INACTIVE
AND GRUP.I_GRUP IN
(SELECT DISTINCT(GRAG.I_GRUP)
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND GRAG.D_RELEASE IS NOT NULL --ONLY GET RECS WITH NO OWNERSHIP
AND GRAG.D_ESTABLISH IN
(SELECT DISTINCT MAX(GRAG.D_ESTABLISH) --GET REC WITH MOST RECENT ESTABLISHED DT
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831' --WHERE DATE GREATER THAN THIS DATE
AND GRAG.I_GRUP = 8722127 --FOR THIS SPECIFIC GROUP
GROUP BY GRAG.I_GRUP
)
AND GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831' --USE DATE HERE TOO OR ELSE IT WON'T WORK
)
GROUP BY GRUP.I_GRUP
)
Table definitions are here:
SFDC_STAGING.STG_IND_SALI_CUST CUST
i_cust INTEGER 10
i_curr_grup INTEGER 10
i_ssn VARCHAR2(9)
d_crea TIMESTAMP(6)
d_updt TIMESTAMP(6)
c_stat VARCHAR2(1)
n_prefix VARCHAR2(4)
n_first VARCHAR2(15)
n_mi VARCHAR2(1)
n_last VARCHAR2(24)
SFDC_STAGING.STG_IND_SALI_ADDR ADDR
i_addr INTEGER 10
i_grup INTEGER 10
d_crea DATE
d_updt DATE
c_stat VARCHAR2(1)
t_type VARCHAR2(10)
t_addr_1 VARCHAR2(30)
t_addr_2 VARCHAR2(30)
t_city VARCHAR2(24)
t_state VARCHAR2(2)
i_zipc VARCHAR2(11)
c_county VARCHAR2(30)
c_county_code VARCHAR2(5)
SFDC_STAGING.STG_IND_SALI_EMAIL EMAL
i_email INTEGER 10
i_cust INTEGER 10
t_e_mail VARCHAR 120
c_stat VARCHAR2(1)
d_crea DATE
d_updt TIMESTAMP(6)
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
i_grup INTEGER 10
d_crea DATE
d_updt TIMESTAMP(6)
c_stat VARCHAR2(1)
c_ownr_type VARCHAR2(1)
c_market_org VARCHAR2(12)
t_suppress VARCHAR2(10)
t_language VARCHAR2(2)
SFDC_STAGING.STG_IND_SALI_GRAG GRAG
i_grup INTEGER 10
i_agnt VARCHAR2(12)
d_crea DATE
d_updt DATE
d_establish DATE
d_release DATE
d_sked_release DATE
SFDC_STAGING.STG_IND_SALI_PERSON_ACCNT ACCT
I_CUST INTEGER
N_PREFIX VARCHAR2(10)
N_FIRST VARCHAR2(20)
N_LAST VARCHAR2(30)
T_EVENING_PHONE VARCHAR2(20)
T_DAY_PHONE VARCHAR2(20)
D_BIRTH DATE
C_GEND CHAR (1)
P_ADDR_1 VARCHAR2(30)
P_ADDR_2 VARCHAR2(30)
P_CITY VARCHAR2(30)
P_STATE VARCHAR2(2)
P_ZIPC VARCHAR2 (15)
Please help. I think I have provided everything that is requested.
*BlackSwan added {code} tags. Please do so yourself in the future.
Please read and follow the forum guidelines, to enable us to help you:
OraFAQ Forum Guide
How to use {code} tags and make your code easier to read
[Updated on: Sun, 13 September 2015 17:23] by Moderator Report message to a moderator
|
|
|
|
Re: Query does not error, but does not come back with a result set (as if it's in an endless loop) [message #642510 is a reply to message #642509] |
Sun, 13 September 2015 17:41 |
|
aft5425@anthem.com
Messages: 11 Registered: September 2015
|
Junior Member |
|
|
Here is the explain plan. Please let me know if this is not what your are looking for:
Plan
SELECT STATEMENT ALL_ROWSCost: 18,524,592,650 Bytes: 19 Cardinality: 1
31 HASH UNIQUE Cost: 18,524,592,650 Bytes: 19 Cardinality: 1
30 HASH JOIN Cost: 18,524,592,649 Bytes: 19 Cardinality: 1
28 VIEW VIEW SYS.VW_NSO_1 Cost: 18,524,557,795 Bytes: 13 Cardinality: 1
27 HASH GROUP BY Cost: 18,524,557,795 Bytes: 81 Cardinality: 1
26 FILTER
20 HASH JOIN Cost: 223,169 Bytes: 60,864,372 Cardinality: 751,412
18 HASH JOIN Cost: 183,212 Bytes: 49,726,578 Cardinality: 681,186
16 FILTER
15 HASH JOIN OUTER Cost: 136,165 Bytes: 45,592,227 Cardinality: 680,481
13 HASH JOIN Cost: 121,127 Bytes: 42,362,472 Cardinality: 718,008
10 JOIN FILTER CREATE SYS.:BF0000 Cost: 60,466 Bytes: 27,924,750 Cardinality: 620,550
9 HASH JOIN Cost: 60,466 Bytes: 27,924,750 Cardinality: 620,550
6 JOIN FILTER CREATE SYS.:BF0001 Cost: 36,460 Bytes: 23,960,625 Cardinality: 614,375
5 HASH JOIN Cost: 36,460 Bytes: 23,960,625 Cardinality: 614,375
2 JOIN FILTER CREATE SYS.:BF0002 Cost: 14,591 Bytes: 8,026,618 Cardinality: 472,154
1 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_GRUP Cost: 14,591 Bytes: 8,026,618 Cardinality: 472,154
4 JOIN FILTER USE SYS.:BF0002 Cost: 10,452 Bytes: 146,868,392 Cardinality: 6,675,836
3 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_GRAG Cost: 10,452 Bytes: 146,868,392 Cardinality: 6,675,836
8 JOIN FILTER USE SYS.:BF0001 Cost: 14,435 Bytes: 56,658,528 Cardinality: 9,443,088
7 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_GRUP Cost: 14,435 Bytes: 56,658,528 Cardinality: 9,443,088
12 JOIN FILTER USE SYS.:BF0000 Cost: 45,632 Bytes: 151,443,782 Cardinality: 10,817,413
11 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_CUST Cost: 45,632 Bytes: 151,443,782 Cardinality: 10,817,413
14 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_EMAIL Cost: 8,068 Bytes: 38,333,432 Cardinality: 4,791,679
17 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_PERSON_ACCNT Cost: 34,823 Bytes: 67,807,746 Cardinality: 11,301,291
19 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_ADDR Cost: 27,410 Bytes: 82,503,528 Cardinality: 10,312,941
25 FILTER
24 SORT GROUP BY NOSORT Cost: 24,894 Bytes: 31 Cardinality: 1
23 HASH JOIN Cost: 24,894 Bytes: 31 Cardinality: 1
21 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_GRUP Cost: 14,459 Bytes: 17 Cardinality: 1
22 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_GRAG Cost: 10,435 Bytes: 14 Cardinality: 1
29 TABLE ACCESS STORAGE FULL TABLE SFDC_STAGING.STG_IND_SALI_PERSON_ACCNT Cost: 34,823 Bytes: 67,807,746 Cardinality: 11,301,291
|
|
|
|
Re: Query does not error, but does not come back with a result set (as if it's in an endless loop) [message #642512 is a reply to message #642511] |
Sun, 13 September 2015 19:48 |
|
aft5425@anthem.com
Messages: 11 Registered: September 2015
|
Junior Member |
|
|
Here is the output of the explain plan. I think I was able to get it this time. Please let me know if this is still not what you are looking for.
Plan hash value: 3210202793
-------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3 | 630 | | 1631K (1)| 05:26:18 |
| 1 | HASH UNIQUE | | 3 | 630 | | 1631K (1)| 05:26:18 |
|* 2 | HASH JOIN | | 3 | 630 | | 1631K (1)| 05:26:18 |
| 3 | NESTED LOOPS | | 1 | 188 | | 1631K (1)| 05:26:17 |
| 4 | NESTED LOOPS | | 1 | 188 | | 1631K (1)| 05:26:17 |
| 5 | NESTED LOOPS | | 1 | 175 | | 1631K (1)| 05:26:17 |
| 6 | NESTED LOOPS | | 1 | 169 | | 1631K (1)| 05:26:17 |
| 7 | NESTED LOOPS OUTER | | 1 | 157 | | 1631K (1)| 05:26:17 |
| 8 | NESTED LOOPS OUTER | | 1 | 129 | | 1631K (1)| 05:26:17 |
|* 9 | HASH JOIN | | 1 | 121 | | 1631K (1)| 05:26:17 |
| 10 | VIEW | VW_NSO_1 | 1 | 13 | | 1596K (1)| 05:19:17 |
| 11 | HASH GROUP BY | | 1 | 75 | 60M| 1596K (1)| 05:19:17 |
|* 12 | FILTER | | | | | | |
| 13 | NESTED LOOPS | | 750K| 53M| | 97353 (1)| 00:19:29 |
| 14 | NESTED LOOPS | | 750K| 53M| | 97353 (1)| 00:19:29 |
|* 15 | FILTER | | | | | | |
|* 16 | HASH JOIN OUTER | | 680K| 43M| 48M| 76934 (1)| 00:15:24 |
| 17 | NESTED LOOPS | | 718K| 40M| | 61896 (1)| 00:12:23 |
| 18 | NESTED LOOPS | | 718K| 40M| | 61896 (1)| 00:12:23 |
|* 19 | HASH JOIN | | 620K| 26M| 29M| 43275 (1)| 00:08:40 |
| 20 | NESTED LOOPS | | 614K| 22M| | 33481 (1)| 00:06:42 |
| 21 | NESTED LOOPS | | 614K| 22M| | 33481 (1)| 00:06:42 |
|* 22 | TABLE ACCESS STORAGE FULL | STG_IND_SALI_GRUP | 472K| 7838K| | 14591 (2)| 00:02:56 |
|* 23 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK | 1 | | | 1 (0)| 00:00:01 |
|* 24 | TABLE ACCESS BY INDEX ROWID| STG_IND_SALI_GRAG | 1 | 22 | | 1 (0)| 00:00:01 |
| 25 | INDEX FULL SCAN | STG_IND_SALI_GRUP_PK | 9443K| 54M| | 223 (1)| 00:00:03 |
|* 26 | INDEX RANGE SCAN | STG_IND_SALI_CUST_PK2 | 1 | | | 1 (0)| 00:00:01 |
|* 27 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_CUST | 1 | 14 | | 1 (0)| 00:00:01 |
| 28 | TABLE ACCESS STORAGE FULL | STG_IND_SALI_EMAIL | 4791K| 36M| | 8068 (1)| 00:01:37 |
|* 29 | INDEX RANGE SCAN | STG_IND_SALI_ADDR_PK | 1 | | | 1 (0)| 00:00:01 |
|* 30 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_ADDR | 1 | 8 | | 1 (0)| 00:00:01 |
|* 31 | FILTER | | | | | | |
| 32 | SORT GROUP BY NOSORT | | 1 | 31 | | 2 (0)| 00:00:01 |
| 33 | MERGE JOIN CARTESIAN | | 1 | 31 | | 2 (0)| 00:00:01 |
|* 34 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_GRUP | 1 | 17 | | 1 (0)| 00:00:01 |
|* 35 | INDEX RANGE SCAN | STG_IND_SALI_GRUP_PK | 1 | | | 1 (0)| 00:00:01 |
| 36 | BUFFER SORT | | 1 | 14 | | 1 (0)| 00:00:01 |
| 37 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_GRAG | 1 | 14 | | 1 (0)| 00:00:01 |
|* 38 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK | 1 | | | 1 (0)| 00:00:01 |
| 39 | TABLE ACCESS STORAGE FULL | STG_IND_SALI_PERSON_ACCNT | 11M| 1163M| | 34987 (1)| 00:07:00 |
| 40 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_CUS2 | 1 | 8 | | 1 (0)| 00:00:01 |
|* 41 | INDEX UNIQUE SCAN | STG_IND_SALI_CUS2_PK | 1 | | | 1 (0)| 00:00:01 |
| 42 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_EMAIL | 1 | 28 | | 1 (0)| 00:00:01 |
|* 43 | INDEX RANGE SCAN | STG_IND_SALI_EMAIL_PK | 1 | | | 1 (0)| 00:00:01 |
|* 44 | INDEX RANGE SCAN | STG_IND_SALI_CUST_PK3 | 1 | 12 | | 1 (0)| 00:00:01 |
|* 45 | INDEX RANGE SCAN | STG_IND_SALI_GRUP_PK | 1 | 6 | | 1 (0)| 00:00:01 |
|* 46 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK | 1 | | | 1 (0)| 00:00:01 |
| 47 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_GRAG | 1 | 13 | | 1 (0)| 00:00:01 |
| 48 | TABLE ACCESS STORAGE FULL | STG_IND_SALI_USER | 1363 | 29986 | | 11 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("GRAG"."I_AGNT"="USR"."I_AGNT")
9 - access("ACCT"."I_CUST"="MIN(CUST.I_CUST)")
12 - filter( EXISTS (SELECT 0 FROM "SFDC_STAGING"."STG_IND_SALI_GRUP" "GRUP","SFDC_STAGING"."STG_IND_SALI_GRAG" "GRAG"
WHERE "GRAG"."I_GRUP"=8722127 AND "GRUP"."I_GRUP"=8722127 AND TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'2013083
1' GROUP BY "GRAG"."I_GRUP" HAVING MAX("GRAG"."D_ESTABLISH")=:B1))
15 - filter("EMAL"."C_STAT"='A' OR "EMAL"."C_STAT" IS NULL)
16 - access("CUST"."I_CUST"="EMAL"."I_CUST"(+))
19 - access("GRUP"."I_GRUP"="GRAG"."I_GRUP")
22 - storage(TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831')
filter(TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831')
23 - access("GRAG"."I_GRUP"="GRUP"."I_GRUP")
24 - filter("GRAG"."D_RELEASE" IS NOT NULL)
26 - access("CUST"."I_CURR_GRUP"="GRUP"."I_GRUP")
27 - filter("CUST"."C_STAT"='A')
29 - access("ADDR"."I_GRUP"="GRUP"."I_GRUP")
30 - filter("ADDR"."C_STAT"='A')
31 - filter(MAX("GRAG"."D_ESTABLISH")=:B1)
34 - filter(TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831')
35 - access("GRUP"."I_GRUP"=8722127)
38 - access("GRAG"."I_GRUP"=8722127)
41 - access("ACCT"."I_CUST"="CUS2"."I_CUST"(+))
43 - access("ACCT"."I_CUST"="EMAL"."I_CUST"(+))
44 - access("ACCT"."I_CUST"="CUST"."I_CUST")
45 - access("CUST"."I_CURR_GRUP"="GRUP"."I_GRUP")
46 - access("GRAG"."I_GRUP"="GRUP"."I_GRUP")
Note
-----
- dynamic sampling used for this statement (level=6)
*BlackSwan added {code} tags.
PLEASE do so yourself in the future
Here is the DDLs for all tables involved, as well as the indeces:
CREATE TABLE STG_IND_SALI_ADDR
(
I_ADDR INTEGER NOT NULL,
I_GRUP INTEGER NOT NULL,
D_CREA DATE NOT NULL,
D_UPDT DATE NOT NULL,
C_STAT VARCHAR2(1 CHAR) NOT NULL,
T_TYPE VARCHAR2(10 CHAR) NOT NULL,
T_ADDR_1 VARCHAR2(30 CHAR),
T_ADDR_2 VARCHAR2(30 CHAR),
T_CITY VARCHAR2(24 CHAR),
T_STATE VARCHAR2(2 CHAR),
I_ZIPC VARCHAR2(11 CHAR),
C_COUNTY VARCHAR2(30 CHAR),
C_COUNTY_CODE VARCHAR2(5 CHAR)
);
CREATE TABLE STG_IND_SALI_CUGR
(
I_CUST INTEGER NOT NULL,
I_GRUP INTEGER NOT NULL,
D_CREA DATE NOT NULL,
D_UPDT DATE NOT NULL,
C_STAT VARCHAR2(1 CHAR) NOT NULL
);
CREATE TABLE STG_IND_SALI_CUS2
(
I_CUST INTEGER NOT NULL,
D_CREA DATE NOT NULL,
D_UPDT DATE NOT NULL,
C_STAT_EMP VARCHAR2(1 CHAR),
C_HMO_FAMILIAR VARCHAR2(1 CHAR),
T_PHYSICIAN VARCHAR2(30 CHAR),
T_HOSP_PREF VARCHAR2(30 CHAR),
T_PHAR_PREF VARCHAR2(15 CHAR),
T_CARRIER VARCHAR2(24 CHAR),
C_INS_STAT VARCHAR2(1 CHAR),
C_MEDICAID_STAT VARCHAR2(1 CHAR),
T_UNINSURED VARCHAR2(24 CHAR),
C_HMO_CVG VARCHAR2(1 CHAR),
C_EMPL_CVG VARCHAR2(1 CHAR),
T_PRI_EMPL VARCHAR2(20 CHAR),
T_SPSE_EMPL VARCHAR2(20 CHAR),
T_INSUR_REASON VARCHAR2(50 CHAR),
T_HOUSHLD_INCM VARCHAR2(12 CHAR),
T_ETHNCTY VARCHAR2(40 CHAR),
C_TBCCO_STAT VARCHAR2(1 CHAR),
T_FMLY_TYP VARCHAR2(100 CHAR),
T_EDCTN_LVL VARCHAR2(20 CHAR),
C_PRI_INS_COVG VARCHAR2(1 CHAR),
C_SBSDY_ELIG VARCHAR2(1 CHAR),
T_EMPLMNT_STAT VARCHAR2(20 CHAR),
T_FDRL_PVRTY_LVL VARCHAR2(5 CHAR),
C_MEDICAID_WITHIN_LST_YR VARCHAR2(1 CHAR),
D_CVRD_BY_WLP_SINCE DATE,
C_MEDICAID VARCHAR2(1 CHAR),
C_MEDICARE VARCHAR2(1 CHAR),
I_SBSDY_AMT NUMBER(12,2),
C_CUR_COVG VARCHAR2(1 CHAR)
);
CREATE TABLE STG_IND_SALI_CUST
(
I_CUST INTEGER,
I_CURR_GRUP INTEGER,
I_SSN VARCHAR2(9 CHAR),
D_CREA TIMESTAMP(6),
D_UPDT TIMESTAMP(6),
C_STAT VARCHAR2(1 CHAR),
N_PREFIX VARCHAR2(4 CHAR),
N_FIRST VARCHAR2(15 CHAR),
N_MI VARCHAR2(1 CHAR),
N_LAST VARCHAR2(24 CHAR),
N_SUFFIX VARCHAR2(4 CHAR),
T_EVENING_PHONE VARCHAR2(10 CHAR),
T_DAY_PHONE VARCHAR2(10 CHAR),
T_DAY_EXT VARCHAR2(5 CHAR),
T_FAX VARCHAR2(10 CHAR),
T_MARITAL_STAT VARCHAR2(9 CHAR),
D_BIRTH TIMESTAMP(6),
C_GEND VARCHAR2(1 CHAR),
C_LEVEL VARCHAR2(1 CHAR),
T_EMPLOYER VARCHAR2(24 CHAR),
T_SUPPRESS VARCHAR2(10 CHAR),
T_REL_TYPE VARCHAR2(10 CHAR),
I_SPOUSE INTEGER,
T_CNSNT_DYS VARCHAR2(4 CHAR),
D_CNSNT_END_DT TIMESTAMP(6),
T_HCID VARCHAR2(15 CHAR)
);
CREATE TABLE STG_IND_SALI_EMAIL
(
I_EMAIL INTEGER,
I_CUST INTEGER,
T_E_MAIL VARCHAR2(120 CHAR),
C_STAT VARCHAR2(1 CHAR),
D_CREA DATE,
D_UPDT DATE
);
CREATE TABLE STG_IND_SALI_GRAG
(
I_GRUP INTEGER,
I_AGNT VARCHAR2(12 CHAR),
D_CREA DATE,
D_UPDT DATE,
D_ESTABLISH DATE,
D_RELEASE DATE,
D_SKED_RELEASE DATE
);
CREATE TABLE STG_IND_SALI_GRUP
(
I_GRUP INTEGER,
D_CREA DATE,
D_UPDT TIMESTAMP(6),
C_STAT CHAR(1 CHAR),
C_OWNR_TYPE CHAR(1 CHAR),
C_MARKET_ORG CHAR(12 CHAR),
T_SUPPRESS CHAR(10 CHAR),
T_LANGUAGE CHAR(2 CHAR)
);
CREATE TABLE STG_IND_SALI_PERSON_ACCNT
(
I_CUST INTEGER,
N_PREFIX VARCHAR2(10 CHAR),
N_FIRST VARCHAR2(20 CHAR),
N_LAST VARCHAR2(30 CHAR),
T_EVENING_PHONE VARCHAR2(20 CHAR),
T_DAY_PHONE VARCHAR2(20 CHAR),
D_BIRTH DATE,
C_GEND CHAR(1 CHAR),
T_SUPPRESS VARCHAR2(10 CHAR),
D_CNSNT_END_DT DATE,
I_GRUP INTEGER,
P_ADDR_1 VARCHAR2(30 CHAR),
P_ADDR_2 VARCHAR2(30 CHAR),
P_CITY VARCHAR2(30 CHAR),
P_STATE VARCHAR2(2 CHAR),
P_ZIPC VARCHAR2(15 CHAR),
);
CREATE TABLE STG_IND_SALI_USER
(
I_AGNT VARCHAR2(20 CHAR),
C_TYPE VARCHAR2(10 CHAR),
T_NAME VARCHAR2(30 CHAR),
T_TITLE VARCHAR2(30 CHAR),
T_AGENCY_NAME VARCHAR2(60 CHAR),
T_PHON_VDN VARCHAR2(10 CHAR),
T_PHON VARCHAR2(10 CHAR),
T_PHON_EXT VARCHAR2(10 CHAR),
T_PHON_800 VARCHAR2(10 CHAR),
T_FAX VARCHAR2(10 CHAR),
T_BRAND VARCHAR2(15 CHAR),
T_LICENSE VARCHAR2(60 CHAR),
T_ENCRYPTED_TIN VARCHAR2(10 CHAR),
C_CERTIFICATION_NUM VARCHAR2(30 CHAR),
C_NATL_PRODUCER VARCHAR2(30 CHAR),
C_WLP_PRODUCER VARCHAR2(30 CHAR),
C_PARENT_TIN VARCHAR2(20 CHAR),
T_MICROSITE_URL VARCHAR2(255 CHAR),
C_LANID VARCHAR2(10 CHAR),
EMAIL_ADDR VARCHAR2(100 CHAR)
);
CREATE INDEX STG_IND_SALI_ADDR_PK ON STG_IND_SALI_ADDR (I_GRUP);
CREATE INDEX STG_IND_SALI_CUGR_PK ON STG_IND_SALI_CUGR (I_GRUP);
CREATE UNIQUE INDEX STG_IND_SALI_CUS2_PK ON STG_IND_SALI_CUS2 (I_CUST);
CREATE INDEX STG_IND_SALI_CUST_PK ON STG_IND_SALI_CUST (I_CUST);
CREATE INDEX STG_IND_SALI_CUST_PK2 ON STG_IND_SALI_CUST (I_CURR_GRUP);
CREATE INDEX STG_IND_SALI_CUST_PK3 ON STG_IND_SALI_CUST (I_CUST, I_CURR_GRUP);
CREATE INDEX STG_IND_SALI_EMAIL_PK ON STG_IND_SALI_EMAIL(I_CUST);
CREATE INDEX STG_IND_SALI_GRAG_PK ON STG_IND_SALI_GRAG (I_GRUP);
CREATE INDEX STG_IND_SALI_GRUP_PK ON STG_IND_SALI_GRUP (I_GRUP);
I don't have the access to run SQL_TRACE(tkprof). I asked the DBA team to do it, but it may be tomorrow morning 9 am ET before I get a response.
I'm hoping the explain plan above will help. Is it doing a table scan everywhere it says "TABLE ACCESS STORAGE FULL"? If so, should that be the table I have an index created on?
[Updated on: Sun, 13 September 2015 20:10] by Moderator Report message to a moderator
|
|
|
|
|
|
|
|
|
|
Re: Query does not error, but does not come back with a result set (as if it's in an endless loop) [message #642524 is a reply to message #642521] |
Sun, 13 September 2015 22:30 |
|
aft5425@anthem.com
Messages: 11 Registered: September 2015
|
Junior Member |
|
|
My apologies, from reading the notes, I thought the code tags were the indentation, etc (not literally the word "code") to help make it more readable. I added the code tags below. When I do the explain plan, it has indentation, so I leave it as it so as to not mess it up. Also attached the tkprof again because the DBA gave me another one.
Here is the SQL and explain plan from the inner subqueries, without the outermost query:
SELECT DISTINCT MIN(CUST.I_CUST)
FROM SFDC_STAGING.STG_IND_SALI_CUST CUST,
SFDC_STAGING.STG_IND_SALI_ADDR ADDR,
SFDC_STAGING.STG_IND_SALI_EMAIL EMAL,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE CUST.I_CURR_GRUP = GRUP.I_GRUP
AND ADDR.I_GRUP = GRUP.I_GRUP
AND CUST.I_CUST = EMAL.I_CUST(+)
AND CUST.C_STAT = 'A'
AND ADDR.C_STAT = 'A'
AND (EMAL.C_STAT = 'A' OR EMAL.C_STAT IS NULL)
AND GRUP.I_GRUP IN
(SELECT DISTINCT(GRAG.I_GRUP)
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND GRAG.D_RELEASE IS NOT NULL --ONLY GET RECS WITH NO OWNERSHIP
AND GRAG.D_ESTABLISH IN
(SELECT DISTINCT MAX(GRAG.D_ESTABLISH) --GET REC WITHH MOST RECENT ESTABLISHED DT
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831'
AND GRAG.I_GRUP IN (8722127)
GROUP BY GRAG.I_GRUP
)
AND GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831'
)
GROUP BY GRUP.I_GRUP
Plan hash value: 421818038
-------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 84 | 9 (12)| 00:00:01 |
| 1 | HASH UNIQUE | | 1 | 84 | 9 (12)| 00:00:01 |
| 2 | HASH GROUP BY | | 1 | 84 | 9 (12)| 00:00:01 |
| 3 | NESTED LOOPS | | 1 | 84 | 8 (0)| 00:00:01 |
| 4 | NESTED LOOPS | | 1 | 84 | 8 (0)| 00:00:01 |
|* 5 | FILTER | | | | | |
| 6 | NESTED LOOPS OUTER | | 1 | 76 | 7 (0)| 00:00:01 |
| 7 | NESTED LOOPS | | 1 | 68 | 6 (0)| 00:00:01 |
| 8 | NESTED LOOPS | | 1 | 54 | 5 (0)| 00:00:01 |
| 9 | NESTED LOOPS | | 1 | 37 | 4 (0)| 00:00:01 |
| 10 | NESTED LOOPS | | 1 | 31 | 3 (0)| 00:00:01 |
| 11 | VIEW | VW_NSO_1 | 1 | 9 | 2 (0)| 00:00:01 |
| 12 | HASH GROUP BY | | 1 | 31 | 2 (0)| 00:00:01 |
| 13 | MERGE JOIN CARTESIAN | | 1 | 31 | 2 (0)| 00:00:01 |
|* 14 | INDEX RANGE SCAN | STG_IND_SALI_GRUP_PK3 | 1 | 17 | 1 (0)| 00:00:01 |
| 15 | BUFFER SORT | | 1 | 14 | 1 (0)| 00:00:01 |
| 16 | TABLE ACCESS BY INDEX ROWID| STG_IND_SALI_GRAG | 1 | 14 | 1 (0)| 00:00:01 |
|* 17 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK | 1 | | 1 (0)| 00:00:01 |
|* 18 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_GRAG | 1 | 22 | 1 (0)| 00:00:01 |
|* 19 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK4 | 1 | | 1 (0)| 00:00:01 |
|* 20 | INDEX RANGE SCAN | STG_IND_SALI_GRUP_PK | 1 | 6 | 1 (0)| 00:00:01 |
|* 21 | INDEX RANGE SCAN | STG_IND_SALI_GRUP_PK3 | 1 | 17 | 1 (0)| 00:00:01 |
|* 22 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_CUST | 1 | 14 | 1 (0)| 00:00:01 |
|* 23 | INDEX RANGE SCAN | STG_IND_SALI_CUST_PK2 | 1 | | 1 (0)| 00:00:01 |
| 24 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_EMAIL | 1 | 8 | 1 (0)| 00:00:01 |
|* 25 | INDEX RANGE SCAN | STG_IND_SALI_EMAIL_PK | 1 | | 1 (0)| 00:00:01 |
|* 26 | INDEX RANGE SCAN | STG_IND_SALI_ADDR_PK | 1 | | 1 (0)| 00:00:01 |
|* 27 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_ADDR | 1 | 8 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
5 - filter("EMAL"."C_STAT"='A' OR "EMAL"."C_STAT" IS NULL)
14 - access("GRUP"."I_GRUP"=8722127)
filter(TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831')
17 - access("GRAG"."I_GRUP"=8722127)
18 - filter("GRAG"."D_RELEASE" IS NOT NULL)
19 - access("GRAG"."D_ESTABLISH"="$kkqu_col_1")
20 - access("GRUP"."I_GRUP"="GRAG"."I_GRUP")
21 - access("GRAG"."I_GRUP"="GRUP"."I_GRUP")
filter(TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831')
22 - filter("CUST"."C_STAT"='A')
23 - access("CUST"."I_CURR_GRUP"="GRUP"."I_GRUP")
25 - access("CUST"."I_CUST"="EMAL"."I_CUST"(+))
26 - access("ADDR"."I_GRUP"="GRUP"."I_GRUP")
27 - filter("ADDR"."C_STAT"='A')
Note
-----
- dynamic sampling used for this statement (level=6)
SQL and explain plan from the entire query:
SELECT DISTINCT ACCT.*, USR.T_NAME, GRUP.I_GRUP, EMAL.T_E_MAIL, CUS2.C_TBCCO_STAT
FROM SFDC_STAGING.STG_IND_SALI_PERSON_ACCNT ACCT,
SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_USER USR,
SFDC_STAGING.STG_IND_SALI_CUST CUST,
SFDC_STAGING.STG_IND_SALI_EMAIL EMAL,
SFDC_STAGING.STG_IND_SALI_CUS2 CUS2,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE ACCT.I_CUST = CUS2.I_CUST(+)
AND ACCT.I_CUST = CUST.I_CUST
AND ACCT.I_CUST = EMAL.I_CUST(+)
AND CUST.I_CURR_GRUP = GRUP.I_GRUP
AND GRAG.I_GRUP = GRUP.I_GRUP
AND GRAG.I_AGNT = USR.I_AGNT
AND ACCT.I_CUST IN
(SELECT DISTINCT MIN(CUST.I_CUST)
FROM SFDC_STAGING.STG_IND_SALI_CUST CUST,
SFDC_STAGING.STG_IND_SALI_ADDR ADDR,
SFDC_STAGING.STG_IND_SALI_EMAIL EMAL,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE CUST.I_CURR_GRUP = GRUP.I_GRUP
AND ADDR.I_GRUP = GRUP.I_GRUP
AND CUST.I_CUST = EMAL.I_CUST(+)
AND CUST.C_STAT = 'A'
AND ADDR.C_STAT = 'A'
AND (EMAL.C_STAT = 'A' OR EMAL.C_STAT IS NULL)
AND GRUP.I_GRUP IN
(SELECT DISTINCT(GRAG.I_GRUP)
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND GRAG.D_RELEASE IS NOT NULL --ONLY GET RECS WITH NO OWNERSHIP
AND GRAG.D_ESTABLISH IN
(SELECT DISTINCT MAX(GRAG.D_ESTABLISH) --GET REC WITHH MOST RECENT ESTABLISHED DT
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831'
--AND GRAG.I_GRUP = 8117178
GROUP BY GRAG.I_GRUP
)
AND GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831'
)
GROUP BY GRUP.I_GRUP
)
Plan hash value: 754084898
----------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3 | 630 | 14G (1)|999:59:59 |
| 1 | HASH UNIQUE | | 3 | 630 | 14G (1)|999:59:59 |
| 2 | NESTED LOOPS | | 3 | 630 | 14G (1)|999:59:59 |
| 3 | NESTED LOOPS | | 11 | 630 | 14G (1)|999:59:59 |
| 4 | NESTED LOOPS | | 1 | 188 | 14G (1)|999:59:59 |
| 5 | NESTED LOOPS OUTER | | 1 | 175 | 14G (1)|999:59:59 |
| 6 | NESTED LOOPS | | 1 | 147 | 14G (1)|999:59:59 |
| 7 | NESTED LOOPS | | 1 | 141 | 14G (1)|999:59:59 |
| 8 | NESTED LOOPS OUTER | | 1 | 129 | 14G (1)|999:59:59 |
| 9 | NESTED LOOPS | | 1 | 121 | 14G (1)|999:59:59 |
| 10 | VIEW | VW_NSO_1 | 1 | 13 | 14G (1)|999:59:59 |
| 11 | HASH GROUP BY | | 1 | 75 | 14G (1)|999:59:59 |
|* 12 | FILTER | | | | | |
| 13 | NESTED LOOPS | | 750K| 53M| 92094 (1)| 00:18:26 |
| 14 | NESTED LOOPS | | 750K| 53M| 92094 (1)| 00:18:26 |
|* 15 | FILTER | | | | | |
| 16 | NESTED LOOPS OUTER | | 680K| 43M| 71675 (1)| 00:14:21 |
| 17 | NESTED LOOPS | | 718K| 40M| 50131 (1)| 00:10:02 |
| 18 | NESTED LOOPS | | 620K| 26M| 31510 (1)| 00:06:19 |
| 19 | NESTED LOOPS | | 614K| 22M| 19220 (1)| 00:03:51 |
|* 20 | INDEX FULL SCAN | STG_IND_SALI_GRUP_PK3 | 472K| 7838K| 330 (1)| 00:00:04 |
|* 21 | TABLE ACCESS BY INDEX ROWID| STG_IND_SALI_GRAG | 1 | 22 | 1 (0)| 00:00:01 |
|* 22 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK | 1 | | 1 (0)| 00:00:01 |
|* 23 | INDEX RANGE SCAN | STG_IND_SALI_GRUP_PK | 1 | 6 | 1 (0)| 00:00:01 |
|* 24 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_CUST | 1 | 14 | 1 (0)| 00:00:01 |
|* 25 | INDEX RANGE SCAN | STG_IND_SALI_CUST_PK2 | 1 | | 1 (0)| 00:00:01 |
| 26 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_EMAIL | 1 | 8 | 1 (0)| 00:00:01 |
|* 27 | INDEX RANGE SCAN | STG_IND_SALI_EMAIL_PK | 1 | | 1 (0)| 00:00:01 |
|* 28 | INDEX RANGE SCAN | STG_IND_SALI_ADDR_PK | 1 | | 1 (0)| 00:00:01 |
|* 29 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_ADDR | 1 | 8 | 1 (0)| 00:00:01 |
|* 30 | FILTER | | | | | |
| 31 | SORT GROUP BY NOSORT | | 6343 | 192K| 19220 (1)| 00:03:51 |
| 32 | NESTED LOOPS | | 634K| 18M| 19220 (1)| 00:03:51 |
| 33 | NESTED LOOPS | | 634K| 18M| 19220 (1)| 00:03:51 |
|* 34 | INDEX FULL SCAN | STG_IND_SALI_GRUP_PK3 | 472K| 7838K| 330 (1)| 00:00:04 |
|* 35 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK | 1 | | 1 (0)| 00:00:01 |
| 36 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_GRAG | 1 | 14 | 1 (0)| 00:00:01 |
| 37 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_PERSON_ACCNT | 1 | 108 | 1 (0)| 00:00:01 |
|* 38 | INDEX RANGE SCAN | STG_IND_SALI_PA1_PK | 1 | | 1 (0)| 00:00:01 |
| 39 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_CUS2 | 1 | 8 | 1 (0)| 00:00:01 |
|* 40 | INDEX UNIQUE SCAN | STG_IND_SALI_CUS2_PK | 1 | | 1 (0)| 00:00:01 |
|* 41 | INDEX RANGE SCAN | STG_IND_SALI_CUST_PK3 | 1 | 12 | 1 (0)| 00:00:01 |
|* 42 | INDEX RANGE SCAN | STG_IND_SALI_GRUP_PK | 1 | 6 | 1 (0)| 00:00:01 |
| 43 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_EMAIL | 1 | 28 | 1 (0)| 00:00:01 |
|* 44 | INDEX RANGE SCAN | STG_IND_SALI_EMAIL_PK | 1 | | 1 (0)| 00:00:01 |
| 45 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_GRAG | 1 | 13 | 1 (0)| 00:00:01 |
|* 46 | INDEX RANGE SCAN | STG_IND_SALI_GRAG_PK | 1 | | 1 (0)| 00:00:01 |
|* 47 | INDEX RANGE SCAN | STG_IND_SALI_USER_PK | 11 | | 1 (0)| 00:00:01 |
| 48 | TABLE ACCESS BY INDEX ROWID | STG_IND_SALI_USER | 3 | 66 | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
12 - filter( EXISTS (SELECT 0 FROM "SFDC_STAGING"."STG_IND_SALI_GRUP" "GRUP","SFDC_STAGING"."STG_IND_SALI_GRAG"
"GRAG" WHERE "GRAG"."I_GRUP"="GRUP"."I_GRUP" AND TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831'
GROUP BY "GRAG"."I_GRUP" HAVING MAX("GRAG"."D_ESTABLISH")=:B1))
15 - filter("EMAL"."C_STAT"='A' OR "EMAL"."C_STAT" IS NULL)
20 - filter(TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831')
21 - filter("GRAG"."D_RELEASE" IS NOT NULL)
22 - access("GRAG"."I_GRUP"="GRUP"."I_GRUP")
23 - access("GRUP"."I_GRUP"="GRAG"."I_GRUP")
24 - filter("CUST"."C_STAT"='A')
25 - access("CUST"."I_CURR_GRUP"="GRUP"."I_GRUP")
27 - access("CUST"."I_CUST"="EMAL"."I_CUST"(+))
28 - access("ADDR"."I_GRUP"="GRUP"."I_GRUP")
29 - filter("ADDR"."C_STAT"='A')
30 - filter(MAX("GRAG"."D_ESTABLISH")=:B1)
34 - filter(TO_CHAR(INTERNAL_FUNCTION("GRUP"."D_UPDT"),'YYYYMMDD')>'20130831')
35 - access("GRAG"."I_GRUP"="GRUP"."I_GRUP")
38 - access("ACCT"."I_CUST"="MIN(CUST.I_CUST)")
40 - access("ACCT"."I_CUST"="CUS2"."I_CUST"(+))
41 - access("ACCT"."I_CUST"="CUST"."I_CUST")
42 - access("CUST"."I_CURR_GRUP"="GRUP"."I_GRUP")
44 - access("ACCT"."I_CUST"="EMAL"."I_CUST"(+))
46 - access("GRAG"."I_GRUP"="GRUP"."I_GRUP")
47 - access("GRAG"."I_AGNT"="USR"."I_AGNT")
Note
-----
- dynamic sampling used for this statement (level=6)
|
|
|
|
Re: Query does not error, but does not come back with a result set (as if it's in an endless loop) [message #642528 is a reply to message #642525] |
Mon, 14 September 2015 00:52 |
|
Kevin Meade
Messages: 2103 Registered: December 1999 Location: Connecticut USA
|
Senior Member |
|
|
You have the right idea with the divide and conquer strategy of looking at query pieces. Try this and see if it does not help you figure something out. I have not tested any of this code for syntax, so if you find any problems, fix them. I have also attached the normal stuff I attach for tuning: link to my book on SQL Tuning, first chapter for free, scripts for free, tuning worksheet beta document. This queries below will help you see if what you think is happening is in fact actually happening, or maybe if there is something else going on.
Remember to post the formatted results back here once you run the code.
------------------------------------------------------------------------------------------------------------------------------------
select count(*) from SFDC_STAGING.STG_IND_SALI_GRAG;
select count(*) from SFDC_STAGING.STG_IND_SALI_GRUP;
------------------------------------------------------------------------------------------------------------------------------------
create table temp1
nologging
as
(SELECT /*+ GATHER_PLAN_STATISTICS */ DISTINCT MAX(GRAG.D_ESTABLISH) --GET REC WITH MOST RECENT ESTABLISHED DT
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831' --WHERE DATE GREATER THAN THIS DATE
AND GRAG.I_GRUP = 8722127 --FOR THIS SPECIFIC GROUP
GROUP BY GRAG.I_GRUP
)
/
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST'));
select count(*) from temp1;
------------------------------------------------------------------------------------------------------------------------------------
select count(*) from SFDC_STAGING.STG_IND_SALI_GRAG;
select count(*) from SFDC_STAGING.STG_IND_SALI_GRUP;
------------------------------------------------------------------------------------------------------------------------------------
create table temp2
nologging
as
(SELECT /*+ GATHER_PLAN_STATISTICS */ DISTINCT(GRAG.I_GRUP)
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND GRAG.D_RELEASE IS NOT NULL --ONLY GET RECS WITH NO OWNERSHIP
AND GRAG.D_ESTABLISH IN
(select * from temp1)
AND GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831' --USE DATE HERE TOO OR ELSE IT WON'T WORK
)
/
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST'));
select count(*) from temp2;
------------------------------------------------------------------------------------------------------------------------------------
select count(*) from SFDC_STAGING.STG_IND_SALI_CUST;
select count(*) from SFDC_STAGING.STG_IND_SALI_ADDR;
select count(*) from SFDC_STAGING.STG_IND_SALI_EMAIL;
select count(*) from SFDC_STAGING.STG_IND_SALI_GRUP;
------------------------------------------------------------------------------------------------------------------------------------
create table temp3
nologging
as
(SELECT /*+ GATHER_PLAN_STATISTICS */ DISTINCT MIN(CUST.I_CUST)
FROM SFDC_STAGING.STG_IND_SALI_CUST CUST,
SFDC_STAGING.STG_IND_SALI_ADDR ADDR,
SFDC_STAGING.STG_IND_SALI_EMAIL EMAL,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE ACCT.I_CUST = CUST.I_CUST
AND CUST.I_CURR_GRUP = GRUP.I_GRUP
AND ADDR.I_GRUP = GRUP.I_GRUP
AND CUST.I_CUST = EMAL.I_CUST(+)
AND CUST.C_STAT = 'A' --ONLY GET ACTIVE CUSTOMERS
AND ADDR.C_STAT = 'A' --WITH A VALID ADDRESS
AND (EMAL.C_STAT = 'A' OR EMAL.C_STAT IS NULL) --AND ONLY IF THE EMAIL STATUS NOT INACTIVE
AND GRUP.I_GRUP IN
(select * from temp2)
GROUP BY GRUP.I_GRUP
)
/
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST'));
select count(*) from temp3;
------------------------------------------------------------------------------------------------------------------------------------
select count(*) from SFDC_STAGING.STG_IND_SALI_PERSON_ACCNT;
------------------------------------------------------------------------------------------------------------------------------------
create table temp4
nologging
as
SELECT /*+ GATHER_PLAN_STATISTICS */ DISTINCT ACCT.I_CUST
FROM SFDC_STAGING.STG_IND_SALI_PERSON_ACCNT ACCT
WHERE ACCT.I_CUST IN
(select * from temp3)
/
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST'));
select count(*) from temp4;
Kevin
Oracle SQL Performance Tuning and Optimization: It's all about the Cardinalities
[Updated on: Mon, 14 September 2015 00:53] Report message to a moderator
|
|
|
|
Re: Query does not error, but does not come back with a result set (as if it's in an endless loop) [message #642544 is a reply to message #642508] |
Mon, 14 September 2015 04:56 |
John Watson
Messages: 8964 Registered: January 2010 Location: Global Village
|
Senior Member |
|
|
I see lines such as this in your exec plans TABLE ACCESS STORAGE FULL one sees this only in an Exadata system, unless you have changed your cell_offload_plan_display parameter from default for some reason? Can you confirm that your OS is indeed AIX?
Apart from that, you have some basic errors. For example:
Wrapping colums in functions will confuse the CBO. For example, thisAND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831' should be changed to thisAND GRUP.D_UPDT > to_timestamp('20130831','yyyymmdd')
Unnecessary aggregations will slow down everything, for example the DISTINCTs in this block AND GRUP.I_GRUP IN
(SELECT DISTINCT(GRAG.I_GRUP)
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND GRAG.D_RELEASE IS NOT NULL --ONLY GET RECS WITH NO OWNERSHIP
AND GRAG.D_ESTABLISH IN
(SELECT DISTINCT MAX(GRAG.D_ESTABLISH) --GET REC WITHH MOST RECENT ESTABLISHED DT
FROM SFDC_STAGING.STG_IND_SALI_GRAG GRAG,
SFDC_STAGING.STG_IND_SALI_GRUP GRUP
WHERE GRAG.I_GRUP = GRUP.I_GRUP
AND TO_CHAR(GRUP.D_UPDT, 'YYYYMMDD') > '20130831'
--AND GRAG.I_GRUP = 8117178
GROUP BY GRAG.I_GRUP
) are not needed.
|
|
|
|
|
|
Re: Query does not error, but does not come back with a result set (as if it's in an endless loop) [message #642668 is a reply to message #642509] |
Wed, 16 September 2015 15:24 |
|
aft5425@anthem.com
Messages: 11 Registered: September 2015
|
Junior Member |
|
|
Black Swan thanks for your help with the problem I posted. I'll be sure to follow the rules better if I ever post again. I'm new to this forum, so I was not familiar with all of the rules for posting, but I am now.
My query now does finish in less than 3 minutes processing over 8 millions rows. Below is what I did to get it finally work. I posted it before, but will it again since I forgot a step.
building indexes on fields used in the "where" clause
running a separate pre-SQL query to populate my base table with fields that I was joining to other tables to get
eliminating nested correlated subqueries
get rid of MAX functions that really were not helping the CBO
|
|
|
Goto Forum:
Current Time: Thu Jan 30 13:30:16 CST 2025
|