看完这章你会学习到以下内容:

  1. 为什要用这个Hints强制优化?
  2. 使用前的注意事项?
  3. 查询核心数和进程?

强制优化原因:

1.对于一个大的任务,一般的做法是利用一个进程,串行的执行。
如果系统资源足够,可以采用parallel技术
核心思想:把一个大的任务分成若干个小的任务。
具体含义:同时启用n个进程/线程,并行的处理这些小的任务,这些并发的进程称为并行执行服务器(parallel executeion server),这些并发进程由一个称为并发协调进程的进程来管理。


启用Parallel前注意事项:
只有在需要处理一个很大的任务,如需要几十分钟,几个小时的作业中,并且要有足够的系统资源的情况下(这些资源包括cpu,内存,io)。您才应该考虑使用parallel。
否则,在一个多并发用户下,系统本身资源负担已经很大的情况下,启用parallel,将会导致某一个会话试图占用了所有的资源,其他会话不得不去等待,从而导致系统系能反而下降的情况。


通常语法:

Parallel(表名或者别名,并行数->偶数)
 select /*+ parallel(emp,4)*/ 
  * from emp where deptno=200 and sal>300;

另外:
1.每个SELECT/INSERT/UPDATE/DELETE命令后只能有一个/+ /
但提示内容可以有多个,可以用逗号分开,空格也可以
例如:既包含走索引,也包含用多线程。

 /+INDEX_ASC(TABLE INDEX_NAME) parallel(emp,4)*/

2.如果表有别名,则写别名,否则不会走Hints优化。
图片.png

 Select /*+ parallel(e,4)*/   --- 会走Hints优化;
 * from emp e where deptno=200 and sal>300;
 
 Select /*+ parallel(emp,4)*/   --- 不会走Hints优化;
 * from emp e where deptno=200 and sal>300;

Q:如何查询本机的核心数?
目的在于知道本机的核心数上限,可分配的范围。
打开命令窗口Command Window,输入如下命令:

SQL> show parameter CPU;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cpu_count                            integer     8
parallel_threads_per_cpu             integer     2
resource_manager_cpu_allocation      integer     8

SQL> 

以下有三个参数返回:

  • cpu_count : 表示cpu数
  • parallel_threads_per_cpu :表示每个cpu允许的并行进程数
  • resource_manager_cpu_allocation :该参数决定 Resource Manager 可以利用的CPU数,该参数已弃用,仅作向后兼容。

参考资料:


蜗牛
27 声望13 粉丝