12 c环境下分库分表改造查询优化

  

某交易查询库主要使用Oracle 12.1.0.2.0的内存中的特性缓存三张按月分区的大表,在内存中组件主要是针对OLAP应用的,而这种应用绝大部分的操作都是查询,而且很多时候只关心表中特定的一个或多个列,所以内存中的特性还可以指定只把表中的特定的一个或多个列加载到在内存区域当中。开始的情况由于并发等多种因素,跑的还是很快的。随着时间的推移,三个表的数据量越来越大,所占用内存资源也越来越多。总是出现这样那样的问题。如今年上半年该系统的一次故障。

  

完成r
1选择wait_class_id wait_class,计数()问
2 dba_hist_active_sess_history
3在12073年和12074年之间snap_id
4 group by wait_class_id wait_class
5
命令3 desc

  

WAIT_CLASS_ID WAIT_CLASS问   <人力资源/>   

12472用户I/O 1740759767
2363
3386400367提交2301
1893977003其他1093
3875070507并发132
4217450380应用程序67
4108307767系统I/O 21
3290255840配置1

  选择

8行。

  

查询对应的IO情况所反应到数据库中的事件是什么
EVENT_ID事件问

  <人力资源/>   

3056446529阅读其他会话6149
834992820 db文件并行读取4756
2652584166 db文件顺序读取1418
3926164927直接路径读取993
506183215 db文件分散阅读56
根据其等待时间,查看对应的SQL文本为:

  

选择
(选择tmp_page。
, rownum row_id
(选择t.TRAN_UUID、
t.IN_MNO
t。,
t.CARD_TYP EX_MNO merchantCode
t.CARD_DISP_NO,
t.TRAN_RESPONSE_CD,
t.TRAN_CD,
t.TRAN_STS,
t.TRAN_SEQ_NO,
,
t.TRAN_BAT_NO to_char (t。TRAN_DT TRAN_DATE_TIME, '名称'),
to_char (t。TRAN_DATE_TIME, TRAN_TM HH24MISS),
t。,
t.TERMINAL_NUM TRAN_IN_MOD payWay
t.POS_SIGN_FLG,
t.TRAN_AMT,
t.RECEIVER_FEE_AMT,
t.TRAN_FLG,
t。ROOT_XXXX_ORG_NM belongtoOrgNm,
t。BUSINESS_EMP_NM empNm,
t。XXXX_ORG_NM directlyOrg
t.XXXX_ORG_NO,
t。XXXX_ORG_PATH
从T_SSP_TRANDATA_MPOS t t
。TRAN_DATE TO_DATE之间(:1、“名称”)和
TO_DATE(2, '名称')
和t。ROOT_XXXX_ORG_NO=: 3
和t。XXXX_ORG_PATH: 4 | |‘%’
ORDER BY t。TRAN_DATE_TIME DESC) tmp_page
rownum & lt;=:5)
row_id祝辞

: 6;   

执行计划类似如下:
 12 c环境下分库分表改造查询优化

  

 12 c环境下分库分表改造查询优化”> <br/>使用心田;对比相同时间不同日期时间段,查看该SQL在前一天单次执行时间为1168毫秒,约0.01分。执行频率为171年,故障时间段单次执行时间为102929毫秒,约1.71分。执行的频率为248。故障时间段要比平时多执行77次。多出131.67分。<br/>推测故障时间段明显比前一天的执行频率要高。是否存在前台的用户点击某个按钮,等了半天没响应,然后就一直点,导致这一个SQL直重复的运行。</p>
  <p> IO资源几乎耗尽,会话一个在进行把磁盘上的数据块读到内存,会话b,会话c同时也请求这个数据块。就导致了b, c阅读其他会话。<br/>直接路径读取表小的时候将数据读到缓存中,表不断增大后,甲骨文算法干预在大于2%的缓存后会采用直接路劲读的方式,跳过加载缓存。大量的反复读取磁盘IO会将IO耗尽,决定设定10949事件关闭该特性。<br/>要使用内存中的特性,需要设置parallel_degree_policy=汽车和parallel_force_local=false,才能够真正意义上的启动我特性,不然只是执行计划中的启用,是假象。<br/>后将parallel_degree_policy改为汽车。后又重新加载T_SSP_TRANDATA_MPOS表全部进入在内存中。这么一折腾后,系统稳定了一段时间,可后期还有这样那样的问题。<br/>在代码不改动的情况下,开发和架构部同事进行了拆表分库的方案。三个大表废弃一张表,另外两个表拆分成为4个表,并按月又进行了拆分,一个月有四个小表。新库迁移完成,投产当晚,进行数据校验的同时发现该查询功能还是跑不出结果该SQL单次执行时间150年代以<br/>上,改造这么久无法交差啊。<br/> <img src=12 c环境下分库分表改造查询优化