oracle大表创建索引

oracle大表创建索引

时间:2014-06-30 11:06:36      作者:beebol      标签:      分类: Oracle

20多亿条数据,需要在线添加索引。如下是添加索引遇到的问题及方法:

服务器cpu:24  core    124G内存

数据库构架:primary--standby

开始创建,通过parallel参数进行多进程添加。

SQL> set timing on
SQL> CREATE INDEX tlbb.IND_SERVER_LOG_PUTDATE ON tlbb.TLBB_SERVER_LOG(PUT_DATE)
  2  TABLESPACE TLBB_INDEX parallel 15 online;
CREATE INDEX tlbb.IND_SERVER_LOG_PUTDATE ON tlbb.TLBB_SERVER_LOG(PUT_DATE)
                                                 *
ERROR at line 1:
ORA-01652: unable to extend temp segment by 128 in tablespace TEMPElapsed: 00:45:41.53
Elapsed: 00:45:41.53

第一次添加失败了,原因是temp表空间不够,导致失败。

SQL> select file_name,bytes/1024/1024 "MB",autoextensible,tablespace_name from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------
        MB AUT TABLESPACE_NAME
---------- --- ------------------------------
+DATA/sgstatdb3/tempfile/temp.910.840550051
32767.9844 YES TEMP

+DATA/sgstatdb3/tempfile/temp.909.840550051
      6144 YES TEMP

Elapsed: 00:00:00.13
SQL> set linesize 200;
SQL> select file_name,bytes/1024/1024 "MB",autoextensible,tablespace_name from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        MB AUT TABLESPACE_NAME
---------- --- ------------------------------
+DATA/sgstatdb3/tempfile/temp.910.840550051
32767.9844 YES TEMP

+DATA/sgstatdb3/tempfile/temp.909.840550051
      6144 YES TEMPElapsed: 00:00:00.11

Elapsed: 00:00:00.11

添加表空间文件,根据表的数据量,添加相应的临时表空间数据文件:本次我添加了7个:防止再次出现临时表空间不足问题。

alter tablespace TEMP add tempfile '+DATA' size 50M AUTOEXTEND ON next 1M maxsize unlimited;

第一次将parallel设置为15,服务器的负载没有太多变化,正常情况下。该服务器支持48个parallel。但是不能开太高,不然影响线上业务。

SQL>  CREATE INDEX tlbb.IND_SERVER_LOG_PUTDATE ON tlbb.TLBB_SERVER_LOG(PUT_DATE) TABLESPACE TLBB_INDEX parallel 20 online;

Index created.Elapsed: 01:43:39.36

Elapsed: 01:43:39.36

这次将parallel添加到了20,终于经过了1小时43分钟,索引终于创建完了。

如果没有配置standby的情况下,再加个nologging又会再快很多。有standby了就不行了,因为已经force logging了。

 

时间:2014-06-30 11:06:36      作者:beebol      标签:      分类: Oracle
  • 分享到:
  • 微博
  • QQ空间
  • 腾讯微博
  • 微信

Copyright © 2015 Gitblog | Proudly powered by Gitblog.