Oracle並行操作——淺議使用並行的時機
宣告:本篇部分內容參考《Oracle並行SQL指南》,特此感謝!
相對於我們經常使用的Oracle最佳化技術,並行操作是一種很特殊的選擇。恰當合理、有選擇的對一些SQL語句進行並行化處理,可以有針對性的提升系統一些關鍵業務場景的執行效率。但是,另一方面,如果使用並行過多過濫,甚至處處並行,那麼可能引起伺服器整體過載的現象。
那麼,我們如何判斷此時應該進行並行化處理?如何得知哪個時候可以使用並行呢?
1、影響並行因素分析
並行技術是一種軟硬體綜合技術。硬體方面的基礎就是多CPU系統的普及和廣泛應用,多磁碟IO負載分割。硬體方面的提升為並行技術的實現提供了物質上的基礎,多個CPU可以真正的同時完成任務。軟體方面的並行基礎就是並行演算法研究的成熟,一個任務如何分解,分解子任務如何進行溝通、合併等等。軟體方面重新實現了一套演算法體系,支援了系統平行計算的實現。
那麼,我們的並行操作決策受到哪些因素作用和影響呢?
ü 伺服器CPU個數和運算能力
相對於如索引、聚簇表等邏輯最佳化手段,並行操作是一種硬體條件強依賴的最佳化手段。其中,CPU的個數是並行操作效果的決定因素。如果資料庫伺服器擁有多個CPU,那麼採用並行操作的效果就會更好。反之,如果伺服器只有一塊CPU,設定的SQL又要求一個很高的並行度指標,那麼並行程式之間爭用CPU的現象會很多,反而影響到並行整體效能。
作為企業級應用,部署的資料庫伺服器硬體條件應該是有一定水準的。隨著多核CPU和多CPU伺服器的普及,並行操作的硬體條件會慢慢不再成為瓶頸所在。
ü 資料儲存的分散性
通常情況下,Oracle服務程式Server Process獲取一個資料塊,首先是從快取記憶體Buffer Cache中嘗試獲取對應的塊。當沒能尋找到資料塊時,就直接從磁碟上將資料塊獲取到Buffer Cache中,之後再進行寫入等操作。
但是,並行操作的方式卻有所不同。並行操作是多個Process程式在訪問相同的一批資料,如果全部按照Buffer Cache,後磁碟的順序進行操作,很容易造成資料塊爭用和等待。所以,通常的並行操作都是直接針對磁碟上的資料檔案進行讀寫。那麼,如果我們的資料分散度較好,就可以很大程度上避免爭用現象。
另一方面,資料庫儲存結構越來越獨立化。專門的磁碟陣列機的出現,使得資料庫IO能力提高。將資料檔案分散在多個磁碟上,進行分散的IO操作和CPU執行操作,是一個發展方向。
ü 特定SQL考慮使用並行
並行操作通常不是我們的本能選擇,也不會是我們的本能選擇。因為並行操作本身涉及到的範圍很廣,包括軟硬體的協調、資料庫引數的調整。可以說,並行操作是一種需要特定支援、且不斷除錯的工程。作為一般情況下,我們儘量不選擇將其作為首要最佳化目標。
只有對於其他最佳化策略效果不好,或者根本就沒有其他解決方案的時候,考慮進行並行化操作。通常這樣情境下的SQL具有如下特點:
1、系統關鍵需求用例,沒有迴旋和妥協餘地。通常是大作業或者報表操作,現有SQL處理方式難以滿足使用者需求;
2、SQL涉及資料表量巨大,響應時間不能接受;
3、對大資料量資料表或者索引的DDL操作;
這樣型別的SQL在OLTP系統中是不常見的,OLTP系統的側重點一般都是高併發、小事務和快速響應。Oracle並行操作是在OLAP系統中廣泛應用。當系統中出現了類似的問題和場景,可以考慮使用並行操作來提高系統整體相應。
ü 主機存在資源盈餘
通常情況下,生產環境的主機一般都不會做到滿負荷應用。並行操作是強制性的獲取到主機處理資源的一種手段,這樣做的前提是主機還存在資源盈餘。所以,在判斷進行並行操作之前,要確定是否可能主機已經滿負荷。
ü SQL已經過最佳化調整
在各種調優層次級別中,從業務層面、SQL書寫層面進行的調優是價效比最高的一種型別。一種業務思路的變化和最佳化,可以就消除了若干及其複雜連線掃描操作。所以,進行最佳化的首先是從SQL本身的業務角度進行最佳化調整。
當SQL本身沒有調優空間時,而且其他技術不能解決本身的海量資料操作時,可以考慮使用並行操作。
2、專案開發中並行操作規劃
注意,筆者在這裡使用到了規劃planning。的確,經過上面的介紹,並行操作是一種需要高階別關注的最佳化方案。筆者認為,可以從下面幾個方面做到規劃:
ü 預先識別,密切關注分析
對一些關鍵用例中涉及到的關鍵SQL,開發團隊中的開發DBA要做到事先心中有數。適時和開發團隊設計團隊進行溝通交流,提出有益的意見,衡量使用並行操作的必要性和可行性。原則還是一樣,能利用序列滿足需求,就慎用並行。
ü 集中規劃,統一設定
並不是每個需求說需要並行化就進行並行化。我們說整個系統中,需要和能夠進行並行化操作的場景是少數。開發DBA在接受到這樣的需求之後,要根據投產環境的承受能力按照優先順序進行實現。系統的並行承受能力不是無限的,儘可能滿足更多的重要用例,獲取更高的投入產出比是一個方向。
ü 保持監控,隨時調整
最佳化方案不是一成不變的,因為需求是在不斷的變化、資料也在不斷的演變,根據一時理解的最佳化方案可能也有需要變化更新的時候。這就要求存在一種最佳化方案跟蹤機制,定期監控方案並行操作的執行情況和效率。隨時發現和解決問題。
3、結論
並行操作的確立需要慎重,是一個不斷重複、推敲和衡量的過程。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-696291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle的並行世界Oracle並行
- oracle 並行查詢時並行資源分配追蹤測試Oracle並行
- Oracle並行FAQOracle並行
- Oracle 中的並行系列(一)Oracle並行
- 淺談並行測試並行
- Oracle中的並行系列(二):你設定的並行真的生效了嗎?Oracle並行
- oracle表查詢的並行度Oracle並行
- Oracle“並行執行”——監控檢視Oracle並行
- Pytorch使用資料並行,單機多卡PyTorch並行
- LLM並行訓練5-MoE並行並行
- 如何使用 appium+pytest 進行多機並行執行不同 case 檔案APP並行
- PostgreSQL官方並行更新時間表SQL並行
- LLM並行訓練1-流水線並行並行
- LLM並行訓練3-資料並行並行
- LLM並行訓練2-張量並行並行
- LLM並行訓練7-混合並行總結並行
- scala佇列、並行集合基本使用佇列並行
- goroutine的多核並行化,讓出時間片Go並行
- Python的 併發、並行Python並行
- 建立連結串列並進行增加、刪減操作
- 使用.NET並行任務庫(TPL)與並行Linq(PLINQ)充分利用多核效能並行
- systemverilog中for/foreach並行執行並行
- WRF WPS多核並行執行並行
- http協議獲取實時天氣並對包體進行json解析HTTP協議JSON
- 伺服器部署python指令碼並使用crontab定時執行伺服器Python指令碼
- 通過ICMP協議反彈SHELL並執行命令協議
- 【.NET 6】使用EF Core 訪問Oracle+Mysql+PostgreSQL並進行簡單增改操作與效能比較OracleMySql
- 不為人知的技術--Oracle並行非同步執行儲存過程Oracle並行非同步儲存過程
- MySQL並行複製延時時間不準確MySql並行
- [Java併發]執行緒的並行等待Java執行緒並行
- DM並行查詢並行
- Sqoop 並行抽數OOP並行
- PostgreSQL 之並行框架SQL並行框架
- java讀取excel為物件並進行讀寫操作JavaExcel物件
- 強大的Stream並行流並行
- Java 中的並行處理Java並行
- C#並行,多執行緒程式設計並行集合和PLINQ的例項講解並行執行緒程式設計
- 26、多執行緒與並行執行緒並行
- C#中的並行處理、並行查詢的方法你用對了嗎?C#並行