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

  • Need to tune the sql query

    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.Thanks

    So 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

  • Help me tune the sql query

    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 GR

    sorry 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

  • Tune the SQL statement

    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
    Praveen

    Below 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,
    Bala

    Hi,
    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
    Sudhir

    Try
    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,
    Mohsin

    Hi,
    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
    RJ

    I 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 PM

    RahulG 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 slow

    1. 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