自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

并行查詢讓SQL Server加速運(yùn)行

開發(fā) 數(shù)據(jù)庫運(yùn)維
在通常情況下,SQL Server數(shù)據(jù)庫在執(zhí)行查詢作業(yè)的時候,都是單線程操作的。不夠數(shù)據(jù)庫為了應(yīng)對比較大流量的查詢作業(yè),故SQL Server提供了并行查詢的功能

并行查詢其優(yōu)勢就是可以通過多個線程來處理查詢作業(yè),從而提高查詢的效率。SQL Server數(shù)據(jù)庫為具有多個CPU的數(shù)據(jù)庫服務(wù)器提供并行查詢的功能,以優(yōu)化查詢作業(yè)的性能。也就是說,只要數(shù)據(jù)庫服務(wù)器有多個CPU,則數(shù)據(jù)庫系統(tǒng)就可以使用多個操作系統(tǒng)進(jìn)程并行執(zhí)行查詢操作,來加速完成查詢作業(yè)。

一、并行查詢?nèi)阶摺?/STRONG>

并行查詢作業(yè)在數(shù)據(jù)庫中,主要經(jīng)過三個步驟。

首先,數(shù)據(jù)庫會判斷是否需要進(jìn)行并行查詢。在數(shù)據(jù)庫中有一個查詢優(yōu)化器,會對SQL語句進(jìn)行優(yōu)化,然后數(shù)據(jù)庫才會去執(zhí)行查詢語句。而這個查詢器在對SQL語句進(jìn)行查詢優(yōu)化時,其中一個動作就是判斷是否需要對SQL語句進(jìn)行查詢優(yōu)化。也就是說,并不是所有的SQL查詢語句都可以從并行查詢中獲取收益。如果查詢優(yōu)化器認(rèn)為查詢語句可以從并行查詢中獲取收益的話,則就會將交換運(yùn)算符插入到查詢執(zhí)行計劃中,為并行查詢做準(zhǔn)備。故哪些語句需要采用并行查詢,哪些不需要,這不用數(shù)據(jù)庫管理員關(guān)心。數(shù)據(jù)庫查詢優(yōu)化器會幫管理員作出這個決定。數(shù)據(jù)庫管理員需要清楚的是,在哪些情況下,數(shù)據(jù)庫SQL優(yōu)化器會認(rèn)為不宜采用并行查詢。通常情況下,只要滿足以下條件的任何一個,則就不會執(zhí)行并行查詢。一是對于特定的查詢,查詢優(yōu)化器認(rèn)為串行查詢執(zhí)行計劃要快于任何可能的并行執(zhí)行計劃;二是查詢的串行執(zhí)行成本并不高,不需要進(jìn)行并行查詢;三是查詢中包含無法并行運(yùn)行的標(biāo)量運(yùn)算符或者關(guān)系運(yùn)算符。若從數(shù)據(jù)庫管理員的角度講,第三個條件對我們具有***的影響。當(dāng)數(shù)據(jù)庫預(yù)計未來可能利用并行查詢來提高數(shù)據(jù)庫性能時,則在數(shù)據(jù)庫設(shè)計時,就需要注意避免使用那些無法在并行查詢功能中使用的運(yùn)算符。因為某些關(guān)系運(yùn)算符或者邏輯運(yùn)算符可能會要求查詢計劃一定要在串行模式中進(jìn)行,或者部分需要在串行模式下進(jìn)行。如此的話,查詢優(yōu)化器就不會利用并行查詢功能來提高查詢語句的性能。這是數(shù)據(jù)庫管理員在數(shù)據(jù)庫設(shè)計時必須要考慮到的一個細(xì)節(jié)問題。

其次,確定并行的進(jìn)程數(shù)。當(dāng)查詢優(yōu)化器在查詢語句中插入交叉運(yùn)算符之后,數(shù)據(jù)庫就會執(zhí)行并行查詢。并行查詢在執(zhí)行計劃時可以使用多個線程。此時,就又遇到了一個問題,數(shù)據(jù)庫會把這個查詢作業(yè)分成幾個進(jìn)程操作呢?此時,數(shù)據(jù)庫管理員就需要知道上什么叫做并行度。其實。在處理并行查詢的時候,數(shù)據(jù)需要知道***可使用的進(jìn)程與實際使用的進(jìn)程。而***可使用的進(jìn)程就叫做并行度。這個并行度的值是在服務(wù)器級別中進(jìn)行設(shè)置,也可以通過系統(tǒng)存儲過程來進(jìn)行修改。但是,***可使用進(jìn)程數(shù)不一定等于實際是用進(jìn)程數(shù)。實際是用進(jìn)程數(shù)是數(shù)據(jù)庫在查詢計劃執(zhí)行時初始化的時候確定的。也就是說,這不用數(shù)據(jù)庫管理員去額外的設(shè)定。數(shù)據(jù)庫系統(tǒng)會自動根據(jù)計劃的復(fù)雜程度來確定合理的進(jìn)程數(shù)目。當(dāng)然其實際采用的進(jìn)程數(shù)不能夠超過并行度,即***可以使用的進(jìn)程數(shù)。

