欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Oracle開啟并行的幾種方法

并行執(zhí)行是同時開啟多個進(jìn)程/線程來完成同一個任務(wù),并行執(zhí)行的每一個進(jìn)程/線程都會消耗額外的硬件資源,所以并行執(zhí)行的本質(zhì)就是以額外的硬件資源消耗來換取執(zhí)行時間的縮短。這里的額外硬件資源消耗是指對數(shù)據(jù)庫服務(wù)器上多個CPU、內(nèi)存、從個I/O通道,甚至是RAC環(huán)境下多個數(shù)據(jù)庫節(jié)點(diǎn)的額外利用。

為寧晉等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及寧晉網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站建設(shè)、寧晉網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

下面總結(jié)一下Oracle里開啟并行的幾種方法

1、更改目標(biāo)表的并行度

有兩種方法修改目標(biāo)表的并行度

  • alter table table_name parallel;

  • alter table table_name parallel n;

其中方法1 是把指定表的并行度修改為默認(rèn)值,方法2是把指定表的并行度修改為n;

查看表EMP當(dāng)前的并行度為1

scott@TEST>select table_name,degree from user_tables where table_name='EMP';

TABLE_NAME		       DEGREE
------------------------------ ----------
EMP					1

想用默認(rèn)的并行度去訪問表EMP

scott@TEST>alter table emp parallel;

Table altered.

scott@TEST>select table_name,degree from user_tables where table_name='EMP';

TABLE_NAME		       DEGREE
------------------------------ ----------
EMP				  DEFAULT

scott@TEST>set autotrace traceonly
scott@TEST>select * from emp;

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2873591275

--------------------------------------------------------------------------------------------------------------
| Id  | Operation	     | Name	| Rows	| Bytes | Cost (%CPU)| Time	|    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |		|    14 |  1218 |     2   (0)| 00:00:01 |	 |	|	     |
|   1 |  PX COORDINATOR      |		|	|	|	     |		|	 |	|	     |
|   2 |   PX SEND QC (RANDOM)| :TQ10000 |    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
|   3 |    PX BLOCK ITERATOR |		|    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |	     |
|   4 |     TABLE ACCESS FULL| EMP	|    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |	     |
--------------------------------------------------------------------------------------------------------------
.....

從上面的執(zhí)行計劃中可以看出,走的是對表EMP的全表掃描,PX...表示的就是走的并行

默認(rèn)并行度的算法如下:

默認(rèn)并行度=parallel_threads_per_cpu*cpu_count

如果想對表開啟8個并行度則執(zhí)行:alter table emp parallel 8;

scott@TEST>select table_name,degree from user_tables where table_name='EMP';

TABLE_NAME		       DEGREE
------------------------------ ----------
EMP				  DEFAULT

scott@TEST>alter table emp parallel 8;

Table altered.

scott@TEST>select table_name,degree from user_tables where table_name='EMP';

TABLE_NAME		       DEGREE
------------------------------ ----------
EMP					8

2、使用并行Hint

有如下一些并行Hint可以用來控制是否啟用并行及指定并行度

1) /*+ parallel(table[,degree]) */  #用于指定并行度去訪問指定表,如果沒有指定并行度degree,則使用Oracle默認(rèn)并行度

2) /*+ noparallel(table) */  #對指定表不使用并行訪問

3) /*+ parallel_index(table[,index[,degree]]) */  #對指定的分區(qū)索引以指定的并行度去做并行范圍掃描

4) /*+ no_parallel_index(table[,index]) */  #對指定的分區(qū)索不使用并行訪問

5) /*+ pq_distribute(table,out,in) */ #對指定表以out/in所指定的方式來傳遞數(shù)據(jù),這里out/in的值可以是HASH/NONE/BROADCAST/PARTITION中的任意一種如/*+ pq_distribute(table,none,partition) */ 

把表EMP修改回并行度為1

scott@TEST>alter table emp noparallel;

Table altered.

scott@TEST>select table_name,degree from user_tables where table_name='EMP';

TABLE_NAME		       DEGREE
------------------------------ ----------
EMP					1

使用并行Hint執(zhí)行上之前的SQL

scott@TEST>select /*+ parallel(emp) */* from emp;

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2873591275

--------------------------------------------------------------------------------------------------------------
| Id  | Operation	     | Name	| Rows	| Bytes | Cost (%CPU)| Time	|    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |		|    14 |  1218 |     2   (0)| 00:00:01 |	 |	|	     |
|   1 |  PX COORDINATOR      |		|	|	|	     |		|	 |	|	     |
|   2 |   PX SEND QC (RANDOM)| :TQ10000 |    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
|   3 |    PX BLOCK ITERATOR |		|    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |	     |
|   4 |     TABLE ACCESS FULL| EMP	|    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |	     |
--------------------------------------------------------------------------------------------------------------

從上面的執(zhí)行計劃中可以看出,走的是并行

3、使用alter session命令

