oracle数据量大时候分区索引思路

有一个分区表,按list分区,只有一个本地唯一索引,没有外键和触发器
当单个分区数量在2000万以内时,insert效率还可以,每秒2.3-2.5万条
但数据量越大,速度越慢,
目前单个分区数量达到3亿,占用磁盘空间28G,索引占用13G,insert每秒才2000条
做过的尝试:
1、已经将表和索引设置成nologging
2、试过append,没有明显改善

分析应该是维护索引导致的性能问题,有什么方法可以改善?


建议如下:
1.采取批量提交比如2000-5000 行提交一次
2.如果数据都是插入到单个分区的话,可以把该分区上的索引先disable 然后再插入 完成后rebuild 该分区上的索引
alter index ind_t100 unusable;
alter index IND_T100 rebuild;
3.如果日志文件切换很平凡的话,建议增大日志文件大小


很明显是维护索引消耗
alter index xxx unusable;
最后再重建这个索引

有人反映,
唯一索引,UNUSABLE后不能insert
----------------------------------------------------------------61万数据进行测试

失效索引后重建:
alter index  ACT_IDX_HI_PROCVAR_TASK_ID unusable;
alter index  ACT_HI_VARINSTWITHIDX_INDEX1 unusable;
alter index ACT_IDX_HI_PROCVAR_NAME_TYPE unusable;
alter index ACT_IDX_HI_PROCVAR_PROC_INST unusable;
 insert into act_hi_varinstspan select * from act_hi_varinst;
alter index  ACT_IDX_HI_PROCVAR_TASK_ID rebuild;
alter index  ACT_HI_VARINSTWITHIDX_INDEX1 rebuild;
alter index ACT_IDX_HI_PROCVAR_NAME_TYPE rebuild;
alter index ACT_IDX_HI_PROCVAR_PROC_INST rebuild;

插入612,627 行数据耗费30.7秒
重建耗费10秒

不分区:
无索引
612,627 行已插入。
16.518秒
带索引
612,627 行已插入。
127.492秒

分区:
非索引
612,627 行已插入。
16.518秒
带索引
612,627 行已插入。
108.081秒
---------------------------------------------------------------相关实验及语句
---按日期进行分区
select table_name,partition_name from user_tab_partitions where table_name='ACT_HI_VARINSTSPAN';
create table ACT_HI_VARINSTSPAN (
  id_                NVARCHAR2(64) not null,
  proc_inst_id_      NVARCHAR2(64),
  execution_id_      NVARCHAR2(64),
  task_id_           NVARCHAR2(64),
  name_              NVARCHAR2(255) not null,
  var_type_          NVARCHAR2(100),
  rev_               INTEGER,
  bytearray_id_      NVARCHAR2(64),
  double_            NUMBER(*,10),
  long_              NUMBER(19),
  text_              NVARCHAR2(2000),
  text2_             NVARCHAR2(2000),
  create_time_       TIMESTAMP(6),
  last_updated_time_ TIMESTAMP(6)
) partition by range(create_time_)
 interval (numtodsinterval(1,'day'))
 (
  partition create_time_ values less than (to_date('2016-01-01','yyyy-mm-dd'))
 );
-- 查看分区表
 SELECT * FROM USER_PART_TABLES;
-- 查看表分区
 select table_name,partition_name from user_tab_partitions where table_name='ACT_HI_VARINSTSPAN';
-- 为分区进行建立索引
CREATE INDEX ACT_HI_VARINSTSPAN_INDEXSPAN1 ON ACT_HI_VARINSTSPAN(ID_) LOCAL;
-- 查看分区进行建立索引
 select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where index_name='ACT_HI_VARINSTSPAN_INDEXSPAN1';
-- 查看分区进行建立索引
 SELECT * FROM USER_PART_INDEXES
--重建分区索引
  alter index ACT_HI_VARINSTSPAN_INDEXSPAN1 rebuild partition SYS_P718;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值