【Oracle】如何查詢並行是否起作用?

楊奇龍發表於2012-04-16
sql 使用了並行提示或者 parallel 關鍵字!
1) 在SQL執行的時候,在PL/SQL DEV看是否有多個活動會話執行一個SQL
2) SQL執行完了以後,在同一個會話查詢v$pq_sesstat
V$PQ_SESSTAT檢視中的輸出結果僅僅指當前的會話,查詢不了其他會話的並行執行的情況,使用該檢視可以
ops$admin@yangdb>select * from v$pq_sesstat;
STATISTIC                      LAST_QUERY SESSION_TOTAL
------------------------------ ---------- -------------
Queries Parallelized                    0             0
DML Parallelized                        0             0
DDL Parallelized                        0             0
DFO Trees                               0             0
Server Threads                          0             0
Allocation Height                       0             0
Allocation Width                        0             0
Local Msgs Sent                         0             0
Distr Msgs Sent                         0             0
Local Msgs Recv'd                       0             0
Distr Msgs Recv'd                       0             0
11 rows selected.
ops$admin@yangdb>select /*+ parallel(e,2) */ count(*) from dba_objects e ;
  COUNT(*)
----------
    110586
ops$admin@yangdb>select * from v$pq_sesstat;
STATISTIC                      LAST_QUERY SESSION_TOTAL
------------------------------ ---------- -------------
Queries Parallelized                    1             1  --並行查詢
DML Parallelized                        0             0  --並行DML
DDL Parallelized                        0             0  --並行DDL
DFO Trees                               1             1  
Server Threads                          2             0
Allocation Height                       2             0
Allocation Width                        1             0
Local Msgs Sent                       205           205  --本地傳送的資訊
Distr Msgs Sent                         0             0 
Local Msgs Recv'd                     205           205  --本地接受的資訊
Distr Msgs Recv'd                       0             0
3) 檢視sql的執行計劃 
|  PX SEND QC (RANDOM)           |:TQ10004    |    17M|    2G| 375209 |
|   WINDOW SORT                  |            |    17M|    2G| 375209 |
|    PX RECEIVE                  |            |    17M|    2G| 213700 |
|     PX SEND HASH               |:TQ10003    |    17M|    2G| 213700 |
|      HASH JOIN RIGHT OUTER     |            |    17M|    2G| 213700 |
|       BUFFER SORT              |            |       |      |        |
|        PX RECEIVE              |            |     2M|   49M|   5648 |
|         PX SEND BROADCAST      |:TQ10000    |     2M|   49M|   5648 |
|          TABLE ACCESS FULL     |TBDM        |     2M|   49M|   5648 |
|       HASH JOIN RIGHT OUTER    |            |    17M|    2G| 208026 |
|        BUFFER SORT             |            |       |      |        |
|         PX RECEIVE             |            |     2M|   87M|   4430 |
|          PX SEND BROADCAST     |:TQ10001    |     2M|   87M|   4430 |
|           TABLE ACCESS FULL    |T_IDL       |     2M|   87M|   4430 |
|        HASH JOIN RIGHT OUTER   |            |    17M|    1G| 203572 |
|         BUFFER SORT            |            |       |      |        |
|          PX RECEIVE            |            |     1M|   53M| 113082 |
|           PX SEND BROADCAST    |:TQ10002    |     1M|   53M| 113082 |
|            TABLE ACCESS FULL   |DM          |     1M|   53M| 113082 |
|         PX BLOCK ITERATOR      |            |    17M|  820M|  90465 |
|          TABLE ACCESS FULL     |IDL         |    17M|  820M|  90465 |
4)使用V$PX_SESSTAT或者gvV$px_sesstat 可以檢視
注意V$PX_SESSTAT的名稱與此類似,但列的設定完全不同。V$PX_SESSTAT檢視將V$PX_SESSTAT的會話資訊與V$SESSTAT表連線。V$PX_SESSION檢視也可以提供程式請求的並行度(req_degree)的資訊,並將其與實際使用的並行度(degree)資訊相比較。
關於

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-721379/,如需轉載,請註明出處,否則將追究法律責任。

相關文章