• 博客访问: 6434487
  • 博文数量: 902
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-11 14:32
  • 认证徽章:
个人简介

oracle 10g ocm oracle 10g/11g/12c ocp aix 6.1 administrator,ogg expert,ITSS 技术交流群 201703254 微信公众号 paulyibin 探讨技术,开心工作 电话 13719354869 ,深入研究数据库和开始研究big data

文章分类

全部博文(902)

文章存档

2016年(23)

2015年(32)

2014年(41)

2013年(29)

2012年(25)

2011年(83)

2010年(220)

2009年(136)

2008年(248)

2007年(65)

分类: Linux操作系统

2008-04-08 10:42:58

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.总结

性能优化是个长期的过程,要不断的跟踪与观察,还要非常了解业务,

这样才会对系统提出更好的建议

阅读(1550) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册