版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Oracle Database 12c 并行執(zhí)行基礎(chǔ)ORACLE DATABASE 12C 并行執(zhí)行基礎(chǔ)目錄 HYPERLINK l _TOC_250004 引言1 HYPERLINK l _TOC_250003 并行執(zhí)行概念2為什么采用并行執(zhí)行?2并行執(zhí)行原理2 HYPERLINK l _TOC_250002 Oracle 中的并行執(zhí)行4處理并行 SQL 語句4內(nèi)存中并行執(zhí)行16 HYPERLINK l _TOC_250001 控制并行執(zhí)行18啟用并行執(zhí)行18管理并行度18管理并行操作的并發(fā)性21控制并行執(zhí)行的初始化參數(shù)23 HYPERLINK l _TOC_250000 總結(jié)26引言近些年
2、,事務(wù)和數(shù)據(jù)倉庫環(huán)境中數(shù)據(jù)庫存儲的數(shù)據(jù)量一直呈指數(shù)級增長。除了數(shù)據(jù)量的巨大增長,用戶還需要更快地處理數(shù)據(jù)來滿足業(yè)務(wù)需求。并行執(zhí)行對大規(guī)模數(shù)據(jù)處理至關(guān)重要。采用并行方法,只需幾分鐘(而不是幾小時或幾天)即可處理數(shù)百TB 的數(shù)據(jù)。并行執(zhí)行使用多個進(jìn)程完成一項任務(wù)。數(shù)據(jù)庫越是能夠有效地利用所有硬件資源(多個CPU、多個 IO 通道、多個存儲單元、集群中的多個節(jié)點),便會越高效地處理查詢和其他數(shù)據(jù)庫操作。大型數(shù)據(jù)倉庫應(yīng)始終使用并行執(zhí)行方法來實現(xiàn)良好的性能。OLTP 應(yīng)用程序中的特定操作(如批量操作)也可在很大程度上受益于并行執(zhí)行。本白皮書包括三大主題: 并行執(zhí)行的基本概念 為什么應(yīng)使用并行執(zhí)行及其背后
3、的基本原則是什么。 Oracle 并行執(zhí)行的實現(xiàn)和增強(qiáng) 在此,您將熟悉 Oracle 并行架構(gòu)、學(xué)習(xí) Oracle 特有的并行執(zhí)行術(shù)語、了解如何控制和識別并行 SQL 處理的基本知識。 控制 Oracle 數(shù)據(jù)庫中的并行執(zhí)行 最后這節(jié)介紹如何在 Oracle 環(huán)境中啟用和控制并行執(zhí)行,讓您大致了解 DBA 需要考慮的問題。并行執(zhí)行概念并行執(zhí)行是一種常用的方法,通過將任務(wù)分為更小的子任務(wù)來提高操作速度。在本節(jié)中,我們將討論使用并行執(zhí)行的基本原因及其基本概念。此外,我們還將詳細(xì)討論 Oracle 并行執(zhí)行的一些概念。為什么采用并行執(zhí)行?設(shè)想您的任務(wù)是統(tǒng)計某條街道中的汽車數(shù)量。有兩種方法來完成此任務(wù)
4、,一種方法是您可以自己穿過整條街道統(tǒng)計汽車數(shù)量,另一種方法是,您可以邀請朋友幫忙,你們兩個人各自從街道的兩端開始統(tǒng)計汽車數(shù)量直到兩人相遇, 然后將兩人的統(tǒng)計結(jié)果相加即可完成任務(wù)。假設(shè)您朋友的統(tǒng)計速度和您一樣快,那么你們完成統(tǒng)計街道中所有汽車數(shù)量這項任務(wù)所需的時間預(yù)計約為您單獨執(zhí)行此工作所需時間的一半。如果這樣,則您的汽車數(shù)量統(tǒng)計操作量呈線性擴(kuò)展;以兩倍的資源讓總處理時間減半。數(shù)據(jù)庫與統(tǒng)計汽車數(shù)量這個例子并沒有很大區(qū)別。如果您分配兩倍的資源量,所用處理時間是使用原先資源量時所用時間的一半,則操作量呈線性擴(kuò)展。無論是統(tǒng)計汽車數(shù)量還是通過數(shù)據(jù)庫操作提供答案,并行處理的最終目標(biāo)都是線性擴(kuò)展。并行執(zhí)行原
5、理在統(tǒng)計汽車數(shù)量的例子中,我們做了一些基本假設(shè)以實現(xiàn)線性擴(kuò)展。這些假設(shè)反映了并行處理的一些原理。首先,我們選擇僅用兩個人完成統(tǒng)計工作。在此,我們確定了數(shù)據(jù)庫中稱之為并行度 (DOP) 的值。為了最快地解決問題,適合用多少人來執(zhí)行這一任務(wù)?工作量越大,我們所用人員就會越多,當(dāng)然,如果街道較短并且只有 4 輛汽車,則我們應(yīng)避免任何并行,因為與其確定誰從哪里開始,不如直接統(tǒng)計汽車數(shù)量來的快。在此例中,我們確定用兩個人來統(tǒng)計和協(xié)調(diào)的“開銷”是勞有所值的。在數(shù)據(jù)庫中,數(shù)據(jù)庫引擎應(yīng)基于操作的總開銷來做出這個決定。其次,在汽車示例中,我們將工作分為兩等份,每個人在街道的一端開始,并且假設(shè)每個人的統(tǒng)計速度相同
6、。對于數(shù)據(jù)庫中的并行處理也是如此:第一步是將所處理的數(shù)據(jù)分為多個大小差不多的塊,從而使它們的處理時間相同。通常,使用某種形式的散列算法來均勻地劃分?jǐn)?shù)據(jù)。并行處理的這種“數(shù)據(jù)分區(qū)”通常有兩種基本方法,但這兩種方法從根本上是不同的。主要區(qū)別在于是否使用物理數(shù)據(jù)分區(qū)(布局)作為基礎(chǔ),進(jìn)而作為并行執(zhí)行工作的靜態(tài)先決條件。這兩種概念上根本不同的方法分別稱為全共享架構(gòu)和無共享架構(gòu)。圖 1:全共享與無共享在無共享系統(tǒng)中,系統(tǒng)物理上劃分為一些單獨的并行處理單元。每個處理單元具有自己的處理能力(CPU 內(nèi)核)和自己的存儲組件;它的 CPU 內(nèi)核只負(fù)責(zé)自己存儲上的單獨數(shù)據(jù)集。訪問特定數(shù)據(jù)段的唯一方法是使用擁有此數(shù)
7、據(jù)子集的處理單元。此類系統(tǒng)通常也稱為大規(guī)模并行處理 (MPP) 系統(tǒng)。數(shù)據(jù)分區(qū)是這類系統(tǒng)的基本先決條件。為了實現(xiàn)良好的負(fù)載分配,無共享系統(tǒng)必須使用某種散列算法在所有可用處理單元間均勻、靜態(tài)地劃分?jǐn)?shù)據(jù)。必須根據(jù)系統(tǒng)最初的創(chuàng)建情況來確定控制數(shù)據(jù)布局的數(shù)據(jù)分區(qū)策略。因此,無共享系統(tǒng)在其系統(tǒng)中引入了強(qiáng)制、固定的最小并行度,以便執(zhí)行涉及表掃描的操作;固定并行度完全依賴于創(chuàng)建數(shù)據(jù)庫或?qū)ο髸r的固定靜態(tài)數(shù)據(jù)分區(qū):并行處理單元的數(shù)量決定了訪問所有數(shù)據(jù)分區(qū)的最小并行度。大多數(shù)非 Oracle 數(shù)據(jù)倉庫系統(tǒng)都是無共享系統(tǒng)。Oracle 數(shù)據(jù)庫依賴于全共享架構(gòu)。此架構(gòu)不需要任何預(yù)定義的數(shù)據(jù)分區(qū)來實現(xiàn)并行;可以無限制地
8、從所有處理單元訪問所有數(shù)據(jù);操作的并行度與實際數(shù)據(jù)存儲無關(guān)。然而,通過使用 Oracle Partitioning,Oracle 數(shù)據(jù)庫可以基于同樣的處理范式進(jìn)行操作,從而提供與無共享系統(tǒng)完全相同的并行處理功能。值得注意的是,它在提供這類功能的同時對數(shù)據(jù)布局中包含的固定并行訪問并沒有限制。因此,Oracle 除了具有無共享系統(tǒng)的并行功能,它還可以獨立于底層數(shù)據(jù)布局,以各種方式和程度并行執(zhí)行幾乎所有的操作。使用全共享架構(gòu),Oracle 可以通過強(qiáng)于無共享供應(yīng)商的并行執(zhí)行功能超集,實現(xiàn)靈活的并行執(zhí)行和高并發(fā)性,同時不會使系統(tǒng)過載。Oracle 中的并行執(zhí)行Oracle 數(shù)據(jù)庫提供了無需人工干預(yù)即可
9、并行執(zhí)行復(fù)雜任務(wù)的功能??梢圆⑿袌?zhí)行的操作包括但不限于: 數(shù)據(jù)加載 查詢 DML 語句 RMAN 備份 對象創(chuàng)建,例如索引或表創(chuàng)建 優(yōu)化器統(tǒng)計信息收集本白皮書僅著重探討 SQL 并行執(zhí)行,其中包括并行查詢、并行 DML(數(shù)據(jù)操作語言)和并行 DDL(數(shù)據(jù)定義語言)。本文側(cè)重于 Oracle Database 12c,但本文的信息也適用于 Oracle Database 11g,除非明確說明。處理并行 SQL 語句當(dāng)您在 Oracle 數(shù)據(jù)庫中執(zhí)行一條 SQL 語句時,該語句被分解為各個步驟或行源,它們在執(zhí)行計劃中標(biāo)識為不同的行。下面是一個簡單的只涉及一個表的 SQL 語句及其執(zhí)行計劃的示例。此
10、語句返回 CUSTOMERS 表中的客戶總數(shù):SELECT COUNT(*) FROM customers c;圖 2:對 CUSTOMERS 表的 COUNT(*) 串行執(zhí)行計劃一個更復(fù)雜的串行執(zhí)行計劃可能包括多個表之間的聯(lián)接。在下面的示例中,將請求有關(guān)客戶購買的信息。這需要CUSTOMERS 表和 SALES 表之間的聯(lián)接。SELECT c.cust_first_name, c.cust_last_name, s.amount_sold FROM customers c, sales sWHERE c.cust_id=s.cust_id;圖 3:顯示兩表聯(lián)接的更復(fù)雜的串行執(zhí)行計劃如果您并行
11、執(zhí)行一條語句,則 Oracle 數(shù)據(jù)庫將并行執(zhí)行盡可能多的單獨步驟,并在執(zhí)行計劃中反映這一點。如果以并行方式重新執(zhí)行上面的兩個語句,我們可以得到下面的執(zhí)行計劃:圖 4:對 CUSTOMERS 表的 COUNT(*) 并行執(zhí)行計劃圖 5:客戶購買信息,并行計劃這些計劃看起來與前面的頗為不同,這主要是因為,現(xiàn)在的并行處理帶來了以前所沒有的一些額外的后勤處理步驟。Oracle 數(shù)據(jù)庫中的 SQL 并行執(zhí)行基于幾個基本概念。下一節(jié)將討論這些概念來幫助您了解數(shù)據(jù)庫中的并行執(zhí)行, 并提供如何閱讀并行 SQL 執(zhí)行計劃的基礎(chǔ)知識。查詢協(xié)調(diào)器 (QC) 和并行執(zhí)行 (PX) 服務(wù)器Oracle 數(shù)據(jù)庫中的 S
12、QL 并行執(zhí)行基于協(xié)調(diào)器(通常稱為查詢協(xié)調(diào)器,簡稱 QC)和并行執(zhí)行 (PX) 服務(wù)器進(jìn)程的原則。QC 是啟動并行 SQL 語句的會話,PX 服務(wù)器是代表啟動會話并行執(zhí)行工作的各個進(jìn)程。QC 將工作分配給 PX 服務(wù)器,并且可能還須執(zhí)行那些無法并行執(zhí)行的極少的一部分工作(主要是后勤工作)。例如,包含 SUM() 運算的并行查詢需要最后將每個 PX 服務(wù)器各自計算得到的各個小計全部相加,這由 QC 完成。在上面的并行執(zhí)行計劃中,很容易就能找到標(biāo)識為“PX COORDINATOR”的 QC(例如上面圖 5 中的行 ID 1)。充當(dāng)并行 SQL 操作的 QC 的進(jìn)程是實際用戶會話進(jìn)程本身。PX 服務(wù)
13、器從全局可用的 PX 服務(wù)器進(jìn)程池中獲得,并在指定操作存在期間分配給該操作(后文將討論該設(shè)置)。我們的示例并行計劃(圖 4、圖 5)中 QC 項下顯示的所有工作都由 PX 服務(wù)器完成。圖 6:使用查詢協(xié)調(diào)器和一組 PX 服務(wù)器進(jìn)程的并行執(zhí)行在操作系統(tǒng)級很容易就能識別出 PX 服務(wù)器進(jìn)程,例如在 Linux 上,它們是標(biāo)識為 ora_p* 的進(jìn)程:圖 7:使用“ps -ef”在 Linux 操作系統(tǒng)級看到的 PX 服務(wù)器進(jìn)程回到統(tǒng)計汽車數(shù)量的例子中:您和您的朋友在充當(dāng) PX 服務(wù)器,可以有第三個人來扮演 QC 的角色,這個人會告知您和您的朋友去統(tǒng)計汽車數(shù)量。您在街道上執(zhí)行的工作與使用 SQL 和
14、圖 8 中所示的執(zhí)行計劃在數(shù)據(jù)庫內(nèi)執(zhí)行的操作完全相同:唯一的區(qū)別是,在本示例中,數(shù)據(jù)庫計算的是客戶數(shù),沒有道路兩側(cè)可以讓它用來分配工作;稍后我們將在“粒度”一節(jié)討論工作分配。您和您的朋友將去統(tǒng)計各自一側(cè)的汽車數(shù)量;這相當(dāng)于行 ID 4、ID 5 和 ID 6 的操作,其中 ID 5 相當(dāng)于告知你們每個人僅統(tǒng)計自己一側(cè)街道上的汽車數(shù)量。圖 8:執(zhí)行計劃中顯示的 QC 和 PX 服務(wù)器進(jìn)程統(tǒng)計完您自己的一側(cè)后,你們每個人向第三人 (QC) 告知各自的小計(行 ID 3),于是第三人將這些小計加起來得到最終結(jié)果(行 ID 1)。這是從 PX 服務(wù)器(執(zhí)行實際工作的進(jìn)程)到 QC 的移交,以便最終“組
15、裝”結(jié)果,從而將結(jié)果返回到用戶進(jìn)程。使用 SQL Monitor1 有助于輕松識別 PX 服務(wù)器完成的工作 特定操作前面的許多小藍(lán)“人”或小紅“人”,與串行執(zhí)行相比,后者只有單個小綠人。生成者/使用者模型繼續(xù)我們的汽車數(shù)量統(tǒng)計示例,設(shè)想現(xiàn)在的工作是按汽車顏色統(tǒng)計汽車數(shù)量。如果您和您的朋友各自負(fù)責(zé)街道一側(cè),你們每個人可能看到相同的顏色并針對每種顏色進(jìn)行小計,但這不是這條街道的特定顏色車的整個結(jié)果。您可能會去記下所有這些信息并將其告訴給第三人(“負(fù)責(zé)人”)。但是,這個可憐的負(fù)責(zé)人然后必須自己總結(jié)所有結(jié)果 如果街道中所有汽車的顏色都各不相同,將會怎樣?第三人將會完全重做您和您的朋友剛剛做過的工作。為
16、了并行執(zhí)行每種顏色的統(tǒng)計工作,您只是邀請另外兩個朋友幫忙:這兩個朋友和你們一起在街道中間行走,一個人統(tǒng)計您和您朋友各自查看的一側(cè)的所有暗色汽車,另一個人統(tǒng)計所有亮色汽車(假設(shè)這種“汽車分色”大致將信息分成兩半)。每當(dāng)統(tǒng)計新的一輛汽車時,您會將新遇到的汽車告知負(fù)責(zé)此顏色的人員 您生成信息,根據(jù)顏色信息重新分配此信息,而顏色統(tǒng)計者使用此信息。最后,兩個統(tǒng)計顏色的朋友向負(fù)責(zé)人 (QC) 告知結(jié)果,工作就完成了;我們有兩組并行工作人員,每組有兩個朋友攜手執(zhí)行一部分工作。數(shù)據(jù)庫同樣以這種方式工作:為了高效地并行執(zhí)行語句,多組 PX 服務(wù)器配對工作:一組生成行(生成者),一組使用行(使用者)。例如,對于
17、SALES 和 CUSTOMERS 表之間的并行聯(lián)接,一組 PX 服務(wù)器讀取表中的數(shù)據(jù)并將數(shù)據(jù)發(fā)送給另一組,另一組接收數(shù)據(jù)(使用者)并聯(lián)接兩個表,如圖 9 所示,DBMS_XPLAN 包的標(biāo)準(zhǔn)計劃輸出。1 SQL Monitor 是在 Oracle Database 11g 中引入的,它為詳細(xì)監(jiān)視和分析 SQL 執(zhí)行步驟提供了一個非常高效的方法。有關(guān)詳細(xì)信息,請參見 Oracle技術(shù)網(wǎng)中 HYPERLINK /technetwork/database/focus-areas/manageability/sqlmonitor-084401.html 有關(guān) SQL Monitor 的頁面。圖 9:
18、生成者和使用者在執(zhí)行計劃中查看 TQ 列可以識別出同一組 PX 服務(wù)器處理的操作(行源)。如圖 9 所示,第一個 PX 服務(wù)器組(Q1,00) 并行讀取 CUSTOMERS 表并生成記錄行以發(fā)送到 PX 服務(wù)器組 2 (Q1,02),PX 服務(wù)器組 2 使用這些記錄, 然后聯(lián)接來自 SALES 表 (Q1,01) 的記錄。SQL Monitor 以交錯顏色顯示處理并行語句的不同 PX 服務(wù)器組,從而可以輕松識別工作單元以及必須重新分配數(shù)據(jù)的地方的邊界。每當(dāng)數(shù)據(jù)從生成者分發(fā)給使用者時,作為數(shù)據(jù)輸出您將會在 NAME 列中看到格式為 : TQxxxxx(表隊列 x)的項?,F(xiàn)在,請不要考慮圖 9 中
19、的其他列的內(nèi)容。這種生成者/使用者模型會嚴(yán)重影響為給定并行操作分配的 PX 服務(wù)器的數(shù)量:生成者/使用者模型預(yù)計每個并行操作具有兩組 PX 服務(wù)器,因此 PX 服務(wù)器數(shù)量是請求的并行度 (DOP) 的兩倍。例如,如果圖 9 中的并行聯(lián)接運行時的并行度為 4,則此語句將使用 8 個 PX 服務(wù)器,分別是 4 個生成者和 4 個使用者。只有在以下情況,PX 服務(wù)器才不會配對工作:語句是非常基本的語句,只需一組 PX 服務(wù)器即可并行完成整個語句。例如,SELECT COUNT(*) FROM customers; 只需一組 PX 服務(wù)器(參見圖 4)。粒度粒度是訪問數(shù)據(jù)時的最小工作單元。Oracle
20、 數(shù)據(jù)庫使用全共享架構(gòu),從存儲的角度看,這意味著配置中的任何 CPU 內(nèi)核都可以訪問任何數(shù)據(jù)段;這是 Oracle 和大多數(shù)其他數(shù)據(jù)庫供應(yīng)商之間在架構(gòu)方面最基本的不同之處。不同于這些其他系統(tǒng),Oracle 可以并且將會只根據(jù)查詢需求選擇這一最小工作單元。Oracle 數(shù)據(jù)庫用于分配工作以便并行執(zhí)行的基本機(jī)制是塊范圍 所謂基于塊的粒度。這些塊可能駐留在存儲中, 或者在內(nèi)存中并行執(zhí)行的情況下駐留在內(nèi)存中,這將在本文稍后討論。此方法是 Oracle 獨有的,并且與對象是否已分區(qū)無關(guān)。對底層對象的訪問被劃分為許多個粒度,這些粒度分發(fā)給各個 PX 服務(wù)器以便進(jìn)行處理(當(dāng)某個 PX 服務(wù)器完成一個粒度的工
21、作時,將分發(fā)下一個粒度)。圖 10:客戶統(tǒng)計示例中的基于塊的粒度粒度數(shù)量始終遠(yuǎn)高于請求的 DOP , 以便在 PX 服務(wù)器之間平均分配工作。圖 10 所示的操作“PX BLOCKITERATOR”表示對所有生成的塊范圍粒度進(jìn)行迭代。雖然基于塊的粒度是大多數(shù)操作實現(xiàn)并行執(zhí)行的基礎(chǔ),但有一些操作可以受益于底層分區(qū)數(shù)據(jù)結(jié)構(gòu)因而可以利用各個分區(qū)作為工作粒度。使用基于分區(qū)的粒度,對于單個分區(qū),只使用一個 PX 服務(wù)器來處理其所有數(shù)據(jù)。如果操作中訪問的(子)分區(qū)數(shù)量至少等于 DOP(如果各個(子)分區(qū)的大小可能存在偏差,則遠(yuǎn)高于 DOP 較為理想),則 Oracle 優(yōu)化器將考慮基于分區(qū)的粒度。使用基于分
22、區(qū)的粒度的最常見操作是智能化分區(qū)聯(lián)接(稍后將進(jìn)行討論)。根據(jù) SQL 語句和 DOP,Oracle 數(shù)據(jù)庫確定是基于塊的粒度還是基于分區(qū)的粒度可產(chǎn)生更優(yōu)的執(zhí)行;您無法影響此行為。在汽車統(tǒng)計示例中,可以將街道的一側(cè)(甚至長街道的街區(qū))視為等同于基于塊的粒度。將現(xiàn)有數(shù)據(jù)量(街道)細(xì)分為多個物理段,PX 服務(wù)器(您和您的朋友)各自對這些物理段進(jìn)行處理。如果長街道有許多街區(qū),并且只有您和您朋友參與工作,則每人負(fù)責(zé)一半的街區(qū)(“粒度”)。如果您和三個朋友一起工作,則每人負(fù)責(zé)四分之一的街區(qū)。您可以選擇與您一起工作的朋友數(shù)量,您的統(tǒng)計能力將擴(kuò)展。如果我們將街道看做是“靜態(tài)分區(qū)的”,只有左右兩側(cè)分區(qū),那么您只
23、能邀請一位朋友幫忙:您的其他朋友則無事可做。純粹的無共享系統(tǒng)正是使用這樣的靜態(tài)方法工作的,從中可以看出這種架構(gòu)的局限性。數(shù)據(jù)重新分配并行操作(除了最基本的并行操作之外)通常需要重新分配數(shù)據(jù)。需要重新分配數(shù)據(jù)以便執(zhí)行諸如并行排序、聚合和聯(lián)接之類的操作。在塊粒度級別,并不知道單個粒度中包含的實際數(shù)據(jù);塊粒度只是物理塊,沒有邏輯內(nèi)涵。因此,只要后續(xù)操作依賴實際內(nèi)容,就需要重新分配數(shù)據(jù)。在汽車示例中,汽車顏色至關(guān)重要,但您不知道(甚至無法控制)哪些顏色的汽車停泊在街道上哪些位置。根據(jù)另外兩個朋友所負(fù)責(zé)的顏色,您將有關(guān)每種顏色的汽車數(shù)量的信息重新分配給這兩個朋友,使他們對其負(fù)責(zé)的顏色統(tǒng)計總數(shù)量。數(shù)據(jù)重新
24、分配在各個 PX 服務(wù)器組之間發(fā)生,而這些 PX 服務(wù)器或者運行于一臺機(jī)器上,或者運行于 Real Application Clusters (RAC) 系統(tǒng)的多臺機(jī)器(節(jié)點)上。當(dāng)然,在后一種情況下,使用互連通信重新分配數(shù)據(jù)。數(shù)據(jù)重新分配不是 Oracle 數(shù)據(jù)庫所獨有的。實際上,這是并行處理的一個最基本的原則,提供并行功能的每個產(chǎn)品都使用它。但是,Oracle 提供的功能的基本不同之處和優(yōu)勢是并行數(shù)據(jù)訪問(已在前面“粒度”一節(jié)中講過)以及所需的數(shù)據(jù)重新分配不受任何特定硬件架構(gòu)或數(shù)據(jù)庫設(shè)置(數(shù)據(jù)分區(qū))的限制。與全共享系統(tǒng)類似,無共享系統(tǒng)也需要數(shù)據(jù)重新分配,除非操作能夠完全依靠智能化分區(qū)聯(lián)接(
25、本節(jié)后面將進(jìn)一步說明)。在無共享系統(tǒng)中,無法受益于智能化分區(qū)聯(lián)接的并行操作(例如一個簡單的基于兩個不同聯(lián)接鍵的三方表聯(lián)接)總是需要數(shù)據(jù)重新分配,因此總是大量使用互連通信。由于 Oracle 數(shù)據(jù)庫能在節(jié)點的環(huán)境中啟用并行執(zhí)行, 因此并行操作不必總是使用互連通信,從而避免了潛在的互連瓶頸。下一節(jié)將通過無需任何輔助數(shù)據(jù)結(jié)構(gòu)(例如索引或物化視圖以及其他優(yōu)化)的簡單表聯(lián)接示例,介紹 Oracle 的數(shù)據(jù)重新分配功能。串行聯(lián)接在串行兩方聯(lián)接中,單個會話讀取涉及的兩個表并執(zhí)行聯(lián)接。在此示例中,我們假設(shè)聯(lián)接涉及到兩個大型表CUSTOMERS 和 SALES。數(shù)據(jù)庫使用全表掃描來訪問兩個表,如前面的圖 3 所
26、示。在串行聯(lián)接中,單個串行會話掃描兩個表并執(zhí)行完全聯(lián)接。圖 11 描述了串行聯(lián)接。圖 11:串行聯(lián)接并行聯(lián)接以并行方式處理同一簡單的兩方聯(lián)接時,為了確保恰當(dāng)?shù)貏澐謹(jǐn)?shù)據(jù)以便進(jìn)行后續(xù)并行處理,必須對行進(jìn)行分配。在該示例中,PX 服務(wù)器根據(jù)塊范圍掃描每個表的各個物理部分,并且為了完成聯(lián)接,必須根據(jù)聯(lián)接鍵值在 PX 服務(wù)器組之間分配行;您必須確保相同的聯(lián)接鍵值由同一個 PX 服務(wù)器處理,這樣才能確保每行只處理一次。圖 12 描述了之前圖 9 中顯示的 DOP 為 2 的并行聯(lián)接的數(shù)據(jù)分配。由于該聯(lián)接需要兩組 PX 服務(wù)器,實際上有四個PX 服務(wù)器分配給了這個查詢,PX1 和 PX2 讀取表,PX3 和
27、 PX4 執(zhí)行聯(lián)接。PX1 和 PX2 使用塊范圍粒度并行讀取兩個表,然后每個 PX 服務(wù)器根據(jù)聯(lián)接鍵的值將其結(jié)果集分配給后續(xù)并行聯(lián)接運算符;來自兩個表的相同的聯(lián)接鍵值必須發(fā)送到執(zhí)行聯(lián)接操作的同一 PX 服務(wù)器,以確保數(shù)據(jù)正確聯(lián)接。圖 12:簡單并行聯(lián)接的數(shù)據(jù)重新分配。有多種數(shù)據(jù)分配方法。以下是最常見的一些方法:散列:散列分配在并行執(zhí)行中很常見,其目的是依據(jù)散列函數(shù)實現(xiàn)對各個 PX 服務(wù)器的均等工作分配。散列分配是大多數(shù)數(shù)據(jù)倉庫系統(tǒng)使用的基本并行執(zhí)行實現(xiàn)機(jī)制。下面的圖 13 顯示了一個使用散列分配方法的執(zhí)行計劃。這實際上是圖 12 所示的聯(lián)接的執(zhí)行計劃。圖 13:散列分配的執(zhí)行計劃假設(shè)該計劃的
28、 DOP 為 2,一個 PX 組(PX1 和 PX2)讀取 CUSTOMERS 表,對聯(lián)接列應(yīng)用散列函數(shù)并將行發(fā)送給另一個 PX 組中的 PX 服務(wù)器(PX3 和 PX4),通過這種方式,根據(jù)計算的散列值,PX3 得到了一些行,PX4 得到了其他行。然后,PX1 和 PX2 讀取 SALES 表,對聯(lián)接列應(yīng)用散列函數(shù)并將行發(fā)送給另一個 PX 組(PX3 和PX4)。PX3 和 PX4 現(xiàn)在都有了來自兩個表的匹配的行,可以執(zhí)行聯(lián)接了。每個表的分配方法可以在該計劃的 PQ Distrib 和 Operation 列中看出,在第 5 行和第 9 行中,PQ Distrib顯示兩個表的 HASH,而
29、Operation 顯示 PX SEND HASH。廣播:當(dāng)聯(lián)接操作中的兩個結(jié)果集之一遠(yuǎn)小于另一個結(jié)果集時,便會發(fā)生廣播分配。數(shù)據(jù)庫將較小的結(jié)果集發(fā)送到所有 PX 服務(wù)器以確保各個服務(wù)器能夠完成其聯(lián)接操作,而不是分配兩個結(jié)果集中的行。對聯(lián)接操作的較小表進(jìn)行廣播,其優(yōu)勢在于,根本不必重新分配大型表。下面的圖 14 顯示了一個使用廣播分配方法的執(zhí)行計劃。圖 14:廣播分配的執(zhí)行計劃假設(shè)該計劃的 DOP 為 2,一個 PX 組(PX1 和 PX2)讀取 CUSTOMERS 表,并將它的所有結(jié)果集廣播給另一個 PX 組(PX3 和 PX4)。PX3 和 PX4 現(xiàn)在可以讀取 SALES 表并執(zhí)行聯(lián)接,
30、因為它們都有了來自 CUSTOMERS 表的所有行。在該執(zhí)行計劃中,我們可以從第 5 行中看出分配方法,該行的 PQ Distrib 列顯示 BROADCAST,Operation 列顯示 PX SEND BROADCAST。范圍:范圍分配通常用于并行排序操作。各個 PX 服務(wù)器處理各個數(shù)據(jù)范圍,這樣 QC 不必進(jìn)行任何排序,而是僅以正確順序顯示各個 PX 服務(wù)器的結(jié)果。圖 15 顯示了一個對簡單 ORDER BY 查詢使用范圍分配方法的執(zhí)行計劃。圖 15:范圍分配的執(zhí)行計劃假設(shè)該計劃的 DOP 為 2,一個 PX 組(PX1 和 PX2)讀取 SALES 表,PX1 和 PX2 將其所讀的行
31、發(fā)送給 PX3 或PX4,具體發(fā)送給誰,則取決于 ORDER BY 子句中的列值。PX3 和 PX4 都有各自的數(shù)據(jù)范圍,它們對自己獲取的行排序并將結(jié)果發(fā)送給 QC,QC 不需要進(jìn)行任何排序,因為 PX3 和 PX4 已經(jīng)對行進(jìn)行了排序。QC 只需保證先返回來自這個 PX 服務(wù)器的行:該服務(wù)器處理的范圍是必須先返回的范圍。例如,如果基于 time_id 按最新數(shù)據(jù)在前排序,PX3 擁有一月份之前的數(shù)據(jù)范圍,PX4 擁有所有較新數(shù)據(jù),那么 QC 首先將 PX4 的排序結(jié)果返回給最終用戶然后再返回來自 PX3 的結(jié)果,以確完整結(jié)果的正確排序。在該執(zhí)行計劃中,我們可以在第 5 行中看到分配方法,PQ
32、 Distrib 列顯示 RANGE,Operation 列顯示 PX SEND RANGE。鍵:鍵分配可確保將各個鍵值的結(jié)果集聚集在一起。這是一種優(yōu)化,主要用于部分智能化分區(qū)聯(lián)接(參見下文)以確保只需分配聯(lián)接中的一方。圖 16 顯示了一個使用鍵分配方法的執(zhí)行計劃。圖 16:鍵分配的執(zhí)行計劃根據(jù)聯(lián)接列對 CUSTOMERS 表散列分區(qū),而 SALES 表不分區(qū)。該計劃顯示,一個 PX 組(PX1 和 PX2)讀取SALES 表,并基于 CUSTOMERS 表的分區(qū)將行發(fā)送給另一組 PX 服務(wù)器(PX3 和 PX4)。采用這種方法,PX3 和PX4 可以同時處理不同的分區(qū),因為它們從 SALES
33、 獲得了它們需要聯(lián)接的分區(qū)的所有匹配行。PX3 和 PX4 不必對行進(jìn)行任何重新分配。在該執(zhí)行計劃中,我們可以在第 5 行中看到分配方法,PQ Distrib 列顯示 PART (KEY),Operation 列顯示PX SEND PARTITION (KEY)?;旌仙⒘校夯旌仙⒘蟹椒ㄊ窃?Oracle Database 12c 中引入的,是一種自適應(yīng)分配技術(shù),該技術(shù)直到執(zhí)行時才基于結(jié)果集的大小決定最終分配方法。新混合散列分配前面設(shè)置了一個稱為 STATISTICS COLLECTOR 的新的計劃步驟,它統(tǒng)計從 PX 服務(wù)器返回的行數(shù),并根據(jù)某個最大閾值檢查該計數(shù)。如果達(dá)到閾值,則基于散列分配
34、來分配行更經(jīng)濟(jì)高效。如果整個結(jié)果集的大小低于該閾值,則廣播數(shù)據(jù)。圖 17 顯示了一個使用混合散列分配方法的執(zhí)行計劃。圖 17:混合散列分配的執(zhí)行計劃在該執(zhí)行計劃中, 我們可以在第 5 行和第 10 行中看到分配方法, PQ Distrib 列顯示 HYBRID HASH ,Operation 列顯示 PX SEND HYBRID HASH??梢栽诘?6 行中看到新的計劃步驟 STATISTICS COLLECTOR。作為數(shù)據(jù)分配方法的一個變化,您可以在 Real Application Clusters (RAC) 數(shù)據(jù)庫的并行執(zhí)行計劃中看到 LOCAL 后綴。LOCAL 分配是針對 RAC
35、環(huán)境的一種優(yōu)化,可最大程度減少節(jié)點間并行查詢的互連流量。例如,您可以在執(zhí)行計劃中看到 BROADCAST LOCAL 分配,表示行集在本地節(jié)點上生成并且只發(fā)送到此節(jié)點上的 PX 服務(wù)器。并行智能化分區(qū)聯(lián)接即使數(shù)據(jù)庫試圖根據(jù)優(yōu)化器統(tǒng)計信息選擇最好的分配方法,PX 組之間的行分配也需要進(jìn)程間,有時是實例間通信。而完全智能化聯(lián)接或部分智能化聯(lián)接等技術(shù)則可以盡量減少甚至避免數(shù)據(jù)分配,從而可能極大地提高并行執(zhí)行性能。如果聯(lián)接中訪問的至少一個表基于聯(lián)接鍵進(jìn)行了分區(qū),則數(shù)據(jù)庫可以決定使用智能化分區(qū)聯(lián)接。如果兩個表都基于聯(lián)接鍵進(jìn)行了同樣的分區(qū),則數(shù)據(jù)庫可以使用完全智能化分區(qū)聯(lián)接。否則,可以使用部分智能化分區(qū)聯(lián)
36、接,其中一個表在內(nèi)存中進(jìn)行動態(tài)分區(qū),然后進(jìn)行完全智能化分區(qū)聯(lián)接。圖 18:完全智能化分區(qū)聯(lián)接不需要數(shù)據(jù)分配。智能化分區(qū)聯(lián)接不需要任何數(shù)據(jù)分配,因為各個 PX 服務(wù)器將處理兩個聯(lián)接表的同等分區(qū)。圖 18 顯示了與圖 12 相同的聯(lián)接語句,但這次是基于聯(lián)接列 cust_id 對表進(jìn)行同等的分區(qū),在這個例子中,CUSTOMERS 表基于 cust_id 列進(jìn)行散列分區(qū),而 SALES 表首先按日期列進(jìn)行范圍分區(qū),然后再按 cust_id 列進(jìn)行散列子分區(qū)。如圖所示,PX1 讀取 SALES 表范圍分區(qū)的所有子分區(qū),然后再讀取 CUSTOMERS 表的同等散列分區(qū)(這在圖 19 的執(zhí)行計劃中表示為 S
37、ALES 表的表掃描之上的 PARTITION RANGE ALL 迭代器);兩個表基于聯(lián)接鍵的同等分區(qū)保證了在這些分區(qū)之外不會有匹配的聯(lián)接行。PX 服務(wù)器只需讀取這些匹配分區(qū),就能完成全部聯(lián)接。對于 PX2 也是如此,對于這兩個表的任何同等分區(qū)同樣如此。請注意,智能化分區(qū)聯(lián)接使用基于分區(qū)的粒度, 而不是基于塊的粒度。比較圖 12,您還可以看到,智能化分區(qū)聯(lián)接使用一個 PX 服務(wù)器組。而不是兩個。圖 19 顯示了這個聯(lián)接語句的執(zhí)行計劃。圖 19:智能化分區(qū)聯(lián)接的執(zhí)行計劃Operation 和 PQ Distrib 列指示沒有數(shù)據(jù)分配,而 TQ 列顯示只使用了一個 PX 組。智能化分區(qū)聯(lián)接是無共
38、享系統(tǒng)的基本實現(xiàn)方法。無共享系統(tǒng)只要可以利用智能化分區(qū)聯(lián)接,通??闪己脭U(kuò)展。因此,無共享系統(tǒng)中分區(qū)的選擇(分配)與表的訪問路徑一樣重要。在 MPP 系統(tǒng)中,不使用智能化分區(qū)操作的操作通常也不能良好擴(kuò)展。內(nèi)存中并行執(zhí)行在傳統(tǒng)并行處理中,數(shù)據(jù)會繞過所有共享緩存直接傳輸?shù)?PX 服務(wù)器進(jìn)程的內(nèi)存 (PGA) 中,而與傳統(tǒng)并行處理不同的是,內(nèi)存中并行執(zhí)行(內(nèi)存中 PX)會利用共享內(nèi)存緩存 (SGA) 來存儲數(shù)據(jù)以便進(jìn)行后續(xù)并行處理。內(nèi)存中 PX 利用當(dāng)今數(shù)據(jù)庫服務(wù)器中不斷增長的內(nèi)存;這對大規(guī)模集群環(huán)境來說尤其有用,在這種環(huán)境中,聚合的總內(nèi)存量可以達(dá)數(shù) TB,即使單個數(shù)據(jù)庫服務(wù)器“只”擁有數(shù)十或數(shù)百 G
39、B 的內(nèi)存。使用內(nèi)存中 PX,Oracle 可以在 Real Application Clusters (RAC) 環(huán)境中使用聚合的服務(wù)器內(nèi)存緩存,從而有效地跨所有節(jié)點的內(nèi)存緩存分配的對象。這確保了后續(xù)并行查詢將從所有節(jié)點的緩存讀取數(shù)據(jù),而不是從存儲讀取數(shù)據(jù),從而可以極大提高處理速度。Oracle Database 12c 版本 引入了 Oracle Database In-Memory 選件,這是專門針對內(nèi)存中處理而設(shè)計的列式內(nèi)存中數(shù)據(jù)存儲,用以支持實時海量數(shù)據(jù)分析。其壓縮列格式及針對內(nèi)存中技術(shù)優(yōu)化的數(shù)據(jù)處理算法提供了最佳的內(nèi)存中處理。我們推薦的內(nèi)存中處理方法就是利用 Oracle 新的數(shù)據(jù)
40、庫內(nèi)存中技術(shù)。有關(guān)該特性的詳細(xì)信息,請參見白皮書 HYPERLINK /technetwork/database/in-memory/overview/twp-oracle-database-in-memory-2245633.html “Oracle 數(shù)據(jù)庫內(nèi)存中技術(shù)”。未配置 Database In-Memory 選件的系統(tǒng)也可以利用內(nèi)存中 PX,但無法使用內(nèi)存中壓縮列存儲及優(yōu)化的內(nèi)存中算法。從 Oracle Database 11g 第 2 版開始,數(shù)據(jù)庫就對內(nèi)存中 PX 使用標(biāo)準(zhǔn)的數(shù)據(jù)庫緩沖區(qū)緩存,這也是聯(lián)機(jī)事務(wù)處理使用的緩存。因為 OLTP 與并行操作使用同一緩存,因此它們之間存在著
41、“爭搶”緩沖區(qū)緩存的風(fēng)險,為了確保并行操作不會占用整個緩存,Oracle 數(shù)據(jù)庫將內(nèi)存中 PX 能用的緩沖區(qū)緩存百分比限制為 80%。使用該模型,內(nèi)存中 PX 的好處可能會受到限制,具體取決于并行處理的數(shù)據(jù)量以及 OLTP 應(yīng)用程序的內(nèi)存需求。具有較少數(shù)據(jù)量和具有更多混合(及變化的)負(fù)載特征的最常見的系統(tǒng)會從該方法受益。為了拓寬內(nèi)存中 PX 的適用性 無論是在適合使用內(nèi)存中處理的對象的大小方面,還是為了提供最佳的全表掃描感知的緩存,Oracle Database 12c 引入了自動大表緩存 (ABTC),它會專門為并行內(nèi)存中處理保留部分專用緩沖區(qū)內(nèi)存。使用 ABTC,會保留一部分?jǐn)?shù)據(jù)庫緩沖區(qū)緩
42、存來在內(nèi)存中存儲大對象(或大對象的一部分),這樣就可以有更多的查詢能利用內(nèi)存中并行執(zhí)行。適合緩存的對象的大小最多可以是保留的可用內(nèi)存的三倍。ABTC 使用優(yōu)化段和基于熱度的算法,確保可用緩存得到最佳使用。要啟用使用 ABTC 的內(nèi)存中 PX,必須設(shè)置下面兩個參數(shù): PARALLEL_DEGREE_POLICY:必須設(shè)置為 AUTO 或 ADAPTIVE DB_BIG_TABLE_CACHE_PERCENT_TARGET:指定為內(nèi)存中 PX 保留的數(shù)據(jù)庫緩沖區(qū)緩存的百分比。使用內(nèi)存中 PX 和 ABTC,數(shù)據(jù)庫將決定語句訪問的對象是否應(yīng)該緩存在 ABTC 中。對象可以是表、索引,在分區(qū)對象的情況
43、下,也可以是一個或多個分區(qū)。這一決定根據(jù)一組高級試探而做出,這些試探包括對象的大小、對象訪問的頻率,以及 ABTC 的大小。如果該對象符合這些條件,內(nèi)存中處理將被啟用,訪問的對象將緩存在 ABTC 中。在具有多個節(jié)點的 RAC 環(huán)境情況下,對象將被分段(分為多個段)并分配給所有參與節(jié)點;每個分段將確定地映射(關(guān)聯(lián))到一個特定的 RAC 節(jié)點并存儲在該節(jié)點的緩沖區(qū)緩存中。分段可以是某個表的塊的物理范圍,在分區(qū)對象的情況下,也可以是各個分區(qū)。映射分段之后,對此分段的所有后續(xù)訪問都將在此節(jié)點上發(fā)生。如果從集群中的任意節(jié)點發(fā)出需要相同數(shù)據(jù)的后續(xù)并行 SQL 語句,則數(shù)據(jù)所在的節(jié)點上的 PX 服務(wù)器將訪
44、問自己的ABTC 緩存中的數(shù)據(jù),并且只將結(jié)果返回到發(fā)出語句的節(jié)點;并沒有通過緩存融合在節(jié)點之間移動數(shù)據(jù)。如果決定不緩存對象,則通過直接路徑 IO 訪問該對象。圖 20:某個分區(qū)表跨兩節(jié)點 RAC 集群的內(nèi)存中并行執(zhí)行的示例數(shù)據(jù)分配控制并行執(zhí)行為了以高效的方式使用并行執(zhí)行,您需要考慮如何啟用它、如何指定語句的并行度 (DOP),以及如何在可能同時運行多個并行語句的并發(fā)環(huán)境中使用它。啟用并行執(zhí)行默認(rèn)情況下,Oracle 數(shù)據(jù)庫對查詢和 DDL 語句均啟用并行執(zhí)行。對 DML 語句,您需使用 ALTER SESSION 語句在會話級啟用它。ALTER SESSION ENABLE PARALLEL
45、DML;管理并行度即使啟用了并行執(zhí)行,對于是否以并行方式運行一個語句的決定還取決于一些其他因素。您可以使用 Oracle 的自動并行度 (Auto DOP) 框架讓 Oracle 完全控制對并行度的選擇和管理,也可以人工控制并行度的選擇。使用 AutoDOP 是 Oracle 推薦的在 Oracle Database 12c 環(huán)境中控制并行執(zhí)行的方法。自動并行度 (Auto DOP)使用 Auto DOP,數(shù)據(jù)庫將自動決定是否應(yīng)并行執(zhí)行某個語句以及應(yīng)使用的 DOP。系統(tǒng)根據(jù)語句的資源需求(也稱“開銷”)來決定是否使用并行執(zhí)行并選擇 DOP。如果語句預(yù)計花費的時間小于 PARALLEL_MIN_
46、TIME_THRESHOLD(默認(rèn)為 AUTO,相當(dāng)于 10 秒),則該語句將串行運行。如果預(yù)計花費時間大于 PARALLEL_MIN_TIME_THRESHOLD,則優(yōu)化器根據(jù)執(zhí)行計劃中所有掃描操作(全表掃描、索引快速全掃描、聚合、聯(lián)接等)的開銷來確定語句的理想 DOP。Oracle Database 12c 使用所有操作的 CPU 開銷和 IO 開銷,而 Oracle Database 11g 則只使用 Auto DOP 計算的 IO 開銷。根據(jù)語句的開銷,理想的 DOP 可能變得很大。為了確保您不會為單個語句分配太多的并行執(zhí)行服務(wù)器,優(yōu)化器將對實際使用的 DOP 設(shè)置上限。該上限通過參數(shù)
47、 PARALLEL_DEGREE_LIMIT 來設(shè)置。此參數(shù)的默認(rèn)值是 CPU,這意味著最大 DOP 受系統(tǒng)的默認(rèn) DOP 的限制。用于推算默認(rèn) DOP 的公式為:PARALLEL_THREADS_PER_CPU * SUM(CPU_COUNT across all cluster nodes)優(yōu)化器將其理想 DOP 與 PARALLEL_DEGREE_LIMIT 進(jìn)行比較,并取較小值。ACTUAL DOP = MIN(IDEAL DOP, PARALLEL_DEGREE_LIMIT)將 PARALLEL_DEGREE_LIMIT 設(shè)置為特定數(shù)值可以控制 Auto DOP 將會在系統(tǒng)范圍使用的
48、最大 DOP。對不同用戶組或應(yīng)用程序的更細(xì)粒度控制,Oracle Database Resource Manager (DBRM) 允許為各個資源用戶組設(shè)置不同的DOP 限制。除了通過 PARALLEL_DEGREE_LIMIT 設(shè)置系統(tǒng)范圍的上限 DOP , 我們還建議使用 Database Resource Manager 來對最大 DOP 進(jìn)行細(xì)粒度控制。下圖從理論上說明沒有 Database Resource Manager 時如何在系統(tǒng)范圍決定是否并行執(zhí)行語句以及要使用的DOP。使用 Database Resource Manager 時,理想 DOP 的計算將變?yōu)椋篈CTUAL D
49、OP = MIN(IDEAL DOP, PARALLEL_DEGREE_LIMIT, DBRM limit)圖 21:沒有 Database Resource Manager 時,Auto DOP 的決定過程(理論上)執(zhí)行計劃的備注部分顯示和說明了所選的實際 DOP 。對于使用 explain plan 命令和實際執(zhí)行的語句(V$SQL_PLAN 中存儲的信息)解釋的語句都提供了該信息。例如,下面顯示的執(zhí)行計劃是在 CPU_COUNT =32、PARALLEL_THREADS_PER_CPU = 2 和 PARALLEL_DEGREE_LIMIT = CPU 的情況下在單實例數(shù)據(jù)庫上生成的。在
50、備注部分,您會注意到所選 DOP 為 64。在此系統(tǒng)上,并行度 64 是 PARALLEL_DEGREE_LIMIT 允許的最大 DOP (2 * 32)。圖 22:執(zhí)行計劃的備注部分中顯示的自動并行度Auto DOP 由初始化參數(shù) PARALLEL_DEGREE_POLICY 控制,并通過 LIMITED、AUTO 或 ADAPTIVE 設(shè)置來啟用??梢栽谙到y(tǒng)級或會話級應(yīng)用此初始化參數(shù)。此外,還可以使用提示 PARALLEL 或 PARALLEL(AUTO) 對特定 SQL 語句啟用 Auto DOP:SELECT /*+ parallel(auto) */ COUNT(*) FROM cu
51、stomers;手動設(shè)置并行度PARALLEL_DEGREE_POLICY 設(shè)置為 MANUAL 時,Auto DOP 功能被禁用,最終用戶必須自己管理系統(tǒng)中的并行執(zhí)行使用。您可以在會話、語句或?qū)ο蠹壵埱笏^的默認(rèn) DOP 或 DOP 的特定固定值。DEFAULT 并行度DEFAULT 并 行 度 使 用 一 個 公 式 基 于 初 始 化 參 數(shù) 確 定 DOP 。 在 單 實 例 數(shù) 據(jù) 庫 中 , 該 計 算 公 式 為PARALLEL_THREADS_PER_CPU * CPU_COUNT , 在 RAC 環(huán) 境中 , 為 PARALLEL_THREADS_PER_CPU *SUM(C
52、PU_COUNT)。因此,在每個節(jié)點設(shè)置為 CPU_COUNT=8 和 PARALLEL_THREADS_PER_CPU=2 的四節(jié)點集群上,默認(rèn) DOP 將為 2 * 8 * 4 = 64。您可以使用下列方法之一獲得 DEFAULT 并行度。設(shè)置對象的并行子句。ALTER TABLE customers PARALLEL;使用語句級提示 parallel(default)。SELECT /*+ parallel(default) */ COUNT(*) FROM customers;使用對象級提示 parallel(table_name, default)。SELECT /*+ parall
53、el(customers, default) */ COUNT(*) FROM customers;注意,上面第一種方法中顯示的表設(shè)置以人工模式為您提供默認(rèn) DOP,即當(dāng) PARALLEL_DEGREE_POLICY 設(shè)置為MANUAL。DEFAULT 并行度針對單用戶負(fù)載,旨在使用最多資源(假設(shè)使用的資源越多,操作就會越快完成)。數(shù)據(jù)庫不檢查并行度是否有意義,即不檢查并行度是否會為您提供任何可擴(kuò)展性。例如,您可以運行 SELECT * FROM emp; 使用前面介紹的系統(tǒng)上的默認(rèn)并行度,但您在返回的這 14 個記錄中將看不到任何可擴(kuò)展性。在多用戶環(huán)境下,DEFAULT 并行度將迅速用完系統(tǒng)
54、資源,沒有留下可用資源以便其他用戶并發(fā)執(zhí)行并行語句。固定并行度 (DOP)與 DEFAULT 并行度不同,可以從 Oracle 數(shù)據(jù)庫請求特定 DOP。您可以使用下列方法之一獲得固定 DOP。為對象設(shè)置固定 DOP。ALTER TABLE customers PARALLEL 8 ; ALTER TABLE sales PARALLEL 16 ;使用語句級提示 parallel(integer)。SELECT /*+ parallel(8) */ COUNT(*) FROM customers;使用對象級提示 parallel(table_name, default)。SELECT /*+ p
55、arallel(customers, 8) */ COUNT(*) FROM customers;注意 , 上面第一種方法中顯示的表設(shè)置只在人工模式和限制模式下為您提供固定 DOP , 即當(dāng) PARALLEL_DEGREE_POLICY 設(shè)置為 MANUAL 或 LIMITED 時。在 AutoDOP 模式(AUTO 或 ADAPTIVE)下,將忽略任何表修飾。還要注意,對第一種方法的示例設(shè)置,Oracle 將按以下方式選擇請求的 DOP: 只訪問 CUSTOMERS 表的查詢使用請求的 DOP 8。 訪問 sales 表的查詢將請求 DOP 16。 訪問 sales 和 customers
56、兩個表的查詢將以 DOP 16 進(jìn)行處理。Oracle 使用更高的 DOP2在并行處理需要兩組 PX 服務(wù)器分別用于生成者/使用者處理的情況下,所分配的服務(wù)器的數(shù)量總會是所請求的 DOP的兩倍。管理并行操作的并發(fā)性無論預(yù)期負(fù)載模式如何,您都希望確保 Oracle 的并行執(zhí)行功能在您的環(huán)境中得到最佳使用。這意味著除了控制并行度還有三個基本任務(wù):確保系統(tǒng)不會因并行處理過載確保任何特定語句都能獲得所需的并行資源遵循對不同的用戶組可能不同的優(yōu)先級。Oracle 的 Auto DOP 框架不僅無需任何用戶干預(yù)就能全面控制并行處理的使用, 而且滿足前兩個需求。與Database Resource Mana
57、ger(負(fù)責(zé)第三個需求)相結(jié)合,Oracle 提供了全面的負(fù)載管理框架,可以滿足世界上最復(fù)雜的混合負(fù)載需求。管理并行執(zhí)行 (PX) 服務(wù)器進(jìn)程的數(shù)量Oracle 數(shù)據(jù)庫將進(jìn)程從 PX 服務(wù)器進(jìn)程池中分配給并行操作。通過 PARALLEL_MAX_SERVERS 參數(shù)設(shè)置池中允許的最大 PX 服務(wù)器進(jìn)程數(shù)。這是一個硬性限制,用于防止系統(tǒng)因太多進(jìn)程而過載。默認(rèn)情況下,此參數(shù)設(shè)置為5 * concurrent_parallel_users * CPU_COUNT * PARALLEL_THREADS_PER_CPUconcurrent_parallel_users 的值按如下方法計算: 如果設(shè)置了
58、MEMORY_TARGET 或 SGA_TARGET 初始化參數(shù),則數(shù)量為concurrent_parallel_users = 4。 如果沒有設(shè)置 MEMORY_TARGET 和 SGA_TARGET,則檢查 PGA_AGGREGATE_TARGET。如果設(shè)置了PGA_AGGREGATE_TARGET 的值,則 concurrent_parallel_users = 2。如果沒有設(shè)置PGA_AGGREGATE_TARGET 的值,則 concurrent_parallel_users = 1。當(dāng)池中的所有進(jìn)程都分配出去后,需要并行執(zhí)行的新操作要么串行執(zhí)行,要么以降級的 DOP 來執(zhí)行,因而這
59、些操作的性能會降低。為了防止達(dá)到 PARALLEL_MAX_SERVERS 進(jìn)而操作串行執(zhí)行或降級執(zhí)行,Auto DOP 通過參數(shù)PARALLEL_SERVERS_TARGET 使用一個額外的限制設(shè)置。默認(rèn)情況下,此參數(shù)設(shè)置為:2 * concurrent_parallel_users * CPU_COUNT * PARALLEL_THREADS_PER_CPUPARALLEL_SERVERS_TARGET 是使用語句排隊之前可用于運行并行語句的 PX 服務(wù)器進(jìn)程的數(shù)量。將它設(shè)置為小于 PARALLEL_MAX_SERVERS,以確保每個并行語句可獲得所有需要的 PX 服務(wù)器資源并防止因 PX
60、 服務(wù)器而使系某些語句并不遵循此規(guī)則,例如并行 CREATE TABLE AS SELECT;對這些例外情況的討論超出本白皮書的范圍。統(tǒng) 過 載。 注意, 即 使已 激活語 句 排隊 , 所有 串 行( 非并行 ) 語句 也會立 即 執(zhí)行 。 還要 注 意 , 僅當(dāng)在PARALLEL_DEGREE_POLICY 設(shè)置為 AUTO 或 ADAPTIVE(該強(qiáng)制初始設(shè)置是為了調(diào)用 Auto DOP 的全部功能)下運行時才需要考慮 PARALLEL_SERVERS_TARGET 這個更低的限制。圖 23:一個顯示 PX 服務(wù)器進(jìn)程數(shù)量限制的示例配置使用語句排隊管理并發(fā)并行處理SQL 語句以特定 DO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廚垃圾處理工操作水平模擬考核試卷含答案
- 選礦集控工崗前認(rèn)證考核試卷含答案
- 老年皮膚疾病患者的氣候防護(hù)方案
- 汽車服務(wù)話術(shù)指南
- 戶外蛇咬傷與蟲蜇傷的急救指南
- 寵物護(hù)理經(jīng)驗交流
- 《2026年》護(hù)理教師崗位高頻面試題包含詳細(xì)解答
- 2026年及未來5年市場數(shù)據(jù)中國地方投融資平臺行業(yè)市場深度研究及投資戰(zhàn)略規(guī)劃報告
- 交通設(shè)施維護(hù)保養(yǎng)規(guī)范制度
- 2026年及未來5年市場數(shù)據(jù)中國批發(fā)行業(yè)市場全景分析及投資規(guī)劃建議報告
- 2025年農(nóng)村人居環(huán)境五年評估報告
- 《開學(xué)第一課:龍馬精神·夢想起航》課件 2025-2026學(xué)年統(tǒng)編版語文七年級下冊
- 2026年洪湖市事業(yè)單位人才引進(jìn)100人參考考試題庫及答案解析
- 2026年中好建造(安徽)科技有限公司第一次社會招聘42人筆試參考題庫及答案解析
- 北京市海淀區(qū)2025一2026學(xué)年度第一學(xué)期期末統(tǒng)一檢測歷史(含答案)
- 小拇指培訓(xùn)課件
- 緊急護(hù)理人力資源應(yīng)急資源儲備
- GB/T 22182-2025油菜籽葉綠素含量的測定分光光度計法
- 2026吉林長春汽車經(jīng)濟(jì)技術(shù)開發(fā)區(qū)招聘編制外輔助崗位人員69人考試備考試題及答案解析
- 2024年基層社會治理專題黨課
- 消防培訓(xùn)案例課件
評論
0/150
提交評論