【故障处理141119】一次数据库不繁忙时一条sql语句2个执行计划导致业务超时的故障处理(七)

2015-01-25 20:39:29 · 作者: · 浏览: 40
s') START_DATE, to_char(END_DATE, 'yyyy-mm-dd hh24:mi:ss') END_DATE, to_char(ITEM_ID) ITEM_ID, to_char(d.USER_ID_A) USER_ID_A, d.PACKAGE_ID, d.PRODUCT_ID FROM uop_crm2.TF_B_TRADE_SVC d, uop_crm2.tf_b_trade e WHERE e.user_id = TO_NUMBER('3114042824225916') AND e.cancel_tag = '0' AND e.accept_month = TO_NUMBER('11') AND d.trade_id = e.trade_id AND d.user_id = TO_NUMBER('3114042824225916') AND d.accept_month = TO_NUMBER('11') AND d.modify_tag in ('1', 'B') AND SYSDATE < d.end_date AND d.start_date < d.end_date) t4 WHERE t1.product_id(+) = t4.product_id AND t2.package_id(+) = t4.package_id AND t3.service_id(+) = t4.service_id; 3,

?

?

alter system set use_stored_outlines=crm2_cat1;

?

原因分析

?

\

\

此处为什么oracle优化器选择走了IDX1_TF_B_TRADE_SVC的service_id列索引跳扫而没有使用PK_TF_B_TRADE_SVC上的trade_id呢,我们可以看一下索引的信息:

?

SQL> l
  1* select index_name,blevel,AVG_LEAF_BLOCKS_PER_KEY,AVG_DATA_BLOCKS_PER_KEY from dba_indexes where TABLE_NAME='TF_B_TRADE_SVC'
SQL> /

INDEX_NAME                         BLEVEL AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY
------------------------------ ---------- ----------------------- -----------------------
IDX1_TF_B_TRADE_SVC                     2                       1                       1
PK_TF_B_TRADE_SVC                       3                       1                       1

当两个索引AVG_LEAF_BLOCKS_PER_KEY+AVG_DATA_BLOCKS_PER_KEY的值相同时,就判断blevel,此处由于IDX1_TF_B_TRADE_SVC的blevel=2,oracle

?

认为走这个索引会有较少的IO,而sql语句中正好有service_id的谓词,因此选择走了跳扫。详细描述参考为什么Oracle不使用我的索引?! 一文。

?

TABLE_NAME                     TABLE_OWNER                    INDEX_NAME                     COLUMN_NAME   COLUMN_POSITION
------------------------------ ------------------------------ ------------------------------ ------------- ---------------
TF_B_TRADE_SVC                 UCR_CRM2                       IDX1_TF_B_TRADE_SVC            USER_ID                     1
TF_B_TRADE_SVC                 UCR_CRM2                       IDX1_TF_B_TRADE_SVC            SERVICE_ID                  2

TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              TRADE_ID                    1
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              ACCEPT_MONTH                2
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              USER_ID                     3
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              SERVICE_ID                  4
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              START_DATE                  5
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              PRODUCT_ID                  6
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              PACKAGE_ID                  7
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              USER_ID_A                   8
TF_B_TRADE_SVC                 UCR_CRM2                       PK_TF_B_TRADE_SVC              MODIFY_TAG                  9


?

------------------结束---------------------