oracle查询200W数据需要1S,64W数据表,查询数据执行时间为139s,优化为1s-Oracle

本文详细记录了优化Oracle SQL查询的过程,针对64W数据表,查询执行时间从139秒降至1秒。首先通过创建索引减少执行时间至54秒,然后调整SQL语句结构,优化至45秒。进一步通过调整系统参数如db_cache_size、large_pool_size和sort_area_size,但未见明显效果。最后,通过10046事件分析发现direct path read temp和direct path write temp是主要瓶颈,并通过增大pga_aggregate_target至300M,使查询时间降低到1秒以内。
摘要由CSDN通过智能技术生成

64W数据表,查询数据执行时间为139s,优化为1s

AFC_TXN.TXN_DATA_FUNC.fetchbatch包中的SQL查询语句过慢

cut_batch表大约有64W数据,其中执行参数为substr(t.BATCH_ID,1,2)=’01’的语句为139s

给cut_batch表添加索引create index idx_cut_batch2 on cut_batch(substr(batch_id,1,2))后,执行时间为54s

修改语句为以下写法:

SELECT

os.AFC_DEVICE_ID      AS AFC_DEVICE_ID,

os.BATCH_ID           AS BATCH_ID,

os.DATA_DIRECTORY     AS DATA_DIRECTORY,

os.RECORD_COUNT       AS RECORD_COUNT

FROM (

SELECT

t.AFC_DEVICE_ID      AS AFC_DEVICE_ID,

t.BATCH_ID           AS BATCH_ID,

t.DATA_DIRECTORY     AS DATA_DIRECTORY,

t.RECORD_COUNT       AS RECORD_COUNT,

SUM(t.RECORD_COUNT) OVER (ORDER BY BATCH_ID ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS TOTAL_TXN

FROM

(SELECT

t.AFC_DEVICE_ID      AS AFC_DEVICE_ID,

t.BATCH_ID           AS BATCH_ID,

t.DATA_DIRECTORY     AS DATA_DIRECTORY,

t.RECORD_COUNT       AS RECORD_COUNT,

t.SC_BATCH_ID AS SC_BATCH_ID

FROM cut_batch_test t

WHERE substr(t.BATCH_ID,1,2) = :”SYS_B_0″) t

WHERE  t.SC_BATCH_ID IS NULL

) os

WHERE os.TOTAL_TXN < 300;

其执行速度达到45s

修改以下oracle系统参数

alter system set db_cache_size=200M scope=both;

alter system set large_pool_size=50M scope=both

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值