Oracle rebuild index 使用 parallel 时 与 并行度 的注意事项

标签: oracle rebuild index | 发表时间:2012-07-10 21:11 | 作者:tianlesoftware
出处:http://blog.csdn.net

 

 

一.Rebuild 索引 与 并行度 说明

在之前的Blog里整理了一些列有关索引相关的Blog,如下:

 

Oracle 索引 详解

http://blog.csdn.net/tianlesoftware/article/details/5347098

 

如何加快建index 索引 的时间

http://blog.csdn.net/tianlesoftware/article/details/5664019

 

Oracle 索引扫描的五种类型

http://blog.csdn.net/tianlesoftware/article/details/5852106

 

Oracle 索引的维护

http://blog.csdn.net/tianlesoftware/article/details/5680706

 

Oracle alterindex rebuild 与ORA-08104 说明

http://blog.csdn.net/tianlesoftware/article/details/6538928

 

在索引create 和rebuild的时候,在CPU 允许的情况下,我们可以使用parallel来加快操作的速度。但是这里有一个注意的问题,有关索引的并行度,这个对表同样要注意。

 

对于OLTP类型的数据库,除非只用于做统计、报表类的表或索引,建议不对相关表或索引调置并行度。在数据库有开启并行查询的情况下,在表或索引上存在默认并行度,将导致数据库优先采用全表或全索引扫描的执行计划,另外将生成多个并行子进程,对于OLTP类应用将反而降低相关SQL的执行效率。

 

       有关parallel,官网的说明如下:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_7002.htm#i2159323

 

The parallel_clause letsyou parallelize creation of the table and set the default degree of parallelismfor queries and the DML INSERT, UPDATE, DELETE,andMERGE after table creation.

 

(1)    NOPARALLEL : Specify NOPARALLEL forserial execution. This is the default,即并行度为1.

 

(2)PARALLEL:  Specify PARALLEL ifyou want Oracle to select a degree of parallelism equal to the number of CPUsavailable on all participating instances times the value ofthe PARALLEL_THREADS_PER_CPU initialization parameter.

 

(3)PARALLEL integer: Specificationof integer indicates the degree of parallelism, which is thenumber of parallel threads used in the parallel operation. Each parallel threadmay use one or two parallel execution servers. Normally Oracle calculates the optimumdegree of parallelism, so it is not necessary for you to specify integer.

 

       Oracle在并行处理时,会启动多少个并行进程来同时执行任务,并行度越高, 并行进程越多,执行速度 会越快,默认是noparallel,如果我们设置并行度为default值,那么此时的并行度是:

服务器CPU数*每个CPU启用的线程数(PARALLEL_THREADS_PER_CPU)

 

       所以一般我们建议使用Noparallel,或者将并行度设置为1,而不是default。

 

       可以通过dba_tables 和 dba_indexes 视图的degree 字段来查看相关对象的并行度。

 

       要注意的就是在我们用并行来rebuild索引的时候,rebuild结束后,我们索引的并行度也会改成我们rebuild的并行度,所以在我们rebuild 结束之后还需要对索引的并行度进行一个修改操作。

 

 

二.示例

测试环境: win7 +oracle 11.2.0.1

 

SQL> select * from v$version where rownum=1;

 

BANNER

-----------------------------------------------------------------------------

Oracle Database 11g Enterprise EditionRelease 11.2.0.1.0 - 64bit Production

 

 

--查看并行参数:

SQL> show parameter parallel_max_servers

 

NAME                                 TYPE        VALUE

----------------------------------------------- ------

parallel_max_servers                 integer     20

 

SQL> show parameter PARALLEL_THREADS_PER_CPU

 

NAME                                 TYPE        VALUE

----------------------------------------------- ------

parallel_threads_per_cpu             integer     2

 

 

--测试表Dave信息:

SQL> select count(*) from dave;

 

 COUNT(*)

----------

333798

 

SQL> col segment_name for a15

SQL> l

  1*select segment_name,bytes/1024/1024||'M' as "size" from dba_segmentswhere segment_name='DAVE' and owner='SYS'

SQL> /

 

SEGMENT_NAME    size

--------------------------------------------------------

DAVE            38M

 

 

--使用默认值创建索引:

SQL> create index idx_dave_id on dave(object_id) ;

Index created.

SQL>

 

--查看默认值:

SQL> select degree from dba_indexes where index_name='IDX_DAVE_ID';

 

DEGREE

----------------------------------------

1

--这里默认为noparallel,即为1.

 

 

--使用并行度为4,对索引进行rebuild:

SQL> ater index idx_dave_id rebuildparallel 4;

Index altered.

 

--在次查看索引的并行度:

SQL> select degree from dba_indexes where index_name='IDX_DAVE_ID';

 

DEGREE

----------------------------------------

4

 

注意:

这里变成了4,也就是说启用了索引自己的并行,这样在我们使用索引时会影响执行计划,也会消耗很多的资源。所以,我们需要对这个并行度进行修改,改成noparallel。

 

--修改并行度为noparallel:

SQL> alter index idx_dave_id noparallel;

Index altered.

 

--查看并行度:

SQL> select degree from dba_indexes where index_name='IDX_DAVE_ID';

 

DEGREE

----------------------------------------

