一个oracle性能优化的案例
一个oracle性能优化的案例
1.以前 业务处理时要求 插入某 表的处理方式(该表已经是分区):
每个客户对应的每种游戏,在做影象时对中都会生成一条记录
如果客户没玩游戏该条记录补0(目前客户数50000,8个游戏 t做影象每天需要增加400000多行记录,
一个月也就400000*30=12000000万),增加量很快
而且本身这个表建立了四五个全局索引,通过程序插入时每天需要半个钟头左右,
随着数据量增加 插入越来越慢, 按分区查询时一个月数据量也很大,影响报表查询
2.通过与业务相结合讨论建议
如果该客户没玩游戏,在该表中不产生记录,这样就少了很多记录,其中每天在线玩家数也就几百左右
那这样产生的数据量也就(500*8=4000左右) 大大减少了数据量的产生
提高后台相关报表查询性能和减少做影像时间
3.数据对比
select count(*) from test (全部)
80000000
select count(*) from test (去除为0的记录)
where amount>0
800000
数据量相差100倍
4.实施 因为是在线系统 晚上12点做影像 所以在这之前或之后做好就行
因为是分区表为了不影响生产性能按分区插入提高插入数据速度:
改为非分区表
create table temp
(
column1 number(20);
column2 varchar2(2);
......
);
--插入数据到临时表中
insert into temp
select * from test partition(P200608)
where amount>0;
insert into temp
select * from test partition(P200609)
where amount>0;
......
alter table test rename to test_bak;
alter table temp rename to test;
drop table test_bak;
重建相关索引和分析数据
5.效果
目前插入由以前的半个小时变到几十秒钟,相关查询报表速度提高很多
性能得到明显提高
6.总结
性能优化是个长期的过程,要不断的跟踪与观察,还要非常了解业务,
这样才会对系统提出更好的建议