***執(zhí)行查詢。當(dāng)以上內(nèi)容確定好之后,數(shù)據(jù)庫就會執(zhí)行具體的查詢語句。在這一步中,需要注意一個問題。數(shù)據(jù)庫管理員還可以在查詢語句中指定MAXDOP查詢提示來修改這個進(jìn)度值。也就是說,如果某個查詢作業(yè)數(shù)據(jù)庫管理員認(rèn)為可能會耗時比較久,就可以為這個查詢作業(yè)設(shè)置比較大的進(jìn)度值。當(dāng)利用MAXDOP查詢提示設(shè)置這個并行進(jìn)度值之后,它會覆蓋預(yù)先設(shè)置的默認(rèn)值。從而實現(xiàn)針對單個查詢語句設(shè)置額外的進(jìn)度值,以提高某些特殊查詢作業(yè)的性能。

二、并行查詢中需要注意的內(nèi)容。

注意點一:需要注意硬件方面的限制。

并行查詢是數(shù)據(jù)庫提高查詢性能的一個有力舉措。不過其往往受到比較大的約束。如上面提高的一些基于成本考慮之外,還有一些硬性的限制。如通常情況下,只有在數(shù)據(jù)庫服務(wù)器有多個微處理器(CPU )的情況下數(shù)據(jù)庫才會考慮執(zhí)行并行查詢。也就是受,只有具有多個CPU的計算機(jī)才能夠使用并行查詢。這是一個硬性的限制條件。另外在查詢計劃執(zhí)行過程中,數(shù)據(jù)庫還會判斷當(dāng)時是否有足夠多的線程可以使用。每個查詢操作都要求一定的線程數(shù)才能夠執(zhí)行;而且執(zhí)行并行計劃比執(zhí)行串行計劃需要更多的線程,所需要的線程數(shù)也會隨著并行度的提高而提高。如果在并行計劃執(zhí)行的時候,當(dāng)時數(shù)據(jù)庫服務(wù)器沒有足夠的線程讓并行計劃使用的話,數(shù)據(jù)庫引擎就會自動減少并行度,甚至?xí)艞壊⑿胁樵兌臑榇杏媱?。所以說,數(shù)據(jù)庫是否能夠執(zhí)行并行查詢,要受到其硬件的限制。為此,如果企業(yè)真的需要通過并行查詢來提高數(shù)據(jù)庫性能的話,則管理員就需要根據(jù)情況來調(diào)整硬件配置。
#p#

注意點二:不建議對所有查詢都使用并行查詢。

通常情況下,筆者認(rèn)為***只對大型表的連接查詢、大量數(shù)據(jù)的聚合操作、大型結(jié)果集的重復(fù)排序等等操作才應(yīng)用并行查詢的功能。如果在這些操作上執(zhí)行并行查詢的話,那么其改善數(shù)據(jù)庫性能的效果是非常明顯的。相反,如果對于簡單查詢執(zhí)行并行查詢的話,可能執(zhí)行并行查詢所需要的額外協(xié)調(diào)工作會大于其潛在的性能提升。所以,數(shù)據(jù)庫管理員在確定是否需要執(zhí)行并行查詢功能的話,需要慎重。筆者的建議是,在數(shù)據(jù)庫服務(wù)器級別上,***不要設(shè)置并行查詢。即把并行度設(shè)置為1或者一個比較小的值。然后對于一些特殊的查詢操作,利用MAXDOP查詢提示來設(shè)置***的可使用進(jìn)程數(shù)。如此的話,可能會更加的合理。如果有時候數(shù)據(jù)庫管理員不知道是否需要采用并行查詢功能的話,則可以通過數(shù)據(jù)庫自帶的統(tǒng)計功能進(jìn)行判斷。為了區(qū)別并行查詢計劃到底有沒有從并行查詢中受益,數(shù)據(jù)庫引擎可以將執(zhí)行查詢的估計開銷與并行查詢的開銷閥值進(jìn)行比較。并行計劃只有對需時較長的查詢通常更加有益;因為其性能優(yōu)勢將抵消初始化、同步和終止并行計劃所需的額外時間開銷。

注意點三:數(shù)據(jù)庫會根據(jù)查詢所涉及到的行數(shù)來判斷是否要并行查詢。

