什麼是並行查詢及其原理
在OLAP環境,以利用多的CPU和記憶體資源來加速處理資料,也即oracle的並行查詢。單個CPU同一時刻只能服務一個程式,如果有多個CPU,提高CPU利用律,就可以同時執行多個程式。也就是原來單個程式處理的變成多個程式並行處理加速執行時間。並行執行只是在全表處理或者分割槽及在分割槽表中執行本地索引時用到。下面情況會用到並行查詢:
全表掃描、 rebuild index、update (全表或分割槽表)、insert的並行子查詢、本地索引使用、批次插入,象SQLLDR、建立臨時表
比如我們執行
select /*+ parallel(c1 ,2) */
...
from customers c1
order by ...process a process b
fetch rows from fetch rows from
customers customers
|| ||
|| ||
^^ ^^
process c process d
sort rows(a-k) sort rows(l-z)
combine rows
||
return result set
這裡我們看到這個程式分散成4個程式,排序中各負責a-k和l-z,這樣就可以並行處理
我們在分割槽表中,也可以用一個並行從程式對應一個分割槽表如果你的並行度是3,那麼你可能就比普通的執行速度提高3倍
注意在單CPU下,如果使用並行,那麼就可能造成效能下降,而且也要設定合適的並行度
並行適合對於長時間執行的語句
在oltp可能並不適合使用並行處理,因為事務併發比較多,每個使用者都要使用CPU,CPU的負載本來就比較高
所以並行處理還是比較適合olap中的批次匯入,sqlldr,mis report和oltp中rebuild index。
1、看看並行選件是否安裝
SELECT * FROM V$OPTION
看看
Parallel execution是不是TRUE
2、如果是TRUE,執行語句後檢視
select * from V$pq_sesstat;
如果Queries Parallelized>>0就說明是執行了並行
3、可以強制使用PARALLEL,和CPU數量無關,不過在單個CPU下使用並行沒有什麼好處
alter session force parallel query;
4、你是怎麼知道語句沒有使用PARALLEL?
如果你用EXPLAIN ,那麼有兩個指令碼看執行計劃
UTLXPLS.UTLXPLP前一個是看序列計劃的,後一個才能看到並行計劃,
如果你使用SET AUTOTRACE,那麼你如果看到P->S,那麼說明計劃已經是並行的了。1.與並行查詢有關的引數有哪些?
parallel_adaptive_multi_user boolean
啟用或禁用一個自適應演算法,旨在提高使用並行執行方式的多使用者環境的效能。透過按系統負荷自
動降低請求的並行度,在啟動查詢時實現此功能。當 PARALLEL_AUTOMATIC_TUNING = TRUE 時,其效果最佳。
TRUE | FALSE 如果 PARALLEL_AUTOMATIC_TUNING = TRUE,則該值為 TRUE;否則為 FALSE
parallel_automatic_tuning boolean
如果設定為 TRUE,Oracle 將為控制並行執行的引數確定預設值。除了設定該引數外,你還必須為
系統中的表設定並行性。
TRUE | FALSE FALSE
parallel_execution_message_size integer
指定並行執行 (並行查詢、PDML、並行恢復和複製) 訊息的大小。如果值大於 2048 或 4096,就需
要更大的共享池。如果 PARALLEL_AUTOMATIC_TUNING =TRUE,將在大儲存池之外指定訊息緩衝區。
2148 - 無窮大。 如果 PARALLEL_AUTOMATIC_TUNING 為 FALSE,通常值為 2148;如果
PARALLEL_AUTOMATIC_TUNING 為 TRUE ,則值為 4096 (根據作業系統而定)。
parallel_max_servers integer
指定一個例程的並行執行伺服器或並行恢復程式的最大數量。如果需要,例程啟動時分配的查詢服
務器的數量將增加到該數量。
0 -256 由 CPU_COUNT, PARALLEL_AUTOMATIC_TUNING 和 PARALLEL_ADAPTIVE_MULTI_USER 確定
parallel_min_percent integer
指定並行執行要求的執行緒的最小百分比。設定該引數,可以確保並行執行在沒有可用的恰當查詢從
屬時,會顯示一個錯誤訊息,並且該查詢會因此而不予執行。
parallel_min_servers integer
指定為並行執行啟動例程後,Oracle 建立的查詢伺服器程式的最小數量。
0 - PARALLEL_MAX_SERVERS。
parallel_threads_per_cpu integer
說明一個 CPU 在並行執行過程中可處理的程式或執行緒的數量,並最佳化並行自適應演算法和負載均衡算
法。如果計算機在執行一個典型查詢時有超負荷的跡象,應減小該數值
任何非零值。 根據作業系統而定 (通常為 2)
2.當前時刻有那些並行查詢在跑?
14:13:46 SQL> desc v$px_session
名稱 是否為空? 型別
----------------------------------------- -------- ------------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
QCSID NUMBER
QCSERIAL# NUMBER
QCINST_ID NUMBER
SERVER_GROUP NUMBER
SERVER_SET NUMBER
SERVER# NUMBER
DEGREE NUMBER
REQ_DEGREE NUMBER
3.怎麼才能讓查詢有並行執行?
如果建表時指定了並行度,例:
CREATE TABLE LI2.PAR_T
(
a VARCHAR2 (5)
)
PARALLEL 5;
那麼對該表做全表掃描時就會並行
14:26:05 SQL> set autot on
14:26:11 SQL> select * from par_t;
未選定行
已用時間: 00: 00: 00.02
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=82 Bytes=328)
1 0 TABLE ACCESS* (FULL) OF 'PAR_T' (Cost=1 Card=82 Bytes=328) :Q6000
1 PARALLEL_TO_SERIAL SELECT /*+ NO_EXPAND ROWID(A1) */ A1."A" FRO
M "PAR_T" PX_GRANULE(0, BLOCK_RANGE,
如果該表沒有指定並行度,可以在查詢時用hint 實現,例:
select /*+ full(t) parallel(t,5) */ * from your_table t where ...;
4.為什麼本該並行執行的查詢沒有並行執行呢?
系統的並行度由parallel_max_servers 決定,如果它的並行度為5.如果有一個並行度為5的查詢在跑,那麼系統在這條查詢執行完成前是不能再跑並行查詢的,該並行查詢將會以非並行方式執行.
5如果有並行度低於系統最大並行數的查詢在跑,那接下來的並行查詢會怎麼跑呢?
When you specify parallel degree 4 oracle tries to allocate 4 producer slaves and 4 consumer slaves. The producers can feed any of the consumers.
If there are only 2 slaves available then we use these.
If there is only 1 slave available then we go serial
If there are none available then we use serial.
If parallel_min_percent is set then we error ora 12827 instead of using a lower number of slaves or going serial
6.設定parallel_max_servers 多大為好?
在多CPU的環境中,一般把CPU-1或CPU的數量做個最大並行數,因為並行查詢執行時還需要一個程式協調各並行程式.對於單CPU沒什麼好說的.
7.並行查詢能提高系統的效能嗎?
並行查詢執行時,很容易會使機器執行在高負荷下,令系統對其它事務的處理時間大大加長.並行查詢一般適合在非業務高峰值人工執行,並不適合在程式中指定執行並行查詢.
PINNER:
並行不等於快速,僅僅是適合在資料倉儲環境,低業務請求與低併發操作的時候
典型的OLTP系統,如果我們的系統,是絕對不允許並行查詢出現的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/38542/viewspace-914206/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DM並行查詢並行
- 什麼是Ajax(Ajax的來歷、執行原理、優缺點及其它)
- 查詢快捷鍵ctrl加什麼 wordexcel表格查詢快捷鍵是ctrl和什麼Excel
- PostgreSQL並行查詢概述SQL並行
- Oracle並行操作——並行查詢(Parallel Query)Oracle並行Parallel
- excel查詢快捷鍵是什麼 excel表格怎麼快速查詢Excel
- 表和索引並行查詢索引並行
- NLA是什麼?NLA的原理是什麼?
- oracle表查詢的並行度Oracle並行
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- 並行查詢並行度Degree與instances 設定並行
- php陣列中二分查詢是什麼PHP陣列
- 為什麼我使用了索引,查詢還是慢?索引
- 請問高手什麼是啞元?啞元查詢?
- 什麼是JavaScript及其特點(轉)JavaScript
- PostgreSQL/LightDB 不走並行是為什麼?SQL並行
- NLA有什麼用?原理是什麼?
- 什麼是CDN?CDN的技術原理是什麼?
- 交換機是什麼,它的工作原理是什麼
- oracle並行查詢一例薦Oracle並行
- 【Oracle】如何查詢並行是否起作用?Oracle並行
- Oracle 查詢行數很少,為什麼不走索引?Oracle索引
- ssh查詢及其安裝
- 用並行查詢讓SQL Server加速執行並行SQLServer
- 【學習】介面是什麼?實現原理的是什麼?
- oracle 並行查詢時並行資源分配追蹤測試Oracle並行
- 替換快捷鍵ctrl加什麼 word查詢和替換快捷鍵是什麼
- PostgreSQL並行查詢相關配置引數SQL並行
- union的兩個子查詢是否並行並行
- RAC中的並行查詢 DOP(Degree of Parallelism)並行Parallel
- TDSQL-C 並行查詢技術探索SQL並行
- 並行查詢緩慢的問題分析並行
- RAC環境對並行查詢的支援並行
- group by 查詢原理
- Lucene查詢原理
- Oracle查詢原理Oracle
- sql查詢是如何執行的?SQL
- 蜘蛛池的原理是什麼