love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

11gR2 新特性之—In-Memory Parallel execution

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: 11gR2 新特性之—In-Memory Parallel execution

该特性是在oracle 11gR2 引入,其目的不言而喻。在11gR2之前,也就是在11gR1中,
如果当你发出/*+parallel(16) */ 时,可能会出现下面两种情形:

我们来看下trace信息:

当前虚拟机测试,我分配了4个parallel,现在加大该值为30,看看最后的DOP会是多少。

再次来看看trace。

此时trace 信息如下:

下面来进行auto DOP的测试。
首先说明下DOP的计算公式:

单实例: DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT
RAC: DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT

此时自动计算出来的DOP 为1,说明当前sql语句在parallel为1的情况下效率最高。

根据上述数据制作图表如下:
11gR2 新特性之—In-Memory Parallel execution插图
我们知道,当前测试是在parallel_min_time_threshold为默认值的情况下进行的测试,
下面更改该值。

此时的情况如下:
11gR2 新特性之—In-Memory Parallel execution插图(1)
从上面来看,当该值修改为3以后,Dop为2时效率是最高的,下面来看看起执行计划是否如此。

这里补充一点是,如果参数parallel_degree_policy为manual时,我们可以使用parallel hint来使用该特性,如下:

关于该特性,是针对DW环境的,auto dop的计算,其实在11gR1就有了,不过计算的算法不太合理,存在一定的缺陷。
最后我们来看下11gR2中auto dop是如何计算的。

根据前面的实验我们可以清楚的看到11gR2中 auto dop的操作过程,做出如下的简单总结:

1. 根据系统默认dop进行计算计算出一个dop;
2. 获取当前实例的负载信息(rac环境会获取所有节点的负载信息);
3. 根据负载信息,结合前面的dop进行计算,得出一个dop值;
4. 多次更新实例负载信息,这里应该还会参考过去的负载信息进行多次计算。
从上面来看,这里计算了2次,我猜测此时这2分实例负载信息类似该实例过去的一份awr快照一样;
5. 最后计算出一个合理的dop值,然后生成执行计划;
6. 执行sql语句(执行之前会进行salve进程的分配);
7. 执行完毕以后,释放salve进程;
8. 更新实例负载信息(我猜测这次的负载信息会被下次计算作为参考).

个人见解,希望能够抛砖引玉!

2 Responses to “11gR2 新特性之—In-Memory Parallel execution”

  1. Link Building Services Says:

    You have a great website! I would love to build backlinks for you.

  2. 11gR2 新特性之—In-Memory Parallel execution - Oracle - 开发者第994274个问答 Says:

    […] http://www.killdb.com/?p=348              该特性是在oracle 11gR2 […]

Leave a Reply

You must be logged in to post a comment.