建立或重建索引的速度问题_20110723

对于一个大的索引,在创建或重建时,速度问题无疑是一个必须考虑;

可以使用的选项有:Parallel, Nologging, Compress;
Nologging: 减少Redo的产生量

Parallel:并发,一般建议为物理CPU的个数,注意观察IO,CPU的情况
对于小表的情况下,使用并行带来的开销可能超过使用串行.

Compress: 空间压缩

########################################
完整的示例过程如下:
########################################

1 Alter session enable parallel DDL;

2 Create index pk_ind on OCS_WORKORDERTODO(col1,col2,...) nologging parallel tablespace ts_xxx;

3 Alter index pk_ind rebuild online nologging parallel;

4 在完成重建后,需要将索引标记改回去;
Alter index pk_ind logging noparallel;

5 完成后,建议再做一次完整的表分析:
Execute DBMS_STATS.GATHER_TABLE_STATS(owner=>'USERDB',tabname=>'OCS_WORKORDERTODO',estimate_percent=>'DBMS_STATS.AUTO_SIZE',cascade=>TRUE);

########################################
从Session级别可以考虑的其它参数:
########################################

1 加大排序区的大小:sort_area_size
Alter session set workarea_size_policy=manual;
alter session set sort_area_size=xxx;
这个Size一般可以为多大呢?1.5 * table_size;
建立或重建索引是排序是必须的?是的
Size过大,或带来什么问题,sort_area_size来自于PGA的SQL_AREA;

2 加大db_file_multiblock_read_count 一次物理读时返回的物理块
alter session set db_file_multiblock_read_count=512;

3 加大排序读时一次返回的物理块数?
alter session set "_sort_multiblock_read_count"=128;


对这些Session级参数的变化,会对系统造成哪些影响? 如果两个会话同时开启这些参数会有影响吗?

退出Session后,所有设置都失效.

########################################
相关的视图
########################################
1 v$sql_workarea_active
通过下如下视图可以知道,建立索引使用workarea_size时,分配的是否足够,可以用来在调整sort_area_size时做参考
select sql_id, to_char(sql_exec_start,'yyyymmdd hh24:mi:ss'), EXPECTED_SIZE,  ACTUAL_MEM_USED,
NUMBER_PASSES,TEMPSEG_SIZE,TABLESPACE,SEGRFNO#,SEGBLK#,
operation_type, workarea_address, policy
from  v$sql_workarea_active;

 

请使用浏览器的分享功能分享到微信等