前几日在文章:http://space.itpub.net/9240380/viewspace-751897,为生产某表构建了分区类型及本地分区索引和唯一索引.
今天上司通知构建的索引与要求不一致.
-----直接在plsql developer查看索引列,本地分区索引的索引列全为组合索引,前缀列皆是分期键列reqtime
-----侯至晚上,开始删除上述索引,并重建之.
------创建全局唯一索引,作用主键用(注:如下索引名为简略皆用测试名,t_partition表结构与生产某表相同,id为主键,reqtime为分键列)
create unique index pk_x on t_partition(id);
-----创建分区索引reqtime
create index idx_reqtime on t_partition(reqtime) tablespace idx_tbs local;
--创建索引语句报内存空间不足
因为创建索引要采用sequential read方式读取数据块,要在内存中排序
--采用并行及非日志方式创建索引,并指定索引表空间
create index idx_reqtime on t_partition(reqtime) tablespace idx_tbs nologging parallel 6 local;
--同时在另一会话监控v$session_wait,发现大量contention:tm-contention事件,同时发现了px并发事件
select * from v$session_wait;
---启用并行及非日志方式创建索引,2分钟创建索引完毕,上述v$session_wait事件及px并发事件也同时消失
--同理,创建其它的分区本地索引
--查看创建的唯一索引和几个分区本地索引
select * from user_ind_partitions;
--禁用上述相关索引的并行
alter index pk_x parallel 1;
alter index idx_x parallel 1;
--查看索引是否禁用并行
select * from user_indexes where table_name='T_PARTITION'
--后记:
1,并行创建索引时,如何根据系统负荷指定cpu parallel
2,并行操作的原理是什么,在下文另行测试