上面談到,***對大型表的連接查詢、大量數(shù)據(jù)的聚合操作、大型結(jié)果集的重復(fù)排序等等操作才應(yīng)用并行查詢的功能。因為只有如此,并行查詢帶來的收益才會超過其付出的代價。但是,并不是說連接查詢、聚合操作、排序等作業(yè)都適合采用并行查詢。當(dāng)數(shù)據(jù)庫在考慮并行查詢計劃的時候,查詢優(yōu)化器還會去確定所涉及到的行數(shù)。如果所涉及到的行數(shù)臺少,則將不會考慮執(zhí)行并行查詢計劃。而會采用串行方式執(zhí)行查詢語句。如此的話,可以避免因為啟動、分發(fā)、協(xié)調(diào)的開銷大大超過并行執(zhí)行作業(yè)所帶來的收益。這本來是一個不錯的設(shè)計,但是也會給數(shù)據(jù)庫管理員帶來一定的麻煩。如現(xiàn)在數(shù)據(jù)庫管理員想要測試并行查詢到底可以在多大程度上影響查詢操作,就有點麻煩。因為其有數(shù)據(jù)量的限制。如果數(shù)據(jù)庫管理員需要進(jìn)行這個測試,還不得不先在數(shù)據(jù)庫系統(tǒng)中導(dǎo)入足夠多的數(shù)據(jù)才行。這就限制了數(shù)據(jù)庫管理員的測試操作。不過話說回來,這個機(jī)制仍然是不錯的。因為數(shù)據(jù)庫管理員不用去考慮,當(dāng)數(shù)據(jù)庫規(guī)模到多大的時候采用并行查詢。

注意點四:同一個操作在不同時候會采用不同的進(jìn)程數(shù)。

上面說到過,并行查詢到第采用多少進(jìn)程數(shù)除了跟操作的復(fù)雜程度相關(guān)外,還直接跟當(dāng)時的服務(wù)器狀態(tài)相關(guān),如是否有足夠的進(jìn)程數(shù)等等。所以,在不同的時間,即使是相同的數(shù)據(jù)、相同的操作,其并行查詢所用的進(jìn)程數(shù)也可能不同。其所需要的時間也就不同了。因為只有在并行查詢真正進(jìn)行的時候,數(shù)據(jù)庫引擎才去收集當(dāng)前系統(tǒng)的工作負(fù)荷,如進(jìn)程數(shù),和其他對一些配置信息,然后數(shù)據(jù)庫才確定***的并行進(jìn)程數(shù)。從查詢開始,到這個查詢作業(yè)結(jié)束,將一直采用這個進(jìn)程數(shù)。如果下次要繼續(xù)查詢,則數(shù)據(jù)庫引擎會繼續(xù)收集這些信息。此時,如果系統(tǒng)工作負(fù)荷有所改善,在數(shù)據(jù)庫可能會采用更多的進(jìn)程數(shù)來執(zhí)行這個查詢。從而查詢作業(yè)的性能會更加的高。相反,如果此時系統(tǒng)的負(fù)荷比前一次查詢要重了,則數(shù)據(jù)庫就可能會采用比較少的進(jìn)程來處理這個作業(yè)。此時,第二次查詢的速度反而更慢了。所以,如果在數(shù)據(jù)庫服務(wù)器中同時部署了其他應(yīng)用,則其他應(yīng)用所占用系統(tǒng)資源的多少也會對并行執(zhí)行產(chǎn)生難以估測的影響。

 

【編輯推薦】

  1. IBM推出全新Informix數(shù)據(jù)庫管理工具
  2. 減少數(shù)據(jù)庫管理開銷方法簡介
  3. Navicat Oracle數(shù)據(jù)庫管理工具***公開發(fā)布
責(zé)任編輯:book05 來源: IT專家網(wǎng)
相關(guān)推薦

2009-03-24 11:11:19

加速并行查詢SQL

2020-09-02 14:00:05

Python代碼腳本

2011-05-25 13:10:40

SQL ServerOracle

2011-04-15 11:43:24

SQL Server

2010-10-21 10:28:13

SQL Server查

2009-07-06 18:18:41

SQL Server全

2010-10-21 12:16:11

SQL Server查

2010-11-09 10:00:37

SQL Server簡

2010-10-21 14:27:35

SQL Server時

2018-12-26 16:30:09

SQL Server內(nèi)部運(yùn)行機(jī)制數(shù)據(jù)庫

2025-01-20 15:06:42

2021-08-17 10:39:54

SQL Server數(shù)據(jù)庫優(yōu)化

2010-07-15 09:14:32

SQL server組

2010-11-09 11:54:50

sql server查

2010-10-21 14:54:32

查詢SQL Serve

2010-11-11 16:59:59

SQL Server視

2010-07-01 14:23:25

SQL Server查

2010-11-09 09:43:20

SQL Server查

2009-03-17 13:25:13

查詢遷移SQL Server

2010-11-09 12:20:53

SQL Server查
點贊
收藏

51CTO技術(shù)棧公眾號