1. 並行查詢讓sql Server加速運行
並行查詢其優勢就是可以通過多個線程來處理查詢作業 從而提高查詢的效率 SQL Server資料庫為具有多個CPU的山帆或資料庫伺服器提供並行查詢的功能 以優化查詢作業的性能 也就是說 只要資料庫伺服器有多個CPU 則資料庫系統就可以使用多個操作系統進程並行執行查詢操作 來加速完成查詢作業
一 並行查詢三步走
並行查詢作業在資料庫中 主要經過三個步驟
首先 資料庫會判斷是否需要進行並行查詢 在資料庫中有一個查詢優化器 會對SQL語句進行優化 然後資料庫才會去執行查詢語句 而這個查詢器在對SQL語句進行查詢優化時 其中一個動作就是判斷是否需要對SQL語句進行查詢優化 也就是說 並不是所有的SQL查詢語句都可以從並行查詢中獲取收益 如果查詢優化器認為查詢語句可以從並行查詢中獲取收益的話 則就會將交換運算符插入到查詢執行計劃中 為並行查詢做准備 故哪些語句需要採用並行查詢 哪些不需要 這不用資料庫管理員關心 資料庫查詢優化器會幫管理員作出這個決定 資料庫管理員需要清楚的是 在哪些情況下 資料庫SQL優化器會認為不宜採用並行查詢 通常情況下 只要滿足以下條件的任何一個 則就不會執行並行查詢 一是對於特定的查詢 查詢優化器認為串列查詢執行計劃要快於任何可能的並行執行計劃;二是查詢的串列執行成本並不高 不需要進行並行查詢;三是查詢中包含無法並行運行的標量運算符或者關系運算符 若從資料庫管理員的角度講 第三個條件對我們具有最大的影響 當資料庫預計未來可能利用並行查詢來提高資料庫性能時 則在資料庫設計時 就需要注意避免使用那些無法在並行查詢功能中使用的運算符 因為某些關系運算符或者邏輯運算符可能會要求查詢計劃一定要在串列模式中進行 或者部分需要在串列模式下進行 如此的話 查詢優化器就不會利用並行查詢功能來提高查詢語句的性能 這是資料庫管理員在資料庫設計時必須要考慮到的一個細節問題
其次 確定並行的進程數 當查詢優化器在查詢語句中插入交叉運算符之後 資料庫就會執行並行查詢 並行查轎凳詢在執行計劃時可以使用多個線程 此時 就又遇到了一個問題 資料庫會把這個查詢作業分成幾個進程操作呢?此時 資料庫管理員就需要知道上什麼叫做並行度 其實 在處理並行查詢的時候 數據需要知道最大可使用的進程與實際使用的進程 而最大可使用的進程就叫做並行度 這個並行度的值是在伺服器級別中進行設置 也可以通過系統存儲過程來進行修改 但是 最大可使用進程數不一定等於實際是用進程數 實際是用進程數是資料庫在查詢計劃執行時初始化的時候確定的 也就是說 這不用資料庫管理員去額外的設定 資料庫系統會自動根據計劃的復雜程度來確定合理的進程數目 當然其實際採用的進程數不能夠超過並行度 即最大可以使用的進程數
最後執行查詢 當以上內容確定好之後 資料庫就會執行具體的查詢語句 在這一步中 需要注意一個問題 資料庫管理員還可以在查詢語句中指定MAXDOP查詢提示來修改這個進度值 也就是說 如果某個查詢作業資料庫管理員認為可能會耗時比較久 就可以為這個查詢作業設置比較大的進度值 當利用MAXDOP查詢提示設置這個並行進度值之後 它會覆蓋預先設置的默認值 從而實現針對單個查詢語句設置額外的進度值 以提高某些特殊查詢作業的性能
二 並行查詢中需要注意的內容
注意點一逗伍 需要注意硬體方面的限制
並行查詢是資料庫提高查詢性能的一個有力舉措 不過其往往受到比較大的約束 如上面提高的一些基於成本考慮之外 還有一些硬性的限制 如通常情況下 只有在資料庫伺服器有多個微處理器(CPU )的情況下資料庫才會考慮執行並行查詢 也就是受 只有具有多個CPU的計算機才能夠使用並行查詢 這是一個硬性的限制條件 另外在查詢計劃執行過程中 資料庫還會判斷當時是否有足夠多的線程可以使用 每個查詢操作都要求一定的線程數才能夠執行;而且執行並行計劃比執行串列計劃需要更多的線程 所需要的線程數也會隨著並行度的提高而提高 如果在並行計劃執行的時候 當時資料庫伺服器沒有足夠的線程讓並行計劃使用的話 資料庫引擎就會自動減少並行度 甚至會放棄並行查詢而改為串列計劃 所以說 資料庫是否能夠執行並行查詢 要受到其硬體的限制 為此 如果企業真的需要通過並行查詢來提高資料庫性能的話 則管理員就需要根據情況來調整硬體配置
注意點二 不建議對所有查詢都使用並行查詢
通常情況下 筆者認為最好只對大型表的連接查詢 大量數據的聚合操作 大型結果集的重復排序等等操作才應用並行查詢的功能 如果在這些操作上執行並行查詢的話 那麼其改善資料庫性能的效果是非常明顯的 相反 如果對於簡單查詢執行並行查詢的話 可能執行並行查詢所需要的額外協調工作會大於其潛在的性能提升 所以 資料庫管理員在確定是否需要執行並行查詢功能的話 需要慎重 筆者的建議是 在資料庫伺服器級別上 最好不要設置並行查詢 即把並行度設置為 或者一個比較小的值 然後對於一些特殊的查詢操作 利用MAXDOP查詢提示來設置最大的可使用進程數 如此的話 可能會更加的合理 如果有時候資料庫管理員不知道是否需要採用並行查詢功能的話 則可以通過資料庫自帶的統計功能進行判斷 為了區別並行查詢計劃到底有沒有從並行查詢中受益 資料庫引擎可以將執行查詢的估計開銷與並行查詢的開銷閥值進行比較 並行計劃只有對需時較長的查詢通常更加有益;因為其性能優勢將抵消初始化 同步和終止並行計劃所需的額外時間開銷
注意點三 資料庫會根據查詢所涉及到的行數來判斷是否要並行查詢
上面談到 最好對大型表的連接查詢 大量數據的聚合操作 大型結果集的重復排序等等操作才應用並行查詢的功能 因為只有如此 並行查詢帶來的收益才會超過其付出的代價 但是 並不是說連接查詢 聚合操作 排序等作業都適合採用並行查詢 當資料庫在考慮並行查詢計劃的時候 查詢優化器還會去確定所涉及到的行數 如果所涉及到的行數台少 則將不會考慮執行並行查詢計劃 而會採用串列方式執行查詢語句 如此的話 可以避免因為啟動 分發 協調的開銷大大超過並行執行作業所帶來的收益 這本來是一個不錯的設計 但是也會給資料庫管理員帶來一定的麻煩 如現在資料庫管理員想要測試並行查詢到底可以在多大程度上影響查詢操作 就有點麻煩 因為其有數據量的限制 如果資料庫管理員需要進行這個測試 還不得不先在資料庫系統中導入足夠多的數據才行 這就限制了資料庫管理員的測試操作 不過話說回來 這個機制仍然是不錯的 因為資料庫管理員不用去考慮 當資料庫規模到多大的時候採用並行查詢
注意點四 同一個操作在不同時候會採用不同的進程數
lishixin/Article/program/SQLServer/201311/22469
2. 請問MySQL 並行了嗎
為給那些只為獲得答案的看眾節省時間。提前下個結論,
mysql目前暫不具備並行運行某一查詢的能力
。相信很多人有一個誤解,似乎MySQL 5.4對某一查詢帶來的性能改進是非常巨大的。事實上,這需要針對具體應用來講,如果追求某個具體查詢的響應時間,5.4 將比5.1或之前的版本差。簡單的來說,5.4提高的是並發量,而不是減少單條語句的執行時間。
初次看到這個話題的人要注意幾個概念,並行和多線程不是同一個概念。「同時進行」的技術分很多類,有
查詢間的並行,
查詢內的並行和操作內的並行
。舉個生活中的例子,
如果你與其他人合租房子的話,早上起來後,多個人可以同時刷牙,洗臉和做飯,大家各忙各的(雖然女房客可能會給廁所加上mutex而其他人只能在原地spin)。單單這套房子來說,它在較短的時間內解決了好幾個人的早上洗漱問題。這就是查詢間並發了。
早上諸多行動中,以刷牙、做飯、吃飯這三個動作為例,我們通常的做法是把微波爐轉上,然後刷牙,刷牙結束後,早飯也弄好了(至少我是這么做的),這樣我們達到了查詢內的並行。
再細化下去,現在加一個動作:整理電行渣腦包,按照上一種方式我們可以按這樣的順序做事情:做飯刷牙 02 02 02—》 02 02 02吃飯 02 02 02 02 — -》02 整理電腦包
如果你有兩只手的話,我們可以用一隻手刷牙,另外一隻手整理電腦包,這樣進一步縮短你的運行時間,這樣你就做到了操作內的並行。
總結起來:第一種情況整體吞吐量很大,但個人的准備時間可能更長了。第二種情況,個人的處理時間減少了。 第三種情況,個人的處理時間進一步減少。
有興趣的人可以在
database system concepts
這本書中了解相關概念。查詢間的並行對於資料庫管理軟體來說是再正常不過的功能,所以下面我們將直接跳過這類「同時進行」。從理論上講,資料庫的多個模塊:IO、SQL解析和SQL執行等都可以達到並行執行的目的。
通過將關系劃分到多個磁碟來減少從磁碟檢索關系所需的時間,從而使得資料庫IO可以並行執行。另外在一個查詢中的多個聯接操作和排序操作也可並行發生。對等值聯接和自然聯接, 可以將兩個輸入關系劃分到多個處理器上, 各處理器在本地計算聯接.
當然以上討論的一切一切都基於CPU是多核的激帶李。
但是目前我個人不支持mysql並行化,這也符合很大一部分mysql開發人員的意見。理由:
就mysql目前的應用來看,使用者更在意mysql資料庫的吞吐量,而不是效應速度(當然了,響應速度也是很重要的)。mysql目前的簡單架構replication可大幅提高資料庫端的吞吐量。明遲
目前現存的其他開源技術亦能滿足並行查詢的需求如hadoop、map rece。
最後,我們還可以利用mysql proxy來達到並行的目的。查詢在mysql proxy中被劃分成多個部分,各個部分可在不同的mysql伺服器上查詢獲得數據,再由mysql proxy合並返回給讀者。
3. 什麼是並行資料庫
並行資料庫系統(Parallel Database System)是新一代高性能的資料庫系統,是在MPP和集群並行計算環境的基礎上建立的資料庫系統。 並行資料庫技術起源於20世紀70年代的資料庫機(Database Machine)研究,,研究的內容主要集中在關系代數操作的並行化和實現關系操作的專用硬體設計上,希望通過硬體實現關系資料庫操作的某些功能,該研究以失敗而告終。80年代後期,並行資料庫技術的研究方向逐步轉到了通用並行機方面,研究的重點是並行資料庫的物理組織、操作演算法、優化和調度策絡。從90年代至今,隨著處理器、存儲、網路等相關基礎技術的發展,並行資料庫技術的研究上升到一個新的水平,研究的重點也轉移到數據操作的時間並行性和空間並行性上。 並行資料庫系統的目標是高性能(High Performance)和高可用性(High Availability),通過多個處理節點並行執行資料庫任務,提高整個資料庫系統的性能和可用性。 性能指標關注的是並行資料庫系統的處理能力,具體的表現可以統一總結為資料庫系統處理事務的響應時間。並行資料庫系統的高性能可以從兩個方面理解,一個是速度提升(SpeedUp),一個是范圍提升(ScaleUp)。速度提升是指,通過並行處理,可以使用更少的時間完成兩樣多的資料庫事務。范圍提升是指,通過並行處理,在相同的處理時間內,可以完成更多的資料庫事務。並行資料庫系統基於多處理節點的物理結構,將資料庫管理技術與並行處理技術有機結合,來實現系統的高性能。 可用性指標關注的是並行資料庫系統的健壯性,也就是當並行處理節點中的一個節點或多個節點部分失效或完全失效時,整個系統對外持續響應的能力。高可用性可以同時在硬體和軟體兩個方面提供保障。在硬體方面,通過冗餘的處理節點、存儲設備、網路鏈路等硬體措施,可以保證當系統中某節點部分或完全失效時,其它的硬體設備可以接手其處理,對外提供持續服務。在軟體方面,通過狀態監控與跟蹤、互相備份、日誌等技術手段,可以保證當前系統中某節點部分或完全失效時,由它所進行的處理或由它所掌控的資源可以無損失或基本無損失地轉移到其它節點,並由其它節點繼續對外提供服務。 為了實現和保證高性能和高可用性,可擴充性也成為並行資料庫系統的一個重要指標。可擴充性是指,並行資料庫系統通過增加處理節點或者硬體資源(處理器、內存等),使其可以平滑地或線性地擴展其整體處理能力的特性。 隨著對並行計算技術研究的深入和SMP、MPP等處理機技術的發展,並行資料庫的研究也進入了一個新的領域,集群已經成為了並行資料庫系統中最受關注的熱點。目前,並行資料庫領域主要還有下列問題需要進一步地研究和解決。 (1)並行體系結構及其應用,這是並行資料庫系統的基礎問題。為了達到並行處理的目的,參與並行處理的各個處理節點之間是否要共享資源、共享哪些資源、需要多大程度的共享,這些就需要研究並行處理的體系結構及有關實現技術。 (2)並行資料庫的物理設計,主要是在並行處理的環境下,數據分布的演算法的研究、資料庫設計工具與管理工具的研究。 (3)處理節點間通訊機制的研究。為了實現並行資料庫的高性能,並行處理節點要最大程度地協同處理資料庫事務,因此,節點間必不可少地存在通訊問題,如何支持大量節點之間消息和數據的高效通訊,也成為了並行資料庫系統中一個重要的研究課題。 (4)並行操作演算法,為提高並行處理的效率,需要在數據分布演算法研究的基礎上,深入研究聯接、聚集、統計、排序等具體的數據操作在多節點上的並行操作演算法。 (5)並行操作的優化和同步,為獲得高性能,如何將一個資料庫處理事務合理地分解成相對獨立的並行操作步驟、如何將這些步驟以最優的方式在多個處理節點間進行分配、如何在多個處理節點的同一個步驟和不同步驟之間進行消息和數據的同步,這些問題都值得深入研究。 (6)並行資料庫中數據的載入和再組織技術,為了保證高性能和高可用性,並行資料庫系統中的處理節點可能需要進行擴充(或者調整),這就需要考慮如何對原有數據進行卸載、載入,以及如何合理地在各個節點是重新組織數據。
4. GBase 8t是否支持並行操作所需的技術可否簡要說明
支持。
多CPU並行:GBase 8t動態伺服器的核心技術是基於GBase 8t的動態可伸縮結構(DSA),該純兆世技術使GBase8T成為強大的多線索資料庫伺服器,利用該技術使得資料庫系統能猜虛充分發揮對稱多處理器或單處理器結構伺服器的能力,並在資料庫可伸縮性、可管理性和性能等方面有很大突破。GBase 8t可以配置CPU VP的數量,系統需要有足夠多的CPU VP來加速線索的執行從而保證系統中其它進程能佔用足夠的CPU時間,GBase 8t同時支持處理器綁定(processor affinity),處理器綁定是特定的進程只能在特定的CPU上執行。特定的CPU仍然能為其它進程服務,但特定的進程只能在該CPU上執行,如果平台支持,INFORMIX動態伺服器可以將CPU VP(oninit)綁定到指定的處理器上。處理器從0開始連續編號。在某些SMP平台上,由一個CPU專門處理系統中斷。如果配置的CPU VP數量小於物理處理器數量,則應避免將CPU VP綁定到處理中斷的CPU上。
多伺服器並行:GBase 8t支持高可用集群方案,GBase 8t的HDR、SDS、RSS等技術實現了數據的高可用災備技術,而該技術的處理需要多伺服器並行計算技術。
事務處理的完整性控制技術:為了保證事務的完整性,GBase 8t資料庫通過邏輯日誌 (logical log) 來記錄所有的事務操作及其處理的數據。邏輯日誌的作用之一在於對數據所發生的變化進行記錄以滿足可能的回滾需要。GBase 8t允許用戶在一個事務中,從多個數據伺服器查詢或更新一個或者多個資料庫。數據伺服器可以在同一個主機上,或是在同一網路的不同主做肢機上。兩階段提交協議確保了從多個數據伺服器提交或回滾事務的一致性。GBase 8t對異構分布式資料庫的支持是通過X/OPEN、XA實現的。
支持並行查詢/DML、備份/恢復、導入/導出、索引創建:GBase 8t的OLTP引擎通過DSA多線程和PDQ(Parallel database query)技術可實現並行資料庫並行查詢/DML/索引創建;DML利用GBase 8t不同級別的鎖管理和隔離機制,有效保障了資料庫的DML操作的並發性;備份/恢復利用GBase 8t的onbar備份恢復模塊支持並行備份與恢復;導入/導出利用GBase 8t的HPL(High Performance Loader)工具可通過並發方式完成資料庫的導入導出操作。
5. 如何打開資料庫的並行
直接用hint即可。例如:
select /*+parallel(o2)*/* from t_objects o
其滲散笑中o為要開啟並行的掘襲表的別名,2為並行度。
不過不一定會提升效率,一般查詢中使用parallel的情景如下:
需要大量的 表叢含的掃描、連接或者分區索引掃描。
6. Oracle資料庫並行查詢出錯的解決方法
Oracle的並行查詢是使用多個操作系統級別的Server
Process來同時完成一個SQL查詢,本文講解Oracle資料庫並行查詢出錯的解決方法如下:
1、錯誤描述
ORA-12801:
並行查詢伺服器P007中發出錯誤信號
ORA-01722:無效數字
12801.00000
-"error
signaled
in
parallel
query
server
%s"
*Cause:
A
parallel
query
server
reached
an
exception
condition.
*Action:
Check
the
following
error
message
for
the
cause,and
consult
your
error
manual
for
the
appropriate
action.
*Comment:
This
error
can
be
turned
off
with
event
10397,in
which
case
the
server's
actual
error
is
signaled
instead.
2、錯誤原因
在添加並行時,出現錯誤
3、解決辦法
保證添加的並行和查詢中的保持一致,並且保證查詢參數跟資料庫表中的數據類型一致