ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL优化案例(谓词越界)

2020-07-06 16:38:24  阅读:417  来源: 互联网

标签:00 谓词 DET 越界 KEY TACTIC SQL RCA YMD


SQL Monitoring Report

SQL Text
------------------------------
SELECT TACTIC_DET_ID,
       CALC_ID,
       ORG_NO,
       CONS_ID,
       CONS_NO,
       ESTI_PQ,
       ESTI_AMT,
       YM,
       YMD,
       COLL_TIME,
       ESTI_DATE,
       ACT_AMT,
       BASE_COMP_TIME,
       BASE_TACTIC_NO,
       OVERDRAFT_VALUE,
       CONS_STATUS,
       DIRECTIVE_ID,
       EXECUTE_TYPE,
       EXECUTE_SCHEME,
       EXECUTE_DATE,
       EXECUTE_STATUS,
       TRANSIT_HANDLE_ID,
       TRANSIT_STEP,
       MR_SECT_NO,
       REMARK,
       CP_NO,
       CP_STATUS,
       CP_PRIO,
       CHANNEL_TYPE
  FROM A_RCA_TACTIC_DET A
 WHERE A.CONS_NO = :B5
   AND A.ORG_NO LIKE :B4 || '%'
   AND A.YM BETWEEN SUBSTR(:B2, 1, 6) AND :B3
   AND A.YMD >= :B2
   AND A.YMD <= :B1
 ORDER BY A.ESTI_DATE DESC

Global Information
------------------------------
 Status              :  EXECUTING                                                                   
 Instance ID         :  2                                                                           
 Session             :  xxx (1709:38751)                                                           
 SQL ID              :  cu1ktstbq4axt                                                               
 SQL Execution ID    :  33555216                                                                    
 Execution Started   :  07/03/2020 14:28:18                                                         
 First Refresh Time  :  07/03/2020 14:28:24                                                         
 Last Refresh Time   :  07/03/2020 14:30:29                                                         
 Duration            :  131s                                                                        
 Module/Action       :  ro.cons.service.ConsViewService.getRcaTacticInfo/TH45-@dyxepm1_1:0703142819 
 Service             :  app1                                                                        
 Program             :  JDBC Thin Client                                                            

Binds
========================================================================================================================
| Name | Position |     Type      |                                       Value                                        |
========================================================================================================================
| :B5  |        1 | VARCHAR2(32)  | 6xxxxxxxx7                                                                         |
| :B4  |        2 | VARCHAR2(128) | 3xxxxx0                                                                            |
| :B2  |        3 | VARCHAR2(32)  | 2xxxxxxx3                                                                           |
| :B3  |        4 | VARCHAR2(32)  | 2xxxx8                                                                             |
| :B2  |        5 | VARCHAR2(32)  | 2xxxxxxxx3                                                                           |
| :B1  |        6 | VARCHAR2(32)  | 2xxxxxxxx3                                                                           |
========================================================================================================================

Global Stats
==================================================================================
| Elapsed |   Cpu   |    IO    | Concurrency | Cluster  | Buffer | Read  | Read  |
| Time(s) | Time(s) | Waits(s) |  Waits(s)   | Waits(s) |  Gets  | Reqs  | Bytes |
==================================================================================
|     131 |    5.78 |      118 |        0.00 |     7.91 |   261K | 19313 | 302MB |
==================================================================================