使用alter session命令,可以在當(dāng)前session中強(qiáng)制啟用并行查詢或并行DML。如果強(qiáng)制啟用了并行查詢或者并行DML,那就意味著從執(zhí)行alter session命令強(qiáng)制開啟并行的那個時間點(diǎn)開始,在這個session中隨后執(zhí)行的所有SQL都將以并行的方式執(zhí)行,有如下四種方法在當(dāng)前session中強(qiáng)制開啟并行

1) alter session parallel query 

在當(dāng)前session中強(qiáng)制開啟并行查詢,沒有指定并行度,Oracle使用默認(rèn)并行度

2) alter session parallel query  parallel n

在當(dāng)前session中強(qiáng)制開啟并行查詢,并且指定并行度為n

3) alter session parallel dml

在當(dāng)前session中強(qiáng)制開啟并行DML,沒有指定并行度,Oracle使用默認(rèn)并行度

4) alter session parallel dml  parallel n

在當(dāng)前session中強(qiáng)制開啟并行DML,并且指定并行度為n

表EMP并行度仍為1,在session中強(qiáng)制開啟并行:

scott@TEST>select table_name,degree from user_tables where table_name='EMP';

TABLE_NAME		       DEGREE
------------------------------ ----------
EMP					1

scott@TEST>set autotrace traceonly
scott@TEST>alter session force parallel query;

Session altered.

scott@TEST>select * from emp;

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2873591275

--------------------------------------------------------------------------------------------------------------
| Id  | Operation	     | Name	| Rows	| Bytes | Cost (%CPU)| Time	|    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |		|    14 |  1218 |     2   (0)| 00:00:01 |	 |	|	     |
|   1 |  PX COORDINATOR      |		|	|	|	     |		|	 |	|	     |
|   2 |   PX SEND QC (RANDOM)| :TQ10000 |    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
|   3 |    PX BLOCK ITERATOR |		|    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |	     |
|   4 |     TABLE ACCESS FULL| EMP	|    14 |  1218 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |	     |
--------------------------------------------------------------------------------------------------------------
......

從執(zhí)行計劃中可以看出走的是并行。

取消當(dāng)前session并行使用如下語句alter session disable parallel query;

scott@TEST>alter session disable parallel query;

Session altered.

scott@TEST>select * from emp;

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |    14 |  1218 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMP  |    14 |  1218 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
......

4、11gR2的自動并行

Oracle在11gR2中引入了自動并行(Auto DOP),自動并行的開啟受參數(shù)parallel_degree_policy的控制,其默認(rèn)值為MANUAL,即自動并行在默認(rèn)情況下并沒有開啟。如果通過更改PARALLEL_DEGREE_POLICY的值而開啟了自動并行,那么后面執(zhí)行的SQL的執(zhí)行方式是串行還是并行,以及并行執(zhí)行的并行度是多少等,就都是由Oracle自動來決定了。

scott@TEST>select table_name,degree from user_tables where table_name in ('EMP','EMP_TEMP');

TABLE_NAME										   DEGREE
------------------------------------------------------------------------------------------ ------------------------------------------------------------
EMP												    1
EMP_TEMP											    1

scott@TEST>alter session set parallel_degree_policy=AUTO;

Session altered.

scott@TEST>set autotrace traceonly
scott@TEST>select * from emp;

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |	 |    14 |  1218 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMP  |    14 |  1218 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
......
scott@TEST>select * from emp_temp;

1835008 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 2661083444

--------------------------------------------------------------------------------------------------------------
| Id  | Operation	     | Name	| Rows	| Bytes | Cost (%CPU)| Time	|    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |		|  1835K|    66M|  1683   (1)| 00:00:21 |	 |	|	     |
|   1 |  PX COORDINATOR      |		|	|	|	     |		|	 |	|	     |
|   2 |   PX SEND QC (RANDOM)| :TQ10000 |  1835K|    66M|  1683   (1)| 00:00:21 |  Q1,00 | P->S | QC (RAND)  |
|   3 |    PX BLOCK ITERATOR |		|  1835K|    66M|  1683   (1)| 00:00:21 |  Q1,00 | PCWC |	     |
|   4 |     TABLE ACCESS FULL| EMP_TEMP |  1835K|    66M|  1683   (1)| 00:00:21 |  Q1,00 | PCWP |	     |
--------------------------------------------------------------------------------------------------------------
......

從上面的輸出可以看出表EMP和EMP_TEMP的并行度都為1,但是兩個表的數(shù)據(jù)量相關(guān)很大,EMP只有14條數(shù)據(jù),EMP_TEMP有1835008條數(shù)據(jù)。在執(zhí)行時Oracle選擇的執(zhí)行方式就有不同,EMP是串行執(zhí)行,而EMP_TEMP為并行執(zhí)行。

參考《基于Oracle的SQL優(yōu)化》

官方文檔:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2013.htm#i2231814

當(dāng)前名稱:Oracle開啟并行的幾種方法
網(wǎng)頁地址:http://chinadenli.net/article8/pigjop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化全網(wǎng)營銷推廣電子商務(wù)動態(tài)網(wǎng)站企業(yè)網(wǎng)站制作網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)