oracle 过去5分钟,oracle程序性能优化实录-优化实例一(从1小时到5分钟)
根据两个业务明细数据,根据当前月份生成合并的明细和汇总。当前月份根据当前时间取得,每日执行一次,每个月反复进行,直到当月结束,保留当月的最后一次数据作为历史存留。
涉及到的表:
(1)sf_chargemonth:业务明细数据,按月做分区,分区关键字chargemonth,每月数据100万。
(2)sf_ystzmonth:第二张业务明细数据,无分区。每月数据2万。
()RT_2109_suo_mx:合并的明细数据,无分区,合并后数据规模为每月100万。
(4)RT_2109_suo:合并的汇总数据,每月数据50条。
原来的执行过程共分三个步骤,执行时间近1小时:
(1)删除掉RT_2109_suo和RT_2109_suo_mx当月的数据。
Delete from RT_2109_suo
where chargemonth='201703';
Delete from RT_2109_suo_mx
where chargemonth=‘201703’;
(2)合并明细数据并添加到RT_2109_suo_mx。
Insert into
RT_2109_suo_mx(chargemonth,dept_id,housecode,field1)
Select ‘201703’,
dept_id,housecode,sum(field1)field1
(select
dept_id,housecode,field1 from sf_chargemonth where
substr(chargemonth,1,6)=’201703’
Union all
Select
dept_id,housecode,field1 from sf_ystzmonth where
substr(chargemonth,1,6)<=’201703’ and
cwmonth=’201703’
) a Group by
dept_id,housecode
(3)汇总RT_2109_suo_mx到RT_2109_suo。
Insert into
RT_2109_suo(chargemonth,dept_id,field1)
Select
‘201703’,dept_id,sum(field1) field1
From
RT_2109_suo_mx
Where
chargemonth=’201703’
Group by
dept_id;
1、RT_2109_suo_mx表结构的优化
该表每月固定生成,并且都是以月作为一个关键字,首先考虑的是给该表做分区。
CREATE TABLE
RT_2109_suo_mx2
PARTITION
BY list(CHARGEMONTH) (
PARTITIONp201703 values ('201703'),
PARTITIONp201704 values ('201704')
) as select *
from RT_2109_suo_mx;
droptable RT_2109_suo_mx;
altertable RT_2109_suo_mx2 rename to
RT_2109_suo_mx;
altertable RT_2109_suo_mx add primary key (CHARGEMONTH,
DEPT_ID,HOUSECODE);
2、RT_2109_suo_mx删除的优化
原来的删除语句为:Delete
from RT_2109_suo_mx where chargemonth=’201703’;
原来的删除只是利用了索引。表做分区后的分析效果如下:
加入分区以后,删除时用到了分区,加快了操作的速度。
但是,一个分区的数据量仍然是百万级的,直接进行delete仍然较慢,时间达到的半小时以上。
测试了几种办法:
(1)删除该分区,然后再添加该分区:alter
table RT_2109_suo_mx drop partitionp201703;
Alter table RT_2109_suo_mx
add partitionp201703 values(‘201703’)。删除的速度很快,但是,删除分区以后,表的索引失效。
(2)Truncate该分区:alter
table RT_2109_suo_mx truncate
partitionp20103;删除的速度很快,但是,表的索引失效。
(3)Truncate分区并更新索引:alter
table RT_2109_suo_mx truncate partitionp20103 update
indexes。删除的速度很快,索引也正常
3、合并明细数据语句的优化
这块主要是针对两个明细表的查询。
select
dept_id,housecode,field1 from sf_chargemonth where
substr(chargemonth,1,6)=’201703’。这个表是分区的,同时使用了substr,分区也没有利用上,索引也没有用上,把这个语句单独拿出来,查询的时间超过150秒。
修改为:select
dept_id,housecode,field1 from sf_chargemonth where chargemonth like
’201703%’。这就利用上了分区条件,把这个语句单独拿出来,查询的时间在1秒以内。
select
dept_id,housecode,field1 from sf_ystzmonth where
substr(chargemonth,1,6)<=’201703’ and
cwmonth=’201703’。这个语句,substr(chargemonth,1,6)肯定是没有利用上索引,cwmonth这个条件字段没有索引。前面的chargemonth这个条件,不太好修改。Cwmonth经过业务考虑,增加索引。
4、汇总语句的优化
这块还主要是针对查询语句的优化。
(1)原来的效率
Select
‘201703’,dept_id,sum(field1) field1
From
RT_2109_suo_mx
Where chargemonth=’201703’
and rttype=’25日报表’。这个条件在前面的描述中未加。SQL的分析效果如下,没有利用上分区,全表扫描,只利用了主键索引:
(2)修改为:Select
‘201703’,dept_id,sum(field1) field1
From
RT_2109_suo_mx
Where
chargemonth=’201703’。单分区扫描。
(3)指定分区:Select
‘201703’,dept_id,sum(field1) field1
From RT_2109_suo_mx
partition(p201703)
Where chargemonth=’201703’
and rttype=’25日报表’。
还是进行全表扫描,只利用了主键索引。
(4)考虑业务的上要求,目前rttype只有一个值,可以不考虑这个查询条件。索引优化为:
Select
‘201703’,dept_id,sum(field1) field1 From RT_2109_suo_mx
Where
chargemonth=’201703’;
或
Select
‘201703’,dept_id,sum(field1) field1 From
RT_2109_suo_mxpartition(p201703)
1、调整两个表的设置:
(1)RT_2109_suo_mx修改为按chargemonth做分区
(2)sf_ystzmonth增加索引cwmonth
2、执行过程还是三个步骤,执行时间不到5分钟:
(1)删除掉RT_2109_suo和RT_2109_suo_mx当月的数据。
Delete from RT_2109_suo
where chargemonth=’201703’;
alter table RT_2109_suo_mx
truncate partitionp20103 update indexes;
(2)合并明细数据并添加到RT_2109_suo_mx。
Insert into
RT_2109_suo_mx(chargemonth,dept_id,housecode,field1)
Select ‘201703’,
dept_id,housecode,sum(field1) field1
(select
dept_id,housecode,field1 from sf_chargemonth
wherechargemonthlike ’201703%’
Union all
Select
dept_id,housecode,field1 from sf_ystzmonth where
substr(chargemonth,1,6)<=’201703’ and
cwmonth=’201703’
) a Group by
dept_id,housecode
(3)汇总RT_2109_suo_mx到RT_2109_suo。
Insert into
RT_2109_suo(chargemonth,dept_id,field1)
Select
‘201703’,dept_id,sum(field1) field1
From
RT_2109_suo_mx
Where
chargemonth=’201703’
Group by
dept_id;
推荐阅读:
关帝灵签15签解签 关帝灵签第十五详解
不耻下问的意思
企业申请高新技术企业认定,高新技术产品(服务)是指对其发挥核
普鲁士国歌;“吾乃普鲁士人”的德文原版,还有英文版。来自维基
幼儿园大班谜语简单
四川已逝的老一辈革命家会活过来——四川人必看的这样的名单!!
oracle 过去5分钟,oracle程序性能优化实录-优化实例一(从1小时到5分钟)相关推荐
- oracle 中的trunc()函数及加一个月,一天,一小时,一分钟,一秒钟方法
返回处理后的数据,不同于round()(对数值进行四舍五入处理),该函数不对指定小数前或后的数值部分进行舍入处理. 语法:trunc(number[,decimals]) 其中,number为待做处理 ...
- 程序性能的初步优化与分析(以 C++ 为例)
去年圣诞节浏览了 Milo Yip 的文章"如何用 C 语言画一棵圣诞树" 后,对这个圣诞树生成算法很感兴趣: #include <math.h> #include & ...
- java多线程程序性能调优 优化过程
我, 一多年c++开发,由于项目原因需要对一个性能底下的多线程java程序进行调优,百度google了几把,妈蛋,没有发现指导如何java线程调优的文章啊,都是一些java使用规范,我去,那我大jav ...
- 让oracle跑得更快——oracle 10g性能分析与优化思路,[让Oracle跑得更快.Oracle.10g性能分析与优化思路]概要1.doc...
[让Oracle跑得更快.Oracle.10g性能分析与优化思路]概要1 在线事务(OLTP) 在线分析(OLAP) 在Oracle数据库中,凡是分配了存储空间的,都称为段,所有段并不一定指的是表,也 ...
- Oracle 性能调整与优化-程国华-专题视频课程
Oracle 性能调整与优化-353人已学习 课程介绍 在本课程中,学员们将基于Oracle数据库掌握其性能调整的关键要素以及调整优化方法,包括从物理层面规划,系统层面参数设置,存储子 ...
- oracle 10g 速度慢,让Oracle跑得更快—Oracle 10g性能分析与优化思路_数据库教程
资源名称:让Oracle跑得更快-Oracle 10g性能分析与优化思路 内容简介: 在这本书里读者将会学到作者在性能优化方面的一些思路和思考,一些故障处理的方法和原则,这些东西是作者在实践中长期积累 ...
- oracle tps 性能,Oracle性能究极优化 下
正在看的ORACLE教程是:Oracle性能究极优化 下. 我们有理由相信采用新的内核版本(2.2.16-3 smp)也应该有性能的提升: OS2: Newer minor version kerne ...
- oracle hwm调整语法,Oracle 10g HWM原理及性能优化
摘 要: HWM(High Water Mark)是表中已经使用过的存储空间与未使用过的存储空间之间的分界线,HWM对全表扫描的性能有非常大的影响.当全表扫描时,Oracle会读取HWM下所有的块, ...
- Oracle常用导出导出命令及性能效率对比
说明 Oracle导入导出命令主要有EXPDP和IMPDP.EXP和IMP,区别如下:EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用.EXPDP和IMPDP是服务端的工具程 ...
最新文章
- 《我想进大厂》之mysql夺命连环13问
- Linux不停往外发包
- display:none;与visibility:hidden;的区别
- 1011 A+B 和 C (15分)
- 重写laravel的request的校验器
- 美国远程MBA全面占领MBA市场
- windows7下bcdedit出现“拒绝访问”解决办法
- SQL2005学习(十六),SQL小知识点
- Query DSL(2)----Full text queries
- 2022官网下载jdk8教程
- 怎么把mp3转换成wav?
- VS C++项目报错warning C4199: ……use /Zc:twoPhase-
- Python3 利用阿里接口,根据银行卡号获取银行名称和logo
- 软考基础知识—操作系统
- 基于微信小程序的小说阅读系统(小程序+Nodejs)
- wxpython后台如何更新界面信息_wxpython后台线程更新界面控件方法
- VB.net byval和byref
- 使用adb 命令时提示“adb”既不是内部或外部命令,也不是可运行的程序
- 武汉大学计算机学院 论文,武大计算机学院教授分享:学术论文投稿与Rebuttal经验...
- IPv6和IPv4共存技术之 ISATAP隧道技术