1

 

这里又变成了1.

 

 

使用并行来处理时,我们可以通过v$px_session 来查看相关的等待事件:

SQL> select a.sql_id,a.event,count(*)from v$session a,v$px_session b where a.sid=b.sid group by a.sql_id,a.event;

 

 

 

关于并行的更多测试参考:

OracleParallel Execution(并行执行)

http://blog.csdn.net/tianlesoftware/article/details/5854583

 

 

 

 

 

-------------------------------------------------------------------------------------------------------

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Skype: tianlesoftware

QQ:              [email protected]

Email:   [email protected]

Blog:     http://www.tianlesoftware.com

Weibo: http://weibo.com/tianlesoftware

Twitter: http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

 

 

-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----

DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

DBA 超级群:63306533(满);  DBA4 群:83829929   DBA5群: 142216823

DBA6 群:158654907    DBA7 群:172855474   DBA总群:104207940

作者:tianlesoftware 发表于2012-7-10 21:11:56 原文链接
阅读:0 评论:0 查看评论

相关 [oracle rebuild index] 推荐:

Oracle rebuild index 使用 parallel 时 与 并行度 的注意事项

- - CSDN博客推荐文章
一.Rebuild 索引 与 并行度 说明. 在之前的Blog里整理了一些列有关索引相关的Blog,如下:. Oracle 索引 详解. 如何加快建index 索引 的时间. Oracle 索引扫描的五种类型. Oracle 索引的维护. Oracle alterindex rebuild 与ORA-08104 说明.

index rebuild和rebuild online的区别

- - CSDN博客数据库推荐文章
       曾经看到过淘宝的这个面试题:在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句.        先online建索引添加约束,然后删除原理的索引.        为什么要用online呢.

CSS中的z-index属性

- - IT技术博客大学习
标签:   z-index. css中z-index也是常用的一个属性,这个z-index说的就是第三轴的位置,网页实际是二维的,但是页面上的元素堆叠的层次就可以看作为第三轴,所以z-index也就很好理解了,在z轴上的索引. 好吧我再说的直白一点这里的z-index指的就是哪个元素显示在上面,哪个显示在下面,数值越大的越靠上,会把z-index值比较小的元素挡住.

关于z-index的那些事儿

- - 前端观察
关于z-index的真正问题是,很少有人理解它到底是怎么用. 其实它并不复杂,但是如果你从来没有花一定时间去看具体的z-index相关文档,那么你很可能会忽略一些重要的信息. 好吧,看看你能否解决下面这个问题:. 在 接下来的HTML里 有三个
元素,并且每个
里包含一个元素.

理解 B*tree index内部结构

- - CSDN博客数据库推荐文章
转载请注明出处: http://write.blog.csdn.net/postedit/40589651.     Oracle数据库里的B树索引就好象一棵倒长的树,它包含两种类型的数据块:一种是索引分支块,另一种是索引叶子块 索引分支块包含指向相应索引分支块/叶子块的指针和索引健值列(这里的指针是指相关分支块/叶子块的块地址RDBA.

利用 index、explain和profile优化mysql数据库查询小结

- - 博客园_首页
想必大家对index,explain和profile的利用也很多,这是我最近两天优化mysql语句查询资料整理的一些内容,希望大家可以一起来补充一下. 1.最好是在相同类型的字段间进行比较的操作. 在MySQL 3.23版之前,这甚至是一个必须的条件. 例如不能将一个建有索引的INT字段和BIGINT字段进行比较;但是作为特殊的情况,在CHAR类型的字段和VARCHAR类型字段的字段大小相同的时候,可以将它们进行比较.

微博用户影响力评价的H-Index指数

- - 统计之都
H-index其实更广泛的应用于学术论文评价,其定义为:. h代表“高引用次数”(high citations),一名科研人员的h指数是指他至多有h篇论文分别被引用了至少h次. 约在半年前,小编就和一位老师打趣地说这东西能不能用于评价微博用户的影响力. 一名微博用户的h指数是指他至多有h个粉丝数超过h的粉丝.

使用ssd硬盘加速 mysql index查询

- - CSDN博客数据库推荐文章
使用ssd硬盘加速 mysql index查询. 更多文章请参考: http://www.javaarch.net/jiagoushi/index.htm . 如果数据量比较大,而ssd容量又不是很大,那么可以考虑把index索引数据存到ssd上,把表数据还是存在旧的硬盘上. 那么怎么让mysql把index索引建在ssd上并使用ssd上的index数据呢.

MySQL InnoDB 與 PostgreSQL 的 Partial Index(es) 是不一樣的東西…

- - Gea-Suan Lin's BLOG
MySQL InnoDB 指的 Partial Index 是:. An index that represents only part of a column value, typically the first N characters (the prefix) of a long VARCHAR value..

华为HBase二级索引(Secondary Index)细节分析

- - 数据库 - ITeye博客
华为在HBTC 2012上由其高级技术经理Anoop Sam John透露了其 二级索引方案,这在业界引起极大的反响,甚至有人认为,如果华为早点公布这个方案,hbase的某些问题早就解决了. 其核心思想是保证索引表和主表在同一个region server上. 目前该方案华为已经开源,详见: https://github.com/Huawei-Hadoop/hindex.