SQL Plan Monitoring Details (Plan Hash Value=3175721642)
===============================================================================================================================================================================================
| Id   |               Operation                |           Name           |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Read  | Read  | Activity |       Activity Detail        |
|      |                                        |                          | (Estim) |      | Active(s) | Active |       | (Actual) | Reqs  | Bytes |   (%)    |         (# samples)          |
===============================================================================================================================================================================================
|    0 | SELECT STATEMENT                       |                          |         |      |           |        |     1 |          |       |       |          |                              |
|    1 |   SORT ORDER BY                        |                          |       1 |   32 |           |        |     1 |          |       |       |          |                              |
|    2 |    FILTER                              |                          |         |      |           |        |     1 |          |       |       |          |                              |
|    3 |     PARTITION RANGE ITERATOR           |                          |       1 |   31 |           |        |     1 |          |       |       |          |                              |
| -> 4 |      TABLE ACCESS BY LOCAL INDEX ROWID | A_RCA_TACTIC_DET         |       1 |   31 |       135 |     +1 |     2 |        0 | 15181 | 237MB |    70.23 | gc cr grant 2-way (4)        |
|      |                                        |                          |         |      |           |        |       |          |       |       |          | Cpu (4)                      |
|      |                                        |                          |         |      |           |        |       |          |       |       |          | db file sequential read (84) |
| -> 5 |       INDEX RANGE SCAN                 | IDX_A_RCA_TACTIC_DET_YMD |       1 |   31 |       133 |     +3 |     2 |     848K |  4231 |  66MB |    29.77 | gc cr grant 2-way (3)        |
|      |                                        |                          |         |      |           |        |       |          |       |       |          | Cpu (1)                      |
|      |                                        |                          |         |      |           |        |       |          |       |       |          | db file sequential read (35) |
===============================================================================================================================================================================================

select num_rows,blocks,last_analyzed from dba_tables where table_name='A_RCA_TACTIC_DET';
300090470	9391916	2019/11/21 4:42:00

SELECT * FROM DBA_TAB_COL_STATISTICS WHERE TABLE_NAME='A_RCA_TACTIC_DET';
CONS_NO 11736064
YMD     1236       存在直方图信息

select BLEVEL,distinct_keys,leaf_blocks,clustering_factor from dba_indexes where index_name in('IDX_A_RCA_TACTIC_DET_YMD','LOC_A_RCA_TACTIC_DET_CONSNO')
2		11736064	2558042	295677239
2		1236	    1516690	9088619

直接做个10053trace
Column (#9): YMD(
AvgLen: 9 NDV: 1236 Nulls: 687 Density: 0.000024
Histogram: HtBal #Bkts: 254 UncompBkts: 254 EndPtVals: 85
Using prorated density: 0.000000 of col #9 as selectvity of out-of-range/non-existent value pred

我们发现YMD的是越界的,不在列统计信息high_value,low_value之间,导致执行计划评估不正确。
(如果想知道cost的具体计算方式可以参SQL优化核心思想这本书,
cost = blevel +ceiling(leaf_blocks * effective index selectivity) +ceiling(clustering_factor * effective table selectivity)
且选择性计算方法是和high_value,low_value等值存在关联)。 

解决方案:

重新收集统计信息。

 
profile绑定执行计划(具体操作:https://www.cnblogs.com/muzisanshi/p/11889727.html)

select * from table(dbms_xplan.display_awr('cu1ktstbq4axt'))
	Plan hash value: 948946192
	 
	------------------------------------------------------------------------------------------------------------------------------------
	| Id  | Operation                            | Name                        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
	------------------------------------------------------------------------------------------------------------------------------------
	|   0 | SELECT STATEMENT                     |                             |       |       |    34 (100)|          |       |       |
	|   1 |  SORT ORDER BY                       |                             |     1 |   219 |    34   (3)| 00:00:01 |       |       |
	|   2 |   FILTER                             |                             |       |       |            |          |       |       |
	|   3 |    PARTITION RANGE ITERATOR          |                             |     1 |   219 |    33   (0)| 00:00:01 |   KEY |   KEY |
	|   4 |     TABLE ACCESS BY LOCAL INDEX ROWID| A_RCA_TACTIC_DET            |     1 |   219 |    33   (0)| 00:00:01 |   KEY |   KEY |
	|   5 |      INDEX RANGE SCAN                | LOC_A_RCA_TACTIC_DET_CONSNO |     8 |       |    31   (0)| 00:00:01 |   KEY |   KEY |
	------------------------------------------------------------------------------------------------------------------------------------

	Plan hash value: 3175721642
	 
	---------------------------------------------------------------------------------------------------------------------------------
	| Id  | Operation                            | Name                     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
	---------------------------------------------------------------------------------------------------------------------------------
	|   0 | SELECT STATEMENT                     |                          |       |       |    32 (100)|          |       |       |
	|   1 |  SORT ORDER BY                       |                          |     1 |   226 |    32   (4)| 00:00:01 |       |       |
	|   2 |   FILTER                             |                          |       |       |            |          |       |       |
	|   3 |    PARTITION RANGE ITERATOR          |                          |     1 |   226 |    31   (0)| 00:00:01 |   KEY |   KEY |
	|   4 |     TABLE ACCESS BY LOCAL INDEX ROWID| A_RCA_TACTIC_DET         |     1 |   226 |    31   (0)| 00:00:01 |   KEY |   KEY |
	|   5 |      INDEX RANGE SCAN                | IDX_A_RCA_TACTIC_DET_YMD |     1 |       |    31   (0)| 00:00:01 |   KEY |   KEY |
	---------------------------------------------------------------------------------------------------------------------------------
	

  

标签:00,谓词,DET,越界,KEY,TACTIC,SQL,RCA,YMD
来源: https://www.cnblogs.com/muzisanshi/p/13255463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有