Oracle新手入门:如何提高索引创建速度?
3个回答
展开全部
默认情况下,数据库系统是不允许DML操作与创建索引的操作同时进行的。也就是说,在创建索引的过程中,是不允许其他用户对其所涉及的表进行任何的DML操作。这主要是因为对基础表进行DML操作时,会对基础表进行加锁。所以在基础表上的DDL事务没有递交之前,即没有对基础表进行解锁之前,是无法对这基础表创建索引的。反之亦然。显然此时数据库没有采用这个ONLIE选项,继之DML操作与创建索引操作同时进行,主要是从创建索引的效率出发的。防止因为两个作业相互冲突,从而延长某个作业的运行时间。
但是有时会我们必须允许他们进行同时操作。如用户可能一刻都不能够离开数据库系统,需要时时刻刻对数据库基础表进行DML操作。而此时由于某些原因,数据库管理员又需要重新建立索引时,那么不得不在创建索引的语句中加入这个ONLINE选项。让他们同时运行。此时虽然可能会延长索引创建作业的时间,但是可以保障用户DML操作能够正常进行。有时候牺牲这个代价是值得的。用户是不能够等的,而我们数据库管理员则可以勉强的等一会儿。
当然,如果用户对于这个DML操作及时性没有这么高。如数据库管理员在晚上员工没有使用数据库时创建索引时,则可以不带这个选项。在限制用户对基础表进行DML操作的同时,提高数据库创建索引的效率。
可选项五:PARALLEL,多服务进程创建索引
默认情况下,Oracle数据库系统不采用这个选项。这并不是说这个选项不可用,而是因为大多数情况下企业部署Oracle数据库时所采用的数据库服务器往往只有单个CPU。此时数据库系统是用一个服务进程来创建索引的。
如果企业的服务器有多个CPU的话,则可以在创建索引时采用这个选项。因为只要采用了这个选项,则数据库就会使用多个服务进程来并行的创建索引,以提高索引创建的速度。为此,在同等条件下,多服务并行创建进索引并单服务创建索引速度要快的多。所以如果服务器中有多个CPU,而且需要创建的索引比较多或者基础表中记录比较多的话,则采用这个选项能够大幅度的提高索引的创建效率。
故笔者建议,如果采用多CPU的服务器时,最好在创建索引时使用这个选项。不能够浪费了服务器的CPU呀。不然的话,多CPU服务器的优势就体现不出来了。为此采用这个选项,也是物尽其用。希望本文讲到的内容对大家能有所帮助。
展开全部
索引创建速度取决于两个方面:
1、主机性能。
2、减少数据表中数据量。
针对第一种情况:可适当增加主机内存,更换CPU等。
针对第二种情况:
1、将原表中数据转移到其他备份表中。
2、给原表创建索引。
3、将备份表中数据重新导回。
oracle创建索引语法:
Create[UNIQUE|BITMAP]index
[schema.]index_nameon[schema.]table_name(column_name[ASC|DESC],…n,[column_expression])|CLUSTER[schema.]cluster_name
[INITRANSinteger]
[MAXTRANSinteger]
[PCTFREEinteger]
[PCTUESDinteger]
[TABLESPACEtablespace_name]
[STORAGEstorage_clause]
[NOSORT]
[REVERSE]
1、主机性能。
2、减少数据表中数据量。
针对第一种情况:可适当增加主机内存,更换CPU等。
针对第二种情况:
1、将原表中数据转移到其他备份表中。
2、给原表创建索引。
3、将备份表中数据重新导回。
oracle创建索引语法:
Create[UNIQUE|BITMAP]index
[schema.]index_nameon[schema.]table_name(column_name[ASC|DESC],…n,[column_expression])|CLUSTER[schema.]cluster_name
[INITRANSinteger]
[MAXTRANSinteger]
[PCTFREEinteger]
[PCTUESDinteger]
[TABLESPACEtablespace_name]
[STORAGEstorage_clause]
[NOSORT]
[REVERSE]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以下脚本可以用于加速大表索引的创建或重建
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
-- Script Tested above 10g
-- Create a new temporary segment tablespace specifically for creating the index.
-- CREATE TEMPORARY TABLESPACE tempindex tempfile 'filename' SIZE 20G ;
-- ALTER USER username TEMPORARY TABLESPACE tempindex;
REM PARALLEL_EXECUTION_MESSAGE_SIZE can be increased to improve throughput.
REM but need restart instance,and should be same in RAC environment
REM this doesn't make sense,unless high parallel degree
-- alter system set parallel_execution_message_size=65535 scope=spfile;
alter session set workarea_size_policy=MANUAL;
alter session set workarea_size_policy=MANUAL;
alter session set db_file_multiblock_read_count=512;
alter session set db_file_multiblock_read_count=512;
--In conclusion, in order to have the least amount of direct operations and
--have the maximum possible read/write batches these are the parameters to set:
alter session set events '10351 trace name context forever, level 128';
REM set sort_area_size to 700M or 1.6 * table_size
REM 10g bug need to set sort_area_size twice
REM remember large sort area size doesn't mean better performance
REM sometimes you should reduce below setting,and then sort may benefit from disk sort
REM and attention to avoid PGA swap
alter session set sort_area_size=734003200;
alter session set sort_area_size=734003200;
REM set sort area first,and then set SMRC for parallel slave
REM Setting this parameter can activate our previous setting of sort_area_size
REM and we can have large sort multiblock read counts.
alter session set "_sort_multiblock_read_count"=128;
alter session set "_sort_multiblock_read_count"=128;
alter session enable parallel ddl;
create [UNIQUE] index ... [ONLINE] parallel [Np] nologging;
alter index .. logging;
alter index .. noparallel;
如果自己搞不定可以找ASKMACLEAN专业ORACLE数据库修复团队成员帮您恢复!
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
-- Script Tested above 10g
-- Create a new temporary segment tablespace specifically for creating the index.
-- CREATE TEMPORARY TABLESPACE tempindex tempfile 'filename' SIZE 20G ;
-- ALTER USER username TEMPORARY TABLESPACE tempindex;
REM PARALLEL_EXECUTION_MESSAGE_SIZE can be increased to improve throughput.
REM but need restart instance,and should be same in RAC environment
REM this doesn't make sense,unless high parallel degree
-- alter system set parallel_execution_message_size=65535 scope=spfile;
alter session set workarea_size_policy=MANUAL;
alter session set workarea_size_policy=MANUAL;
alter session set db_file_multiblock_read_count=512;
alter session set db_file_multiblock_read_count=512;
--In conclusion, in order to have the least amount of direct operations and
--have the maximum possible read/write batches these are the parameters to set:
alter session set events '10351 trace name context forever, level 128';
REM set sort_area_size to 700M or 1.6 * table_size
REM 10g bug need to set sort_area_size twice
REM remember large sort area size doesn't mean better performance
REM sometimes you should reduce below setting,and then sort may benefit from disk sort
REM and attention to avoid PGA swap
alter session set sort_area_size=734003200;
alter session set sort_area_size=734003200;
REM set sort area first,and then set SMRC for parallel slave
REM Setting this parameter can activate our previous setting of sort_area_size
REM and we can have large sort multiblock read counts.
alter session set "_sort_multiblock_read_count"=128;
alter session set "_sort_multiblock_read_count"=128;
alter session enable parallel ddl;
create [UNIQUE] index ... [ONLINE] parallel [Np] nologging;
alter index .. logging;
alter index .. noparallel;
如果自己搞不定可以找ASKMACLEAN专业ORACLE数据库修复团队成员帮您恢复!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询