如何在亿级记录表中创建索引
2. 需要考虑的几个方面
1)创建的索引需要几个G的磁盘空间。
2)创建索引需要排序,使用pga_aggregate_target,要把这个值从200M加大到2G。
3)如果内存不够,需要temp表空间,则要把temp表空间加大到8G——itpub上有一个帖子说过,15亿条记录用了34G空间。
4)在线创建,时间会比较长。讨论后,停止这个表的操作,非online创建。
3. 实际操作过程
1)数据文件够,不扩展;temp数据文件扩展:
alter database tempfile '/bgdata/oracle/temp01.dbf' resize 8192m;
2)在workarea_size_policy=AUTO的情况下,改pga_aggregate_target=2048m。对于串行操作,一个session能使用的pga=MIN(5%PGA_AGGREGATE_TARGET,100MB),这样可以使得pga用到最大的值:
alter system set pga_aggregate_target=2048m;
3)因为这是一个比较长的过程,所以写脚本让后台运行:
nohup time createind.sh &
vi createind.sh
![]()
#!/bin/sh
sqlplus user/password <<EOF
create index IDX_SUBMIT_RECORDTIME on STAT_SUBMIT_CENTER(RECORDTIME) local;
exit
EOF
4)创建过程中可以观察v$sort_segment,v$sort_usage看排序情况:
nohup time createind.sh &
vi createind.sh
![]()
#!/bin/sh
sqlplus user/password <<EOF
create index IDX_SUBMIT_RECORDTIME on STAT_SUBMIT_CENTER(RECORDTIME) local;
exit
EOF
5)创建完成后,把tempfile和pga_aggregate_target改回原值:
alter database tempfile '/bgdata/oracle/temp01.dbf' resize 4096m;
![]()
alter system set pga_aggregate_target=500m;
0
相关文章
