Tunning the sql
Below is the table structure & index's for the table and Total record count for the table is: 40450708
here, I am selecting distinct of ELIM_NBR from table using below query and it contains only: 1641 records
SELECT DISTINCT ELIM_NBR FROM ELIM_RULE_REF_TBL;while we run the above sql, its taking too long (more than 5 min), could you please help me - how to tune the query to get the distinct of ELIM_NBR from the table...
-- Create table
create table ELIM_RULE_REF_TBL
ENT VARCHAR2(4) not null,
SUB_ENT VARCHAR2(3) not null,
SRC_ACCT VARCHAR2(9) not null,
EFF_FROM_DATE DATE not null,
EFF_TO_DATE DATE not null,
TARG_ENT VARCHAR2(4) not null,
TARG_SUB_ENT VARCHAR2(3) not null,
ELIM_DESCR VARCHAR2(115),
ELIM_NBR VARCHAR2(5),
ELIM_RESID_ACCT VARCHAR2(9),
ENT_LVL NUMBER
tablespace INS_DATA
pctfree 10
initrans 1
maxtrans 255
storage
initial 128M
next 50M
minextents 1
maxextents unlimited
pctincrease 0
-- Create/Recreate indexes
create index ELIMREF_IDX_01 on ELIM_RULE_REF_TBL (TARG_ENT,TARG_SUB_ENT,SRC_ACCT,ELIM_RESID_ACCT,EFF_FROM_DATE,EFF_TO_DATE)
tablespace INS_IDX
pctfree 10
initrans 2
maxtrans 255
storage
initial 50M
next 50M
minextents 1
maxextents unlimited
pctincrease 0
create index ELIMREF_IDX_02 on ELIM_RULE_REF_TBL (TARG_ENT,TARG_SUB_ENT,ELIM_NBR,ENT,SUB_ENT)
tablespace INS_IDX
pctfree 10
initrans 2
maxtrans 255
storage
initial 50M
next 50M
minextents 1
maxextents unlimited
pctincrease 0
create unique index ELIMREF_IDX_PK on ELIM_RULE_REF_TBL (ENT,SUB_ENT,SRC_ACCT,EFF_FROM_DATE,EFF_TO_DATE,TARG_ENT,TARG_SUB_ENT)
tablespace INS_IDX
pctfree 10
initrans 2
maxtrans 255
storage
initial 50M
next 50M
minextents 1
maxextents unlimited
pctincrease 0
);
If it is so crucial for you to get this particular query processed as fast as possible there are a couple of things you can evaluate:
* Follow this thread When your query takes too long ... to generate a proper explain plan output and run tkprof on a sql trace of this statement. Post the results here. This provides information where potentially most of time is spent to process the query.
* Create an (additional) index that consists just of the ELIM_NBR, provided that you only query this column and restrict only on that column in the WHERE clause. This builds a smaller index than the currently used index ELIMREF_IDX_02 which should speed up the full index scan.
* Since a sort unique operation is required you could think of increasing your sort memory usage. You haven't mentioned which database version you're running, but if you're already on 9i and have PGA_AGGREGATE_TARGET defined you could switch your session to "WORKAREA_SIZE_POLICY = manual" and setting SORT_AREA_SIZE to a large value, like 100000000 to allow a maximum of 100M for in-memory sorting, depending on your hardware, environment and concurrent usage of the system.
* If you have the suitable license and hardware you could try to increase the speed of the index fast full scan by using the parallel query option:
SELECT /*+ PARALLEL_INDEX(ELIM_RULE_REF_TBL, ELIMREF_IDX_02) */ DISTINCT ELIM_NBR
FROM ELIM_RULE_REF_TBL
WHERE SUBSTR(ELIM_NBR, 2, 1) != '9';Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle:
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/
Similar Messages
-
Hi,
PLease help me to tune the query
select primary_rep,
rep_ssn,
nvl(product_type_desc, 'UNKNOWN') as productName,
ROUND(sum(contributions)) as contribution,
ROUND(sum(withdrawls)) as withdrawls,
ROUND(sum(netflow)) as netflow
from dev.NETFLOW_VIEW_TSS_P
where bd = 'TSS'
and actvtydate between '01-Jan-2011' and '30-Sep-2011'
and rep_ssn IN (select tax_id from broker_view where broker_id = '600468')
group by primary_rep, rep_ssn, nvl(product_type_desc, 'UNKNOWN');
explain plan details below
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | Pstart| Pstop |
| 0 | SELECT STATEMENT | | 79 | 158K| | 74348 (1)| 00:14:53 | | |
| 1 | HASH GROUP BY | | 79 | 158K| | 74348 (1)| 00:14:53 | | |
|* 2 | HASH JOIN | | 79 | 158K| | 74347 (1)| 00:14:53 | | |
| 3 | VIEW | VW_NSO_1 | 1 | 6 | | 18 (17)| 00:00:01 | | |
| 4 | HASH UNIQUE | | 1 | 100 | | 18 (17)| 00:00:01 | | |
| 5 | NESTED LOOPS OUTER | | 1 | 100 | | 17 (12)| 00:00:01 | | |
| 6 | MERGE JOIN CARTESIAN | | 1 | 92 | | 17 (12)| 00:00:01 | | |
| 7 | NESTED LOOPS OUTER | | 1 | 71 | | 15 (14)| 00:00:01 | | |
| 8 | NESTED LOOPS OUTER | | 1 | 67 | | 12 (17)| 00:00:01 | | |
|* 9 | HASH JOIN OUTER | | 1 | 63 | | 10 (20)| 00:00:01 | | |
| 10 | NESTED LOOPS OUTER | | 1 | 56 | | 6 (0)| 00:00:01 | | |
| 11 | NESTED LOOPS OUTER | | 1 | 52 | | 4 (0)| 00:00:01 | | |
| 12 | TABLE ACCESS BY INDEX ROWID | AFFILIATE | 1 | 45 | | 2 (0)| 00:00:01 | | |
|* 13 | INDEX UNIQUE SCAN | AFFILIATE_PK | 1 | | | 1 (0)| 00:00:01 | | |
|* 14 | TABLE ACCESS FULL | PORTAL_BROKER | 1 | 7 | | 2 (0)| 00:00:01 | | |
| 15 | VIEW PUSHED PREDICATE | | 1 | 4 | | 2 (0)| 00:00:01 | | |
| 16 | NESTED LOOPS | | 1 | 28 | | 2 (0)| 00:00:01 | | |
| 17 | NESTED LOOPS | | 1 | 21 | | 2 (0)| 00:00:01 | | |
|* 18 | TABLE ACCESS BY INDEX ROWID | LOCATION_GROUP_TYPE_DESC | 1 | 5 | | 1 (0)| 00:00:01 | | |
|* 19 | INDEX UNIQUE SCAN | LOCATION_GROUP_TYPE_DESC_PK | 1 | | | 0 (0)| 00:00:01 | | |
|* 20 | INDEX RANGE SCAN | LOCATION_GROUP_UK | 1 | 16 | | 1 (0)| 00:00:01 | | |
|* 21 | INDEX UNIQUE SCAN | CONTACT_METHOD_PK | 1 | 7 | | 0 (0)| 00:00:01 | | |
| 22 | VIEW | | 1 | 7 | | 3 (34)| 00:00:01 | | |
| 23 | HASH UNIQUE | | 1 | 11 | | 3 (34)| 00:00:01 | | |
|* 24 | INDEX RANGE SCAN | AFFILIATE_TYPE_PK | 1 | 11 | | 2 (0)| 00:00:01 | | |
| 25 | VIEW PUSHED PREDICATE | | 1 | 4 | | 2 (0)| 00:00:01 | | |
| 26 | NESTED LOOPS | | 1 | 28 | | 2 (0)| 00:00:01 | | |
| 27 | NESTED LOOPS | | 1 | 21 | | 2 (0)| 00:00:01 | | |
|* 28 | TABLE ACCESS BY INDEX ROWID | LOCATION_GROUP_TYPE_DESC | 1 | 5 | | 1 (0)| 00:00:01 | | |
|* 29 | INDEX UNIQUE SCAN | LOCATION_GROUP_TYPE_DESC_PK | 1 | | | 0 (0)| 00:00:01 | | |
|* 30 | INDEX RANGE SCAN | LOCATION_GROUP_UK | 1 | 16 | | 1 (0)| 00:00:01 | | |
|* 31 | INDEX UNIQUE SCAN | CONTACT_METHOD_PK | 1 | 7 | | 0 (0)| 00:00:01 | | |
| 32 | VIEW PUSHED PREDICATE | | 1 | 4 | | 3 (0)| 00:00:01 | | |
| 33 | NESTED LOOPS OUTER | | 1 | 35 | | 3 (0)| 00:00:01 | | |
| 34 | NESTED LOOPS | | 1 | 32 | | 3 (0)| 00:00:01 | | |
| 35 | NESTED LOOPS | | 1 | 22 | | 2 (0)| 00:00:01 | | |
|* 36 | TABLE ACCESS BY INDEX ROWID | LOCATION_GROUP_TYPE_DESC | 1 | 5 | | 1 (0)| 00:00:01 | | |
|* 37 | INDEX UNIQUE SCAN | LOCATION_GROUP_TYPE_DESC_PK | 1 | | | 0 (0)| 00:00:01 | | |
|* 38 | INDEX RANGE SCAN | LOCATION_GROUP_UK | 1 | 17 | | 1 (0)| 00:00:01 | | |
| 39 | TABLE ACCESS BY INDEX ROWID | ADDRESS | 1 | 10 | | 1 (0)| 00:00:01 | | |
|* 40 | INDEX UNIQUE SCAN | ADDRESS_PK | 1 | | | 0 (0)| 00:00:01 | | |
|* 41 | INDEX UNIQUE SCAN | PROV_STDSC_PK | 1 | 3 | | 0 (0)| 00:00:01 | | |
| 42 | BUFFER SORT | | 1 | 21 | | 14 (15)| 00:00:01 | | |
|* 43 | INDEX RANGE SCAN | I_BROKER_BKBRCMB | 1 | 21 | | 2 (0)| 00:00:01 | | |
|* 44 | INDEX UNIQUE SCAN | BROKER_BRANCH_PK | 1 | 8 | | 0 (0)| 00:00:01 | | |
| 45 | VIEW | NETFLOW_VIEW_TSS_P | 391K| 766M| | 74325 (1)| 00:14:52 | | |
| 46 | UNION-ALL | | | | | | | | |
|* 47 | HASH JOIN RIGHT OUTER | | 11645 | 1671K| | 49023 (1)| 00:09:49 | | |
| 48 | VIEW | | 1 | 38 | | 13602 (1)| 00:02:44 | | |
|* 49 | FILTER | | | | | | | | |
| 50 | TABLE ACCESS FULL | SALES_REPORT_REP_MAPPING | 9023 | 326K| | 58 (2)| 00:00:01 | | |
|* 51 | FILTER | | | | | | | | |
| 52 | SORT GROUP BY NOSORT | | 1 | 11 | | 3 (0)| 00:00:01 | | |
| 53 | TABLE ACCESS BY INDEX ROWID | SALES_REPORT_REP_MAPPING | 1 | 11 | | 3 (0)| 00:00:01 | | |
|* 54 | INDEX RANGE SCAN | I_SAL_REP_MAP_REPID | 1 | | | 2 (0)| 00:00:01 | | |
| 55 | NESTED LOOPS | | 11645 | 1239K| | 35420 (1)| 00:07:06 | | |
|* 56 | HASH JOIN RIGHT OUTER | | 11645 | 898K| | 12112 (1)| 00:02:26 | | |
| 57 | INDEX FAST FULL SCAN | I_VENDORS_ACCTLOC | 986 | 3944 | | 2 (0)| 00:00:01 | | |
|* 58 | HASH JOIN RIGHT OUTER | | 11645 | 852K| | 12109 (1)| 00:02:26 | | |
|* 59 | MAT_VIEW ACCESS FULL | SECS_DESC | 26777 | 418K| | 3082 (1)| 00:00:37 | | |
|* 60 | FILTER | | | | | | | | |
|* 61 | HASH JOIN RIGHT OUTER | | 11645 | 670K| | 9026 (1)| 00:01:49 | | |
| 62 | MAT_VIEW ACCESS FULL | ENTRYCODES | 1640 | 11480 | | 8 (0)| 00:00:01 | | |
|* 63 | HASH JOIN | | 34936 | 1774K| | 9017 (1)| 00:01:49 | | |
|* 64 | INDEX FULL SCAN | I_CODE | 30 | 420 | | 1 (0)| 00:00:01 | | |
| 65 | PARTITION RANGE ALL | | 342K| 12M| | 9013 (1)| 00:01:49 | 1 | 20 |
| 66 | TABLE ACCESS BY LOCAL INDEX ROWID| BKPG | 342K| 12M| | 9013 (1)| 00:01:49 | 1 | 20 |
|* 67 | INDEX RANGE SCAN | I_BKPG_ACT_REC_IDX | 342K| | | 1412 (1)| 00:00:17 | 1 | 20 |
| 68 | TABLE ACCESS BY INDEX ROWID | ACCT_CUBE | 1 | 30 | | 2 (0)| 00:00:01 | | |
|* 69 | INDEX UNIQUE SCAN | ACCT_CUBE_PK | 1 | | | 1 (0)| 00:00:01 | | |
|* 70 | HASH JOIN RIGHT OUTER | | 379K| 52M| | 25303 (1)| 00:05:04 | | |
| 71 | VIEW | | 1 | 38 | | 13602 (1)| 00:02:44 | | |
|* 72 | FILTER | | | | | | | | |
| 73 | TABLE ACCESS FULL | SALES_REPORT_REP_MAPPING | 9023 | 326K| | 58 (2)| 00:00:01 | | |
|* 74 | FILTER | | | | | | | | |
| 75 | SORT GROUP BY NOSORT | | 1 | 11 | | 3 (0)| 00:00:01 | | |
| 76 | TABLE ACCESS BY INDEX ROWID | SALES_REPORT_REP_MAPPING | 1 | 11 | | 3 (0)| 00:00:01 | | |
|* 77 | INDEX RANGE SCAN | I_SAL_REP_MAP_REPID | 1 | | | 2 (0)| 00:00:01 | | |
|* 78 | HASH JOIN | | 379K| 39M| 33M| 11696 (2)| 00:02:21 | | |
|* 79 | HASH JOIN | | 379K| 28M| | 3210 (2)| 00:00:39 | | |
|* 80 | INDEX FAST FULL SCAN | I_VENDORS_ACCTLOC | 986 | 3944 | | 2 (0)| 00:00:01 | | |
|* 81 | HASH JOIN | | 379K| 27M| 14M| 3204 (2)| 00:00:39 | | |
| 82 | INDEX FAST FULL SCAN | SECS_DESC_PK | 744K| 6545K| | 457 (3)| 00:00:06 | | |
|* 83 | FILTER | | | | | | | | |
|* 84 | HASH JOIN RIGHT OUTER | | 379K| 24M| | 569 (3)| 00:00:07 | | |
| 85 | MAT_VIEW ACCESS FULL | MFENTRYCODES | 6853 | 61677 | | 15 (0)| 00:00:01 | | |
| 86 | PARTITION RANGE ALL | | 1138K| 62M| | 542 (1)| 00:00:07 | 1 | 15 |
|* 87 | TABLE ACCESS BY LOCAL INDEX ROWID | MFBKPG | 1138K| 62M| | 542 (1)| 00:00:07 | 1 | 15 |
|* 88 | INDEX RANGE SCAN | I_MFBKPGP_ACTDT_ACCT_TST | 904 | | | 107 (0)| 00:00:02 | 1 | 15 |
| 89 | INDEX FAST FULL SCAN | I_ACCT_CUBE_REPID_MKT | 1952K| 52M| | 3096 (2)| 00:00:38 | | |
Predicate Information (identified by operation id):
2 - access("REP_SSN"="$nso_col_1")
9 - access("A"."AFFILIATE_ID"="MGR"."AFFILIATE_ID"(+))
13 - access("A"."AFFILIATE_ID"='600468')
14 - filter("PORTAL_BROKER"."BROKER_ID"(+)='600468')
18 - filter("LT"."ADDRESS_CONTACT_IND"='C')
19 - access("LT"."LOCATION_GROUP_TYPE_CODE"='WF')
20 - access("L"."LOCATION_GROUP_TYPE_CODE"='WF' AND "L"."AFFILIATE_ID"="A"."AFFILIATE_ID")
filter("L"."CONTACT_METHOD_ID" IS NOT NULL)
21 - access("L"."CONTACT_METHOD_ID"="B"."CONTACT_METHOD_ID")
24 - access("AFFILIATE_ID"='600468')
filter("AFFILIATE_TYPE"='BBE' OR "AFFILIATE_TYPE"='BRM' OR "AFFILIATE_TYPE"='ISP')
28 - filter("LT"."ADDRESS_CONTACT_IND"='C')
29 - access("LT"."LOCATION_GROUP_TYPE_CODE"='WT')
30 - access("L"."LOCATION_GROUP_TYPE_CODE"='WT' AND "L"."AFFILIATE_ID"="A"."AFFILIATE_ID")
filter("L"."CONTACT_METHOD_ID" IS NOT NULL)
31 - access("L"."CONTACT_METHOD_ID"="B"."CONTACT_METHOD_ID")
36 - filter("LT"."ADDRESS_CONTACT_IND"='A')
37 - access("LT"."LOCATION_GROUP_TYPE_CODE"='WM')
38 - access("L"."LOCATION_GROUP_TYPE_CODE"='WM' AND "L"."AFFILIATE_ID"="A"."AFFILIATE_ID")
filter("L"."ADDRESS_ID" IS NOT NULL)
40 - access("L"."ADDRESS_ID"="A"."ADDRESS_ID")
41 - access("A"."PROVINCE_STATE_CODE"="S"."PROVINCE_STATE_CODE"(+))
43 - access("B"."BROKER_ID"='600468')
44 - access("B"."BRANCH_ID"="BR"."BRANCH_ID"(+))
47 - access("B"."REPID"="K"."REPID"(+))
49 - filter( EXISTS (SELECT 0 FROM DEV."SALES_REPORT_REP_MAPPING" "SALES_REPORT_REP_MAPPING" WHERE "REPID"=:B1 GROUP BY "REPID" HAVING
SUM(NVL("PCT",100))=100))
51 - filter(SUM(NVL("PCT",100))=100)
54 - access("REPID"=:B1)
56 - access(NVL("V"."VENDOR_CD"(+),'xxx')=NVL("VENDOR_CD",'yyy'))
58 - access("CUSIP"(+)="A"."CUSIP")
59 - filter("COMM_SECTYPE"(+)='MF')
60 - filter(NVL("Z"."PERF_INCLUDE_PORTFOLIO",'xx')='Y')
61 - access("A"."ENTRYCODE"="Z"."ENTRYCODE"(+))
63 - access("CODE_IN"=SUBSTR("A"."ACCT",1,3))
64 - access("CODE_TYPE"='NETFLOW')
filter("CODE_TYPE"='NETFLOW')
67 - access("A"."ACTVTYDATE">=TO_DATE(' 2011-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "A"."ACTVTYDATE"<=TO_DATE(' 2011-09-30
00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
69 - access("B"."ACCOUNTKEY"='11,,,'||"A"."ACCT")
70 - access("A"."REPID"="K"."REPID"(+))
72 - filter( EXISTS (SELECT 0 FROM DEV."SALES_REPORT_REP_MAPPING" "SALES_REPORT_REP_MAPPING" WHERE "REPID"=:B1 GROUP BY "REPID" HAVING
SUM(NVL("PCT",100))=100))
74 - filter(SUM(NVL("PCT",100))=100)
77 - access("REPID"=:B1)
78 - access("A"."ACCOUNTKEY"='20,'||"B"."VENDOR_CD"||','||"B"."FUNDNO"||','||"B"."ACCT")
79 - access("V"."VENDOR_CD"="B"."VENDOR_CD")
80 - filter("V"."VENDOR_CD"<>'HNR' AND "V"."VENDOR_CD"<>'CNL' AND "V"."VENDOR_CD"<>'IRE' AND "V"."VENDOR_CD"<>'WLR' AND
"V"."VENDOR_CD"<>'WLP' AND "V"."VENDOR_CD"<>'PER' AND "V"."VENDOR_CD"<>'BHV')
81 - access("SD"."CUSIP"="B"."CUSIP")
83 - filter(NVL("E"."PERF_INCLUDE_PORTFOLIO",'xx')='Y')
84 - access("B"."ENTRYCODE"="E"."ENTRYCODE"(+))
87 - filter("B"."VENDOR_CD"<>'HNR' AND "B"."VENDOR_CD"<>'CNL' AND "B"."VENDOR_CD"<>'IRE' AND "B"."VENDOR_CD"<>'WLR' AND
"B"."VENDOR_CD"<>'WLP' AND "B"."VENDOR_CD"<>'PER' AND "B"."VENDOR_CD"<>'BHV')
88 - access(SYS_OP_DESCEND("ACTVTYDATE")>=HEXTORAW('8790F6E1FEF8FEFAFF') AND SYS_OP_DESCEND("ACTVTYDATE")<=HEXTORAW('8790FEF8FEF8FEFAFF')
filter(SYS_OP_UNDESCEND(SYS_OP_DESCEND("ACTVTYDATE"))>=TO_DATE(' 2011-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
SYS_OP_UNDESCEND(SYS_OP_DESCEND("ACTVTYDATE"))<=TO_DATE(' 2011-09-30 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
158 rows selected.ThanksSo this is a VIEW with I think 18 tables (I may have missed one or two), some of which are referenced more than one. Some of these tables have tens of miilions of rows. What exactly are you expecting from us?
I guess this is a data warehouse or BI query. Sometimes such queries just take an age to run and there's nothing which can be done except result caching. Other times the queries can be tuned, but iit requires way more context and domain knowledge than you have provided.
Please start by reading [url https://forums.oracle.com/forums/thread.jspa?threadID=2174552#9360003]this FAQ. .
Cheers, APC -
Hi,
TKPROF: Release 8.1.7.0.0 - Production on Wed Sep 23 23:04:43 2009
(c) Copyright 2000 Oracle Corporation. All rights reserved.
Trace file: pindb_ora_9943.trc
Sort options: prsela exeela fchela fchela
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
SELECT f.poid_id0, COUNT (*), SUM (amount), d.subscription_amt, d.free_mb
FROM event_t a,
event_bal_impacts_t b,
(SELECT DISTINCT a.obj_id0 AS account_obj_id0, a.node_location,
a.plan_obj_id0
FROM account_products_t a
WHERE plan_obj_id0 > 0 AND service_obj_id0 > 0
UNION
SELECT DISTINCT a.account_obj_id0, a.node_location, a.plan_obj_id0
FROM audit_account_products_t a
WHERE plan_obj_id0 > 0
AND service_obj_id0 > 0
AND effective_end_t > 0) c,
iq_prov_tags_t d,
event_session_dialup_t e,
plan_t f
WHERE a.poid_id0 = b.obj_id0
AND a.poid_id0 = e.obj_id0
AND b.node_location = c.node_location
AND a.account_obj_id0 = c.account_obj_id0
AND c.plan_obj_id0 = d.plan_poid_id0
AND d.plan_poid_id0 = f.poid_id0
AND a.end_t >= pin_date_to_seconds (TRUNC ( SYSDATE
- 1), NULL)
AND a.end_t < pin_date_to_seconds (TRUNC (SYSDATE), NULL)
AND b.resource_id IN (1000051)
GROUP BY f.poid_id0, d.subscription_amt, d.free_mb
call count cpu elapsed disk query current rows
Parse 1 0.09 0.08 0 0 0 0
Execute 2 0.07 0.07 0 0 0 0
Fetch 2 235.91 2295.25 1509704 1674184 346 11
total 5 236.07 2295.40 1509704 1674184 346 11
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 28
Rows Row Source Operation
11 SORT GROUP BY
69 NESTED LOOPS
70 NESTED LOOPS
70 NESTED LOOPS
70 HASH JOIN
70 HASH JOIN
300499 TABLE ACCESS BY INDEX ROWID EVENT_T
300500 INDEX RANGE SCAN (object id 26458)
816394 TABLE ACCESS BY INDEX ROWID EVENT_BAL_IMPACTS_T
816395 INDEX RANGE SCAN (object id 26463)
2385556 VIEW
2385556 SORT UNIQUE
3124105 UNION-ALL
638617 TABLE ACCESS FULL ACCOUNT_PRODUCTS_T
2485488 TABLE ACCESS FULL AUDIT_ACCOUNT_PRODUCTS_T
138 TABLE ACCESS BY INDEX ROWID IQ_PROV_TAGS_T
138 INDEX UNIQUE SCAN (object id 26554)
138 INDEX UNIQUE SCAN (object id 23148)
69 INDEX UNIQUE SCAN (object id 27372)
ALTER SESSION SET SQL_TRACE = TRUE
call count cpu elapsed disk query current rows
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer goal: CHOOSE
Parsing user id: 28
OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 1 0.09 0.08 0 0 0 0
Execute 3 0.07 0.07 0 0 0 0
Fetch 2 235.91 2295.25 1509704 1674184 346 11
total 6 236.07 2295.40 1509704 1674184 346 11
Misses in library cache during parse: 1
Misses in library cache during execute: 1
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
Parse 2 0.01 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 20 0.00 0.01 0 40 0 18
total 24 0.01 0.01 0 40 0 18
Misses in library cache during parse: 1
2 user SQL statements in session.
2 internal SQL statements in session.
4 SQL statements in session.
Trace file: pindb_ora_9943.trc
Trace file compatibility: 8.00.04
Sort options: prsela exeela fchela fchela
1 session in tracefile.
2 user SQL statements in trace file.
2 internal SQL statements in trace file.
4 SQL statements in trace file.
3 unique SQL statements in trace file.
118 lines in trace file.Inputs are appreciated
Prakash GRsorry hash joint for asking this type of question but i do not have any option since i am not query tuner i need inputs so that i can put some effort on this
Would you like a cup of tea with this my dear ?chilled beer will be offered if any inputs given
Thanks
Prakash GR -
How to tune the SQL & solve UNIQUE Contraint issue using without duplicates
CREATE TABLE REL_ENT_REF
ROLL_ENT VARCHAR2(4 BYTE) NOT NULL,
ROLL_SUB_ENT VARCHAR2(3 BYTE) NOT NULL,
ROLL_ENT_DESCR VARCHAR2(50 BYTE),
ENT VARCHAR2(4 BYTE) NOT NULL,
SUB_ENT VARCHAR2(3 BYTE) NOT NULL,
ENT_DESCR VARCHAR2(50 BYTE)
CREATE UNIQUE INDEX REL_ENT_REF_IDX_PK ON REL_ENT_REF
(ROLL_ENT, ROLL_SUB_ENT, ENT, SUB_ENT);
ALTER TABLE REL_ENT_REF ADD (
CONSTRAINT REL_ENT_REF_IDX_PK
PRIMARY KEY
(ROLL_ENT, ROLL_SUB_ENT, ENT, SUB_ENT);
TOTAL NUMBER OF RECORDS FOR TABLE REL_ENT_REF : 123542
CREATE TABLE REL_COA_REF
ACCT VARCHAR2(9 BYTE) NOT NULL,
ACCT_LVL VARCHAR2(2 BYTE) NOT NULL,
ACCT_ID VARCHAR2(9 BYTE) NOT NULL,
REL_TYPE VARCHAR2(10 BYTE) NOT NULL,
ACCT_TYPE VARCHAR2(2 BYTE) NOT NULL,
ACCT_DESCR VARCHAR2(43 BYTE),
POST_ACCT VARCHAR2(9 BYTE) NOT NULL,
POST_ACCT_TYPE VARCHAR2(2 BYTE),
POST_ACCT_DESCR VARCHAR2(43 BYTE),
SIGN_REVRSL NUMBER
CREATE INDEX REL_COA_REF_IDX_01 ON REL_COA_REF
(ACCT_ID, REL_TYPE, POST_ACCT);
CREATE UNIQUE INDEX REL_COA_REF_IDX_PK ON REL_COA_REF
(ACCT_ID, ACCT, REL_TYPE, POST_ACCT);
TOTAL NUMBER OF RECORDS FOR TABLE REL_COA_REF : 4721918
CREATE TABLE REL_CTR_HIER_REF
ENT VARCHAR2(4 BYTE) NOT NULL,
SUB_ENT VARCHAR2(3 BYTE) NOT NULL,
HIER_TBL_NUM VARCHAR2(3 BYTE) NOT NULL,
HIER_ROLL VARCHAR2(14 BYTE) NOT NULL,
HIER_CODE VARCHAR2(14 BYTE) NOT NULL,
SUM_FLAG VARCHAR2(14 BYTE) NOT NULL,
CTR_OR_HIER VARCHAR2(14 BYTE) NOT NULL,
CTR_DETAIL VARCHAR2(14 BYTE) NOT NULL,
CTR_DESCR VARCHAR2(50 BYTE)
CREATE INDEX REL_CTR_HIER_REF_IDX_01 ON REL_CTR_HIER_REF
(HIER_TBL_NUM, HIER_ROLL, SUM_FLAG);
CREATE UNIQUE INDEX REL_CTR_HIER_REF_IDX_PK ON REL_CTR_HIER_REF
(ENT, SUB_ENT, HIER_TBL_NUM, HIER_ROLL, SUM_FLAG,
CTR_DETAIL, CTR_OR_HIER, HIER_CODE);
CREATE INDEX REL_CTR_HIER_REF_IDX_02 ON REL_CTR_HIER_REF
(ENT, SUB_ENT, HIER_TBL_NUM, CTR_OR_HIER, SUM_FLAG,
CTR_DETAIL);
TOTAL NUMBER OF RECORDS FOR TABLE REL_CTR_HIER_REF : 24151811
CREATE TABLE REL_TXN_ACT_CM
ENT VARCHAR2(4 BYTE),
SUB_ENT VARCHAR2(3 BYTE),
POST_ACCT VARCHAR2(9 BYTE),
CTR VARCHAR2(7 BYTE),
POST_DATE DATE,
EFF_DATE DATE,
TXN_CODE VARCHAR2(2 BYTE),
TXN_TYPE VARCHAR2(1 BYTE),
TXN_AMOUNT NUMBER(17,2),
TXN_DESCR VARCHAR2(46 BYTE),
TXN_SOURCE VARCHAR2(1 BYTE)
CREATE INDEX REL_TXN_ACT_CM_IDX_01 ON REL_TXN_ACT_CM
(ENT, SUB_ENT, POST_ACCT, POST_DATE, EFF_DATE,
TXN_AMOUNT);
CREATE INDEX REL_TXN_ACT_CM_IDX_PK ON REL_TXN_ACT_CM
(ENT, SUB_ENT, CTR, POST_ACCT, POST_DATE,
EFF_DATE, TXN_AMOUNT);
TOTAL NUMBER OF RECORDS FOR TABLE REL_TXN_ACT_CM : 111042301
CREATE TABLE REL_CLPR_TBOX_GL_TXN
ORGANIZATION VARCHAR2(10 BYTE) NOT NULL,
ACCOUNT VARCHAR2(10 BYTE) NOT NULL,
APPLICATION VARCHAR2(10 BYTE) NOT NULL,
AMOUNT NUMBER(17,2) NOT NULL
CREATE UNIQUE INDEX REL_CLPR_TBOX_GL_TXN_IDX ON REL_CLPR_TBOX_GL_TXN
(ORGANIZATION, ACCOUNT, APPLICATION);
DELETE FROM REL_CLPR_TBOX_GL_TXN;
INSERT INTO REL_CLPR_TBOX_GL_TXN
ORGANIZATION,
ACCOUNT,
APPLICATION,
AMOUNT
SELECT --+ INDEX(T REL_TXN_ACT_CM_IDX_PK)
SUBSTR(REL_CTR_HIER_REF.HIER_CODE, 1, 5) || '.....',
TXN.POST_ACCT,
'GL-' || SUBSTR(TXN.TXN_DESCR, 1, 3),
SUM
CASE
WHEN TXN.TXN_CODE IN ('01', '21') THEN 1
WHEN TXN.TXN_CODE IN ('02', '22') THEN -1
ELSE 0
END
CASE
WHEN REL_COA_REF.ACCT_TYPE IN ('01', '25', '30', '40', '90', '95') THEN 1
WHEN REL_COA_REF.ACCT_TYPE IN ('05', '10', '20', '35') THEN -1
ELSE 0
END
REL_COA_REF.SIGN_REVRSL
TXN.TXN_AMOUNT
FROM
REL_TXN_ACT_CM REL_TXN
INNER JOIN
REL_CTR_HIER_REF
ON
REL_TXN.ENT = REL_CTR_HIER_REF.ENT AND
REL_TXN.SUB_ENT = REL_CTR_HIER_REF.SUB_ENT AND
REL_TXN.CTR = REL_CTR_HIER_REF.CTR_DETAIL
INNER JOIN
REL_COA_REF
ON REL_TXN.POST_ACCT = REL_COA_REF.POST_ACCT
INNER JOIN
REL_ENT_REF
ON
REL_CTR_HIER_REF.ENT = REL_ENT_REF.ENT AND
REL_CTR_HIER_REF.SUB_ENT = REL_ENT_REF.SUB_ENT
WHERE
REL_TXN.EFF_DATE BETWEEN L_MONTH AND LAST_DAY(L_MONTH) AND
REL_CTR_HIER_REF.HIER_TBL_NUM = '001' AND
REL_CTR_HIER_REF.SUM_FLAG = 'D' AND
REL_CTR_HIER_REF.CTR_OR_HIER = REL_CTR_HIER_REF.CTR_DETAIL AND
REL_CTR_HIER_REF.HIER_CODE BETWEEN 'AAA' AND 'ZZZ' AND
REL_COA_REF.REL_TYPE = ' ' AND
REL_COA_REF.ACCT_ID = 'ALPTER' AND
REL_COA_REF.ACCT_LVL = '9' AND
REL_ENT_REF.ROLL_ENT = '999' AND
REL_ENT_REF.ROLL_SUB_ENT = '111'
GROUP BY
SUBSTR(REL_CTR_HIER_REF.HIER_CODE, 1, 5),
REL_TXN.POST_ACCT,
SUBSTR(REL_TXN.TXN_DESCR, 1, 3)
HAVING
SUM
CASE
WHEN REL_TXN.TXN_CODE IN ('01', '21') THEN 1
WHEN REL_TXN.TXN_CODE IN ('02', '22') THEN -1
ELSE 0
END
CASE
WHEN REL_COA_REF.ACCT_TYPE IN ('01', '25', '30', '40', '90', '95') THEN 1
WHEN REL_COA_REF.ACCT_TYPE IN ('05', '10', '20', '35') THEN -1
ELSE 0
END
REL_COA_REF.SIGN_REVRSL
REL_TXN.TXN_AMOUNT
) <> 0;
[\CODE]
While try to run the query(only select statement), it is taking around 3+ hours & while try to insert the same query in the table, getting error called ORA-00001: unique constraint (INSIGHT.CLPR_TBOX_GL_TXN_IDX) violated.
[\CODE]
How to tune & resolve this UNIQUE Contraint issue using without duplicates?Should the SELECT statement be returning duplicate rows? If you know that there are duplicate rows in the underlying tables, you could add a DISTINCT to the select. Which forces Oracle to do an extra sort which will slow down the insert. If you don't expect duplicate rows, you would need to figure out what join criteria is missing from your query and add that criteria.
Justin -
Hi ,
Can any one suggest to me why my query is slow and how to tune.
SELECT T0.SDKCOO, T0.SDDOCO, T0.SDDCTO, T0.SDLNID, T0.SDMCU, T0.SDCO, T0.SDOKCO, T0.SDOORN, T0.SDOCTO, T0.SDOGNO, T0.SDRKCO, T0.SDRORN, T0.SDRCTO, T0.SDRLLN, T0.SDDMCT, T0.SDDMCS, T0.SDBALU, T0.SDAN8, T0.SDSHAN, T0.SDPA8, T0.SDDRQJ, T0.SDPDDJ, T0.SDOPDJ, T0.SDADDJ, T0.SDIVD, T0.SDCNDJ, T0.SDDGL, T0.SDRSDJ, T0.SDPEFJ, T0.SDPPDJ, T0.SDPSDJ, T0.SDVR02, T0.SDITM, T0.SDLITM, T0.SDAITM, T0.SDLOCN, T0.SDLOTN, T0.SDFRGD, T0.SDTHGD, T0.SDFRMP, T0.SDTHRP, T0.SDEXDP, T0.SDDSC1, T0.SDDSC2, T0.SDLNTY, T0.SDNXTR, T0.SDLTTR, T0.SDEMCU, T0.SDRLIT, T0.SDKTLN, T0.SDCPNT, T0.SDRKIT, T0.SDKTP, T0.SDSRP1, T0.SDSRP2, T0.SDSRP3, T0.SDSRP4, T0.SDSRP5, T0.SDPRP1, T0.SDPRP2, T0.SDPRP3, T0.SDPRP4, T0.SDPRP5, T0.SDUOM, T0.SDUORG, T0.SDSOQS, T0.SDSOBK, T0.SDSOCN, T0.SDSONE, T0.SDQTYT, T0.SDQRLV, T0.SDCOMM, T0.SDOTQY, T0.SDUPRC, T0.SDAEXP, T0.SDPROV, T0.SDTPC, T0.SDAPUM, T0.SDLPRC, T0.SDUNCS, T0.SDECST, T0.SDCSTO, T0.SDTCST, T0.SDINMG, T0.SDPTC, T0.SDRYIN, T0.SDDTBS, T0.SDTRDC, T0.SDASN, T0.SDPRGR, T0.SDCLVL, T0.SDDSPR, T0.SDDSFT, T0.SDFAPP, T0.SDCADC, T0.SDKCO, T0.SDDOC, T0.SDDCT, T0.SDODOC, T0.SDODCT, T0.SDOKC, T0.SDPSN, T0.SDDELN, T0.SDPRMO, T0.SDDFTN, T0.SDTAX1, T0.SDTXA1, T0.SDEXR1, T0.SDATXT, T0.SDPRIO, T0.SDRESL, T0.SDBACK, T0.SDSBAL, T0.SDAPTS, T0.SDLOB, T0.SDEUSE, T0.SDDTYS, T0.SDCDCD, T0.SDNTR, T0.SDVEND, T0.SDANBY, T0.SDCARS, T0.SDMOT, T0.SDCOT, T0.SDROUT, T0.SDSTOP, T0.SDZON, T0.SDCNID, T0.SDFRTH, T0.SDAFT, T0.SDFUF1, T0.SDFRTC, T0.SDFRAT, T0.SDRATT, T0.SDSHCM, T0.SDSHCN, T0.SDSERN, T0.SDUOM1, T0.SDPQOR, T0.SDUOM2, T0.SDSQOR, T0.SDUOM4, T0.SDITWT, T0.SDWTUM, T0.SDITVL, T0.SDVLUM, T0.SDRPRC, T0.SDORPR, T0.SDORP, T0.SDCMGP, T0.SDCMGL, T0.SDGLC, T0.SDCTRY, T0.SDFY, T0.SDSTTS, T0.SDSO01, T0.SDSO02, T0.SDSO03, T0.SDSO04, T0.SDSO05, T0.SDSO06, T0.SDSO07, T0.SDSO08, T0.SDSO09, T0.SDSO10, T0.SDSO11, T0.SDSO12, T0.SDSO13, T0.SDSO14, T0.SDSO15, T0.SDSLSM, T0.SDSLCM, T0.SDSLM2, T0.SDSLC2, T0.SDACOM, T0.SDCMCG, T0.SDRCD, T0.SDGRWT, T0.SDGWUM, T0.SDANI, T0.SDAID, T0.SDOMCU, T0.SDOBJ, T0.SDSUB, T0.SDLT, T0.SDSBL, T0.SDSBLT, T0.SDLCOD, T0.SDUPC1, T0.SDUPC2, T0.SDUPC3, T0.SDSWMS, T0.SDUNCD, T0.SDCRMD, T0.SDCRCD, T0.SDCRR, T0.SDFPRC, T0.SDFUP, T0.SDFEA, T0.SDFUC, T0.SDFEC, T0.SDURCD, T0.SDURDT, T0.SDURAT, T0.SDURAB, T0.SDURRF, T0.SDTORG, T0.SDUSER, T0.SDPID, T0.SDJOBN, T0.SDUPMJ, T0.SDTDAY, T1.SHKCOO, T1.SHDOCO, T1.SHDCTO, T1.SHSFXO, T1.SHMCU, T1.SHCO, T1.SHRORN, T1.SHAN8, T1.SHSHAN, T1.SHTRDJ, T1.SHPDDJ, T1.SHVR01, T1.SHDEL1, T1.SHDEL2, T1.SHINMG, T1.SHHOLD, T1.SHPLST, T1.SHFRTH, T1.SHOTOT, T1.SHWUMD, T1.SHCRRM, T1.SHCRCD, T1.SHFAP FROM PRODDTA.F4211 T0,PRODDTA.F4201 T1 WHERE ( ( T0.SDLNTY = 'CE' AND T0.SDDCTO NOT IN ( 'C5','CO','CY','SB','SQ' ) AND T0.SDNXTR = '560' ) AND ( T1.SHHOLD = ' ' AND T0.SDNXTR <> '999' AND T0.SDSONE = 0.000000 AND T0.SDSWMS <> 'I' AND T0.SDNXTR >= '560' AND T0.SDNXTR <= '560' ) ) AND ( T0.SDDOCO=T1.SHDOCO AND T0.SDDCTO=T1.SHDCTO AND T0.SDKCOO=T1.SHKCOO ) ORDER BY T1.SHCO ASC,T0.SDDCT ASC,T1.SHDOCO ASC,T0.SDLNID ASC
Thanks
Best Regards
PraveenBelow is the formatted code? Have you got indexes on the tables?
You may want to change your code to include the joins first and then the other predicates.
SELECT
T0.SDKCOO,
T0.SDDOCO,
T0.SDDCTO,
T0.SDLNID,
T0.SDMCU,
T0.SDCO,
T0.SDOKCO,
T0.SDOORN,
T0.SDOCTO,
T0.SDOGNO,
T0.SDRKCO,
T0.SDRORN,
T0.SDRCTO,
T0.SDRLLN,
T0.SDDMCT,
T0.SDDMCS,
T0.SDBALU,
T0.SDAN8,
T0.SDSHAN,
T0.SDPA8,
T0.SDDRQJ,
T0.SDPDDJ,
T0.SDOPDJ,
T0.SDADDJ,
T0.SDIVD,
T0.SDCNDJ,
T0.SDDGL,
T0.SDRSDJ,
T0.SDPEFJ,
T0.SDPPDJ,
T0.SDPSDJ,
T0.SDVR02,
T0.SDITM,
T0.SDLITM,
T0.SDAITM,
T0.SDLOCN,
T0.SDLOTN,
T0.SDFRGD,
T0.SDTHGD,
T0.SDFRMP,
T0.SDTHRP,
T0.SDEXDP,
T0.SDDSC1,
T0.SDDSC2,
T0.SDLNTY,
T0.SDNXTR,
T0.SDLTTR,
T0.SDEMCU,
T0.SDRLIT,
T0.SDKTLN,
T0.SDCPNT,
T0.SDRKIT,
T0.SDKTP,
T0.SDSRP1,
T0.SDSRP2,
T0.SDSRP3,
T0.SDSRP4,
T0.SDSRP5,
T0.SDPRP1,
T0.SDPRP2,
T0.SDPRP3,
T0.SDPRP4,
T0.SDPRP5,
T0.SDUOM,
T0.SDUORG,
T0.SDSOQS,
T0.SDSOBK,
T0.SDSOCN,
T0.SDSONE,
T0.SDQTYT,
T0.SDQRLV,
T0.SDCOMM,
T0.SDOTQY,
T0.SDUPRC,
T0.SDAEXP,
T0.SDPROV,
T0.SDTPC,
T0.SDAPUM,
T0.SDLPRC,
T0.SDUNCS,
T0.SDECST,
T0.SDCSTO,
T0.SDTCST,
T0.SDINMG,
T0.SDPTC,
T0.SDRYIN,
T0.SDDTBS,
T0.SDTRDC,
T0.SDASN,
T0.SDPRGR,
T0.SDCLVL,
T0.SDDSPR,
T0.SDDSFT,
T0.SDFAPP,
T0.SDCADC,
T0.SDKCO,
T0.SDDOC,
T0.SDDCT,
T0.SDODOC,
T0.SDODCT,
T0.SDOKC,
T0.SDPSN,
T0.SDDELN,
T0.SDPRMO,
T0.SDDFTN,
T0.SDTAX1,
T0.SDTXA1,
T0.SDEXR1,
T0.SDATXT,
T0.SDPRIO,
T0.SDRESL,
T0.SDBACK,
T0.SDSBAL,
T0.SDAPTS,
T0.SDLOB,
T0.SDEUSE,
T0.SDDTYS,
T0.SDCDCD,
T0.SDNTR,
T0.SDVEND,
T0.SDANBY,
T0.SDCARS,
T0.SDMOT,
T0.SDCOT,
T0.SDROUT,
T0.SDSTOP,
T0.SDZON,
T0.SDCNID,
T0.SDFRTH,
T0.SDAFT,
T0.SDFUF1,
T0.SDFRTC,
T0.SDFRAT,
T0.SDRATT,
T0.SDSHCM,
T0.SDSHCN,
T0.SDSERN,
T0.SDUOM1,
T0.SDPQOR,
T0.SDUOM2,
T0.SDSQOR,
T0.SDUOM4,
T0.SDITWT,
T0.SDWTUM,
T0.SDITVL,
T0.SDVLUM,
T0.SDRPRC,
T0.SDORPR,
T0.SDORP,
T0.SDCMGP,
T0.SDCMGL,
T0.SDGLC,
T0.SDCTRY,
T0.SDFY,
T0.SDSTTS,
T0.SDSO01,
T0.SDSO02,
T0.SDSO03,
T0.SDSO04,
T0.SDSO05,
T0.SDSO06,
T0.SDSO07,
T0.SDSO08,
T0.SDSO09,
T0.SDSO10,
T0.SDSO11,
T0.SDSO12,
T0.SDSO13,
T0.SDSO14,
T0.SDSO15,
T0.SDSLSM,
T0.SDSLCM,
T0.SDSLM2,
T0.SDSLC2,
T0.SDACOM,
T0.SDCMCG,
T0.SDRCD,
T0.SDGRWT,
T0.SDGWUM,
T0.SDANI,
T0.SDAID,
T0.SDOMCU,
T0.SDOBJ,
T0.SDSUB,
T0.SDLT,
T0.SDSBL,
T0.SDSBLT,
T0.SDLCOD,
T0.SDUPC1,
T0.SDUPC2,
T0.SDUPC3,
T0.SDSWMS,
T0.SDUNCD,
T0.SDCRMD,
T0.SDCRCD,
T0.SDCRR,
T0.SDFPRC,
T0.SDFUP,
T0.SDFEA,
T0.SDFUC,
T0.SDFEC,
T0.SDURCD,
T0.SDURDT,
T0.SDURAT,
T0.SDURAB,
T0.SDURRF,
T0.SDTORG,
T0.SDUSER,
T0.SDPID,
T0.SDJOBN,
T0.SDUPMJ,
T0.SDTDAY,
T1.SHKCOO,
T1.SHDOCO,
T1.SHDCTO,
T1.SHSFXO,
T1.SHMCU,
T1.SHCO,
T1.SHRORN,
T1.SHAN8,
T1.SHSHAN,
T1.SHTRDJ,
T1.SHPDDJ,
T1.SHVR01,
T1.SHDEL1,
T1.SHDEL2,
T1.SHINMG,
T1.SHHOLD,
T1.SHPLST,
T1.SHFRTH,
T1.SHOTOT,
T1.SHWUMD,
T1.SHCRRM,
T1.SHCRCD,
T1.SHFAP
FROM
PRODDTA.F4211 T0,
PRODDTA.F4201 T1
WHERE
( ( T0.SDLNTY = 'CE' AND
T0.SDDCTO NOT IN ( 'C5','CO','CY','SB','SQ' ) AND
T0.SDNXTR = '560' ) AND
( T1.SHHOLD = ' ' AND
T0.SDNXTR <> '999' AND
T0.SDSONE = 0.000000 AND
T0.SDSWMS <> 'I' AND
T0.SDNXTR >= '560' AND
T0.SDNXTR <= '560' ) ) AND
( T0.SDDOCO=T1.SHDOCO AND
T0.SDDCTO=T1.SHDCTO AND
T0.SDKCOO=T1.SHKCOO )
ORDER BY T1.SHCO ASC,
T0.SDDCT ASC,
T1.SHDOCO ASC,
T0.SDLNID ASCCheers
Sarma. -
How to tune the sql below? can you help on this?
SELECT wonum, MIN (changedate) opendate
FROM wostatus
GROUP BY wonum
Thanks in advance
Thanks,
BalaHi,
You should not focus on COST.
When tuning you need to put several different aspects into consideration.
If you have an execution plan, then post it as well ( remember to use the tag when posting examples! ), just like:
- database version
- information regarding indexes
- table statistics
See:
[How to post a SQL statement tuning request|HOW TO: Post a SQL statement tuning request - template posting
[When your query takes too long...|When your query takes too long ... -
Tune the SQL Query need a Suggestion
Hi,
There is a view created which takes 17seconds to execute the query, When i split the query and execute each query takes .15 seconds to execute. Below it the query which i need to improve the performance of the code please need your suggestion in order to tweek so that time take for execution become less
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_1 "Product Name",
TRIM (UPPER (serial_number_1)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_1 != 'NULL'
AND Serial_Number_1 != 'NULL'
AND C.Amid = A.Amid(+)
UNION
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_2 "Product Name",
TRIM (UPPER (serial_number_2)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_2 != 'NULL'
AND serial_number_2 != 'NULL'
AND C.Amid = A.Amid(+)
UNION
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_3 "Product Name",
TRIM (UPPER (serial_number_3)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_3 != 'NULL'
AND serial_number_3 != 'NULL'
AND C.Amid = A.Amid(+)
UNION
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_4 "Product Name",
TRIM (UPPER (serial_number_4)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_4 != 'NULL'
AND serial_number_4 != 'NULL'
AND C.Amid = A.Amid(+)
UNION
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_5 "Product Name",
TRIM (UPPER (serial_number_5)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_5 != 'NULL'
AND serial_number_5 != 'NULL'
AND C.Amid = A.Amid(+)
UNION
SELECT 'ERP' "Source",
Imv.Bill_To "Distibutor",
Imv.Ship_To "Reseller",
Ship_To_City "Reseller City",
Ship_To_State "Reseller State",
Edb2_Global.Country_Name_Theater(Imv.Ship_To_Country ,'COUNTRY') "Reseller Country",
Edb2_Global.Country_Name_Theater(Imv.Ship_To_Country ,'THEATER') "Reseller Theater",
Cl.Company_Name "Customer Name",
Cl.City "Customer City",
Cl.State "Customer State",
Edb2_Global.Country_Name_Theater(Cl.Country,'COUNTRY') "Customer Country",
Edb2_Global.Country_Name_Theater(Cl.Country,'THEATER') "Customer Theater",
Imv.So_Booked_Date "Sales Book Date",
Imv.Ship_Date "Ship Date",
Imv.Order_Number "Sales Order Number",
Imv.Cust_Po_Number "PO Number",
Cp.Item_Name "Product Name",
Cp.Product_Serial_Number "Product Serial Number",
TO_CHAR(Imv.contract_number)"Contract ID",
Imv.Service_Description "Support Name",
Imv.Service_Start_Date "Start Date",
Imv.Service_End_Date "Expire Date",
Imv.Header_Status "Header Status",
Imv.Line_Status "Line Status",
Imv.Line_Type "Line Type",
Imv.Termination_Reason "Termination Reason",
Cl.Location_Id "Location_id",
cp.id "Product_id"
FROM ib_support_contracts_mv imv,
customer_products cp,
customer_locations cl
WHERE Upper (Trim (Imv.Serial_Number)) = Upper (Trim (Cp.Product_Serial_Number(+)))
AND Cp.Location_Id = Cl.Location_Id(+)
There is a union for each and every query, Please suggest how to tweek
Thanks
SudhirTry
select distinct a.*
from (SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_1 "Product Name",
TRIM (UPPER (serial_number_1)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_1 != 'NULL'
AND Serial_Number_1 != 'NULL'
AND C.Amid = A.Amid(+)
union all
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_2 "Product Name",
TRIM (UPPER (serial_number_2)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_2 != 'NULL'
AND serial_number_2 != 'NULL'
AND C.Amid = A.Amid(+)
union all
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_3 "Product Name",
TRIM (UPPER (serial_number_3)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_3 != 'NULL'
AND serial_number_3 != 'NULL'
AND C.Amid = A.Amid(+)
union all
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_4 "Product Name",
TRIM (UPPER (serial_number_4)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_4 != 'NULL'
AND serial_number_4 != 'NULL'
AND C.Amid = A.Amid(+)
union all
SELECT 'Parature' "Source",
NULL "Distibutor",
reseller_name "Reseller",
NULL "Reseller City",
NULL "Reseller State",
A.Country "Reseller Country",
DECODE (a.state, 'APAC', 'APAC', 'EMEA', 'EMEA', NULL, 'Unknown', 'US' ) "Reseller Theater",
NULL "Customer Name",
NULL "Customer City",
NULL "Customer State",
NULL "Customer Country",
NULL "Customer Theater",
NULL "Sales Book Date",
NULL "Ship Date",
c.sales_order_number "Sales Order Number",
C.Po_Number "PO Number",
controller_model_number_5 "Product Name",
TRIM (UPPER (serial_number_5)) "Product Serial Number",
c.contract_id "Contract ID",
product_name "Support Name",
TO_DATE (c.contract_purchase_date) "Start Date",
TO_DATE (c.contract_expiration_date) "Expire Date",
NULL "Header Status",
NULL "Line Status",
NULL "Line Type",
NULL "Termination Reason",
NULL "Location_id",
NULL "Product_id"
FROM edb_assets c,
edb_accounts a
WHERE controller_model_number_5 != 'NULL'
AND serial_number_5 != 'NULL'
AND C.Amid = A.Amid(+)
union all
SELECT 'ERP' "Source",
Imv.Bill_To "Distibutor",
Imv.Ship_To "Reseller",
Ship_To_City "Reseller City",
Ship_To_State "Reseller State",
Edb2_Global.Country_Name_Theater(Imv.Ship_To_Country ,'COUNTRY') "Reseller Country",
Edb2_Global.Country_Name_Theater(Imv.Ship_To_Country ,'THEATER') "Reseller Theater",
Cl.Company_Name "Customer Name",
Cl.City "Customer City",
Cl.State "Customer State",
Edb2_Global.Country_Name_Theater(Cl.Country,'COUNTRY') "Customer Country",
Edb2_Global.Country_Name_Theater(Cl.Country,'THEATER') "Customer Theater",
Imv.So_Booked_Date "Sales Book Date",
Imv.Ship_Date "Ship Date",
Imv.Order_Number "Sales Order Number",
Imv.Cust_Po_Number "PO Number",
Cp.Item_Name "Product Name",
Cp.Product_Serial_Number "Product Serial Number",
TO_CHAR(Imv.contract_number)"Contract ID",
Imv.Service_Description "Support Name",
Imv.Service_Start_Date "Start Date",
Imv.Service_End_Date "Expire Date",
Imv.Header_Status "Header Status",
Imv.Line_Status "Line Status",
Imv.Line_Type "Line Type",
Imv.Termination_Reason "Termination Reason",
Cl.Location_Id "Location_id",
cp.id "Product_id"
FROM ib_support_contracts_mv imv,
customer_products cp,
customer_locations cl
WHERE Upper (Trim (Imv.Serial_Number)) = Upper (Trim (Cp.Product_Serial_Number(+)))
AND Cp.Location_Id = Cl.Location_Id(+)) a
Edited by: HuaMin on May 9, 2012 2:58 PM -
Request for tunning the SQL query
Hi,
I've a query mentioned below.I've tried it in different ways.But still it is taking much time.
And there are some 9 indexes created on the column siteid. And both the table having indexes.But still full table scanning occuring for both the tables. Can any one help on this.Or can anyone write the same query in a different way.
select r.recordkey,
r.orgid,
r.siteid,
r.class,
w.pscdate,
w.ascdate,
w.targstartdate,
w.targcompdate,
w.schedfinish,
w.actfinish,
w.estdur,
w.wonum,
w.mprn,
w.sihousename wositehousename,
w.sihouseno wositehouseno,
w.sistreet wositestreet,
w.sicounty wositecounty,
w.siposttown wositeposttown,
w.sipostcode wositepostcode,
w.workorderid
from relatedrecord r,
workorder w
where r.relatedreckey = case when w.parent is null then w.wonum else w.parent end
and r.orgid = w.orgid
and r.siteid = w.siteid
and r.relatedrecclass = 'WORKORDER'
Explain Plan Res:
Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop
SELECT STATEMENT Optimizer Mode=ALL_ROWS 38 K 4819
HASH JOIN 38 K 5 M 4819
TABLE ACCESS FULL MAXIMO.RELATEDRECORD 30 K 1 M 390
TABLE ACCESS FULL MAXIMO.WORKORDER 229 K 26 M 2922
Regards,
Arjun.Hi,
Some question.
1) r.relatedrecclass = 'WORKORDER', how many records are there with relatedrecclass as "WORKORDER" compared to the total number of records in that table (in percentage)
2) Do we have index on relatedrecclass? (if possible in combination with recordkey and class column)
3) What is the total number of records in both the table?
4) What is the expected number of records with the below query?
Regards
Anurag -
Tune the PL/SQL block with SQL_ID
Hi There,
I have found some recommendation in ADDM report as follows.
"" Action
Tune the PL/SQL block with SQL_ID "48trcns4mx5bk". Refer to the "Tuning
PL/SQL Applications" chapter of Oracle's "PL/SQL User's Guide and
Reference".
Related Object ""
can any one let me how to Tune the PL/SQL block with SQL_ID?
looking forward.
Db: 11.1.0.7
OS: OracleLinux5-86*64
Regards,
MohsinHi,
you can't tune a PL/SQL block directly. Instead, you'll need to profile it first (i.e. see how much time SQL statements inside it consume) using dbms_profiler or some other tool. If you find that the problem is that some SQL is called too frequently because of flawed PL/SQL logic, then you'll need to address that. Otherwise, you'll need to take the top time consuming statement(s) and tune it (them).
Best regards,
Nikolay -
How Can We Tune the Joins with "OR" Caluse ?
Hi
We've identified one Query in one of Our PL/SQL Stored Procedure which is taking huge time to fetch the records. I have simulated the problem as shown below. The problem Is, How can i tune the Jions with "OR" Clause. i have tried replacing them with Exists Caluse, But the Performance was not much was expected.
CREATE TABLE TEST
(ID NUMBER VDATE DATE );
BEGIN
FOR i IN 1 .. 100000 LOOP
INSERT INTO TEST
VALUES
(i, TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2452641, 2452641 + 364)), 'J'));
IF MOD(i, 1000) = 0 THEN
COMMIT;
END IF;
END LOOP;
END;
CREATE TABLE RTEST1 ( ID NUMBER, VMONTH NUMBER );
INSERT INTO RTEST1
SELECT ID, TO_NUMBER(TO_CHAR(VDATE,'MM'))
FROM TEST ;
CREATE TABLE RTEST2 ( ID NUMBER, VMONTH NUMBER );
INSERT INTO RTEST2
SELECT ID, TO_NUMBER(TO_CHAR(VDATE,'MM'))
FROM TEST;
CREATE INDEX RTEST1_IDX2 ON RTEST1(VMONTH)
CREATE INDEX RTEST2_IDX1 ON RTEST2(VMONTH)
ALTER TABLE RTEST1 ADD CONSTRAINT RTEST1_PK PRIMARY KEY (ID)
ALTER TABLE RTEST2 ADD CONSTRAINT RTEST2_PK PRIMARY KEY (ID)
SELECT A.ID, B.VMONTH
FROM RTEST1 A , RTEST2 B
WHERE A.ID = B.ID
AND ( (A.ID = B.VMONTH) OR ( B.ID = A.VMONTH ) )
BEGIN
DBMS_STATS.gather_table_stats(ownname => 'PHASE30DEV',tabname => 'RTEST1');
DBMS_STATS.gather_table_stats(ownname => 'PHASE30DEV',tabname => 'RTEST2');
DBMS_STATS.gather_index_stats(ownname => 'PHASE30DEV',indname => 'RTEST1_IDX1');
DBMS_STATS.gather_index_stats(ownname => 'PHASE30DEV',indname => 'RTEST2_IDX2');
DBMS_STATS.gather_index_stats(ownname => 'PHASE30DEV',indname => 'RTEST1_IDX2');
DBMS_STATS.gather_index_stats(ownname => 'PHASE30DEV',indname => 'RTEST2_IDX1');
END; Pls suggest !!!!!!! How can I tune the Joins with "OR" Clause.
Regards
RJI don't like it, but you could use a hint:
SQL>r
1 SELECT A.ID, B.VMONTH
2 FROM RTEST1 A , RTEST2 B
3 WHERE A.ID = B.ID
4* AND ( (A.ID = B.VMONTH) OR ( B.ID = A.VMONTH ) )
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=94 Card=2 Bytes=28)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'RTEST2' (Cost=94 Card=1 Bytes=7)
2 1 NESTED LOOPS (Cost=94 Card=2 Bytes=28)
3 2 TABLE ACCESS (FULL) OF 'RTEST1' (Cost=20 Card=100000 Bytes=700000)
4 2 BITMAP CONVERSION (TO ROWIDS)
5 4 BITMAP AND
6 5 BITMAP CONVERSION (FROM ROWIDS)
7 6 INDEX (RANGE SCAN) OF 'RTEST2_PK' (UNIQUE)
8 5 BITMAP OR
9 8 BITMAP CONVERSION (FROM ROWIDS)
10 9 INDEX (RANGE SCAN) OF 'RTEST2_IDX1' (NON-UNIQUE)
11 8 BITMAP CONVERSION (FROM ROWIDS)
12 11 INDEX (RANGE SCAN) OF 'RTEST2_PK' (UNIQUE)
Statistics
0 recursive calls
0 db block gets
300332 consistent gets
0 physical reads
0 redo size
252 bytes sent via SQL*Net to client
235 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
SQL>SELECT /*+ ordered use_hash(b) */ A.ID, B.VMONTH
2 FROM RTEST1 A, RTEST2 B
3 WHERE A.ID = B.ID AND(A.ID = B.VMONTH OR B.ID = A.VMONTH)
4 ;
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=175 Card=2 Bytes=28)
1 0 HASH JOIN (Cost=175 Card=2 Bytes=28)
2 1 TABLE ACCESS (FULL) OF 'RTEST1' (Cost=20 Card=100000 Bytes=700000)
3 1 TABLE ACCESS (FULL) OF 'RTEST2' (Cost=20 Card=100000 Bytes=700000)
Statistics
9 recursive calls
0 db block gets
256 consistent gets
156 physical reads
0 redo size
252 bytes sent via SQL*Net to client
235 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed -
Help required regarding tunning the query mentioned
HI all ,
Query mentioned below takes around 1 hr to complete . It's being used by the autoconfig kindly me in tunning it ..
QUery :
UPDATE WF_ITEM_ATTRIBUTE_VALUES WIAV SET WIAV.TEXT_VALUE = REPLACE(WIAV.TEXT_VALUE,:B1,:B2)
WHERE (WIAV.ITEM_TYPE, WIAV.NAME) = (SELECT WIA.ITEM_TYPE, WIA.NAME
FROM WF_ITEM_ATTRIBUTES WIA WHERE WIA.TYPE = 'URL'
AND WIA.ITEM_TYPE = WIAV.ITEM_TYPE
AND WIA.NAME = WIAV.NAME)
AND WIAV.TEXT_VALUE IS NOT NULL
AND INSTR(WIAV.TEXT_VALUE
, :B1) > 0
Plan :*
<pre>
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | UPDATE STATEMENT | | 453 | 14496 | 284K|
| 1 | UPDATE | WF_ITEM_ATTRIBUTE_VALUES | | | |
|* 2 | FILTER | | | | |
|* 3 | TABLE ACCESS FULL | WF_ITEM_ATTRIBUTE_VALUES | 453 | 14496 | 282K|
|* 4 | TABLE ACCESS BY INDEX ROWID| WF_ITEM_ATTRIBUTES | 1 | 33 | 2 |
|* 5 | INDEX UNIQUE SCAN | WF_ITEM_ATTRIBUTES_PK | 1 | | 1 |
Predicate Information (identified by operation id):
2 - filter(("SYS_ALIAS_2"."ITEM_TYPE","SYS_ALIAS_2"."NAME")= (SELECT /*+ */
"WIA"."ITEM_TYPE","WIA"."NAME" FROM "APPLSYS"."WF_ITEM_ATTRIBUTES" "WIA" WHERE
"WIA"."NAME"=:B1 AND "WIA"."ITEM_TYPE"=:B2 AND "WIA"."TYPE"='URL'))
3 - filter("SYS_ALIAS_2"."TEXT_VALUE" IS NOT NULL AND
INSTR("SYS_ALIAS_2"."TEXT_VALUE",:Z)>0)
4 - filter("WIA"."TYPE"='URL')
5 - access("WIA"."ITEM_TYPE"=:B1 AND "WIA"."NAME"=:B2)
</pre>
Index :*
<pre>
INDEX_NAME COLUMN_NAME
APPLSYS WF_ITEM_ATTRIBUTE_VALUES_PK 1 ITEM_TYPE
2 ITEM_KEY
3 NAME
</pre>
regds
Rahul
Edited by: RahulG on Jan 2, 2009 10:47 PM
Edited by: RahulG on Jan 2, 2009 10:48 PMRahulG wrote:
HI all ,
Query mentioned below takes around 1 hr to complete . It's being used by the autoconfig kindly me in tunning it ..
A few notes:
1. Your query is using bind variables. If you're already on 9i or later (probably 9iR2 according to plan output), this statement will be subject to bind variable peeking and therefore the output of EXPLAIN PLAN is only of limited use, since the actual execution plan might be different and/or might be based on different cardinality estimates based on the actual bind values peeked at hard parse time. You can use the V$SQL_PLAN view to get the actual execution plan(s) if the statement is still cached in the shared pool, from 10g on DBMS_XPLAN.DISPLAY_CURSOR is available for that purpose.
2. The execution plan posted suggests that only 453 rows will correspond to the filter criteria (but, as mentioned in 1. is based on an unknown bind variable value when using EXPLAIN PLAN), and probably therefore the optimizer didn't unnest the subquery but runs this as recursive FILTER query potentially for each row passing the filter criteria on the driving table WF_ITEM_ATTRIBUTE_VALUES. Depending on the actual number of rows this might be inefficient, and unnesting the subquery and turning it into a join might be more appropriate. This might accomplished e.g. by providing more representative statistics to the optimizer (are the statistics up-to-date?).
Although you can't change the SQL you could try this manually by using the UNNEST hint to see if it makes any difference in the execution plan (and run time):
WHERE (WIAV.ITEM_TYPE, WIAV.NAME) = (SELECT /*+ UNNEST */ WIA.ITEM_TYPE, WIA.NAME
...3. The composite index WF_ITEM_ATTRIBUTE_VALUES_PK can only be used on the first column ITEM_TYPE for effective index access, the NAME column would have to be used as filter on all index leaf blocks that would be found using a range scan on ITEM_TYPE. This might be quite inefficient, and/or might lead to a lot of rows/blocks that need to be visited in the table using this index access path.
4. You could try to trace the execution by enabling extended SQL trace, e.g. using the (undocumented) DBMS_SUPPORT package in 9i. Running the "tkprof" utility on the generated trace file tells you the actual row source cardinalities (which can then be compared to the estimates of the optimizer) and - if the "waits" have been enabled - what your statement has waited for most.
Regards,
Randolf
Oracle related stuff blog:
http://oracle-randolf.blogspot.com/
SQLTools++ for Oracle (Open source Oracle GUI for Windows):
http://www.sqltools-plusplus.org:7676/
http://sourceforge.net/projects/sqlt-pp/ -
Trying to tune a SQL statement
Please nee your help
The sql statement below works perfectly and speed fast
SELECT 0,
:"gloSpaFolioID",
SPA_ITEM_ID,
:"Text Box 2",
:"gloLogin",
:"gloLogin"
FROM SPA_ITEM
WHERE UPC_CODE=:"Text Box 1"
AND LOCATION=:"gloLocation"
But when append with the insert statement below, it slow down.
Does anyone have an idea on how I could tune this statement?
INSERT INTO SPA_FOLIO_ITEM
SPA_FOLIO_ITEM_ID,
SPA_FOLIO_ID,
SPA_ITEM_ID,
QTY,
CREATE_STAFF_ID,
CHANGE_STAFF_ID
SELECT 0,
:"gloSpaFolioID",
SPA_ITEM_ID,
:"Text Box 2",
:"gloLogin",
:"gloLogin"
FROM SPA_ITEM
WHERE UPC_CODE=:"Text Box 1"
AND LOCATION=:"gloLocation"
Thanks,The sql statement below works perfectly and speed fastIf the query starts returning rows quickly (like from sql plus) that doesn't mean the entire query is fast.
If I have a 300 million row table and do: select * from huge_table, I will start seeing rows in an instant, but the full table scan takes far longer. -
How to Tune the Transactions/ Z - reports /Progr..of High response time
Dear friends,
in <b>ST03</b> work load anlysis menu.... there are some z-reports, transactions, and some programmes are noticed contineously that they are taking the <b>max. response time</b> (and mostly >90%of time is DB Time ).
how to tune the above situation ??
Thank u.Siva,
You can start with some thing like:
ST04 -> Detail Analysis -> SQL Request (look at top disk reads and buffer get SQL statements)
For the top SQL statements identified you'd want to look at the explain plan to determine if the SQL statements is:
1) inefficient
2) are your DB stats up to date on the tables (note up to date stats does not always means they are the best)
3) if there are better indexes available, if not would a more suitable index help?
4) if there are many slow disk reads, is there an I/O issue?
etc...
While you're in ST04 make sure your buffers are sized adequately.
Also make sure your Oracle parameters are set according to this OSS note.
Note 830576 - Parameter recommendations for Oracle 10g -
How to tune this SQL (takes long time to come up with results)
Dear all,
I have sum SQL which takes long time ... can any one help me to tune this.... thank You
SELECT SUM (n_amount)
FROM (SELECT DECODE (v_payment_type,
'D', n_amount,
'C', -n_amount
) n_amount, v_vou_no
FROM vouch_det a, temp_global_temp b
WHERE a.v_vou_no = TO_CHAR (b.n_column2)
AND b.n_column1 = :b5
AND b.v_column1 IN (:b4, :b3)
AND v_desc IN (SELECT v_trans_source_code
FROM benefit_trans_source
WHERE v_income_tax_app = :b6)
AND v_lob_code = DECODE (:b1, :b2, v_lob_code, :b1)
UNION ALL
SELECT DECODE (v_payment_type,
'D', n_amount,
'C', -n_amount
* -1 AS n_amount,
v_vou_no
FROM vouch_details a, temp_global_temp b
WHERE a.v_vou_no = TO_CHAR (b.n_column2)
AND b.n_column1 = :b5
AND b.v_column1 IN (:b12, :b11, :b10, :b9, :b8, :b7)
AND v_desc IN (SELECT v_trans_source_code
FROM benefit_trans_source
WHERE income_tax_app = :b6)
AND v_lob_code = DECODE (:b1, :b2, v_lob_code, :b1));
Thank You.....Thanks a lot,
i did change the SQL it works fine but slows down my main query.... actually my main query is calling a function which does the sum......
here is the query.....?
select A.* from (SELECT a.n_agent_no, a.v_agent_code, a.n_channel_no, v_iden_no, a.n_cust_ref_no, a.v_agent_type, a.v_company_code,
a.v_company_branch, a.v_it_no, bfn_get_agent_name(a.n_agent_no) agentname,
PKG_AGE__TAX.GET_TAX_AMT(:P_FROM_DATE,:P_TO_DATE,:P_LOB_CODE,A.N_AGENT_NO) comm,
c.v_ird_region
FROM agent_master a, agent_lob b, agency_region c
WHERE a.n_agent_no = b.n_agent_no
AND a.v_agency_region = c.v_agency_region
AND :p_lob_code = DECODE(:p_lob_code,'ALL', 'ALL',b.v_line_of_business)
AND :p_channel_no = DECODE(:p_channel_no,1000, 1000,a.n_channel_no)
AND :p_agency_group = DECODE(:p_agency_group,'ALL', 'ALL',c.v_ird_region)
group by a.n_agent_no, a.v_agent_code, a.n_channel_no, v_iden_no, a.n_cust_ref_no, a.v_agent_type, a.v_company_code, a.v_company_branch, a.v_it_no, bfn_get_agent_name(a.n_agent_no) ,
BPG_AGENCY_GEN_ACL_TAX.BFN_GET_TAX_AMOUNT(:P_FROM_DATE,:P_TO_DATE,:P_LOB_CODE,A.N_AGENT_NO),
c.v_ird_region
ORDER BY c.v_ird_region, a.v_agent_code DESC)
A
WHERE (COMM < :P_VAL_IND OR COMM >=:P_VAL_IND1);
Any idea to make this faster....
Thank You... -
Tunning PL/SQL with sql dynamic returning cursor
Hi
How can I to tunning a Stored Procedure with Dynamic Cursor that return a Cursor (resultset to VB), is very slow1. Run your app (or better yet your PL/SQL procedure) with SQL_TRACE=TRUE and analyze trace file (TKPROF report e.g.)
2. Tune SQL executed by PL/SQL procedure directly. Copy the SQL from the procedure, run it in SQL*Plus [with SET AUTOTRACE ON] and analyze exec plan, statistics etc.
3. profile your procedure to figure out which part of it takes what (time, resources etc.)
Maybe you are looking for
-
Can you convert a PDF to InDesign?
I have another question: Is there any way to convert PDF files back to InDesign without downloading a converter plug-in? It seems to make sense that Adobe would have a tool for this function, but I haven't had any luck in finding it. Any help woul
-
Unable to size a pop-window that redirects to a regular url using dynamic PL/SQL
Hello, I have an instruction like this in a pluggin: begin htp.p('<font size="3" color="FireBrick">Cannot find? Search on </font>' || '<a href="http://www.google.com" target="_blank"><font size="4" color="FireBrick"><b>Google</b></a>'); end; It d
-
How to get the IP of the client when TCP connect in the server
How to get the IP of the client when TCP connect in the server. The only parameter got from the connection is connectionID. Solved! Go to Solution.
-
Installed Leopard a few days ago and all is going well. One bug that I have, however, is that InDesign will not hide. Does that make sense? In other words when I go to my finder for example and hit "hide all" so the only thing I see is the desktop, I
-
How do I choose one of my favorite song or album from my iPhone while I connected to my car start directly from that chosen album.Thanks