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;

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...