设为首页 加入收藏

TOP

64W数据表,查询数据执行时间为139s,优化为1s(一)
2014-11-24 08:22:01 来源: 作者: 【 】 浏览:2
Tags:64W 数据 查询 执行 时间 139s 化为
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;
alter system set sort_area_size=10485760 scope=spfile;
其SQL执行速度未改变。
10046 事件按照收集信息内容,可以分成4个级别:
Level 1: 等同于SQL_TRACE 的功能
Level 4: 在Level 1的基础上增加收集绑定变量的信息
Level 8: 在Level 1 的基础上增加等待事件的信息
Level 12:等同于Level 4+Level 8, 即同时收集绑定变量信息和等待事件信息
通过开启会话调试查询其SQL具体在oracle内部做了什么操作:
SQL>alter session set events = '10046 trace name context forever,level 12';
SQL>执行查询语句SQL
SQL>alter session set events = '10046 trace name context off';
[root@localhost:/app/oracle/diag/rdbms/xxx/xxx/trace/]tkprof AFC010C1_ora_18100.trc /root/AFC010C1_ora_18100.txt
查看AFC010C1_ora_18100.txt内容如下:
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,:"SYS_B_0",:"SYS_B_1") = :"SYS_B_2") t
WHERE t.SC_BATCH_ID IS NULL
) os
WHERE os.TOTAL_TXN < :"SYS_B_3"
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 1 0 0
Fetch 1 0.95 46.97 266 16819 20 100
------- ------ --
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle临时表游标未释放导致回滚.. 下一篇如何从PowerDesign数据库建模导出..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)