技术开发 频道

如何在亿级记录表中创建索引

  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
相关文章