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

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

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

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

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

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

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

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

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

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

注意點(diǎn)一:需要注意硬件方面的限制。

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

  注意點(diǎn)二:不建議對(duì)所有查詢都使用并行查詢。

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

注意點(diǎn)三:數(shù)據(jù)庫(kù)會(huì)根據(jù)查詢所涉及到的行數(shù)來(lái)判斷是否要并行查詢。

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

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

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

【編輯推薦】

  1. 解決MySQL 5數(shù)據(jù)庫(kù)連接超時(shí)問(wèn)題
  2. SQL Server數(shù)據(jù)庫(kù)內(nèi)容替換方法
  3. 有效使用SQL Server的自動(dòng)管理功能
責(zé)任編輯:彭凡 來(lái)源: cnblogs
相關(guān)推薦

2009-03-13 10:54:18

SQL Server并行查詢數(shù)據(jù)庫(kù)管理

2020-09-02 14:00:05

Python代碼腳本

2011-05-25 13:10:40

SQL ServerOracle

2011-04-15 11:43:24

SQL Server

2024-02-23 09:36:57

C#工具并行處理

2010-10-21 10:28:13

SQL Server查

2011-08-10 10:06:54

存儲(chǔ)過(guò)程SQL Server IP地址歸屬地查詢

2017-01-19 09:36:39

Ftype病毒刪除

2009-07-06 18:18:41

SQL Server全

2010-10-21 12:16:11

SQL Server查

2010-11-09 10:00:37

SQL Server簡(jiǎn)

2010-10-21 14:27:35

SQL Server時(shí)

2021-08-17 10:39:54

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

2018-12-26 16:30:09

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

2020-09-28 11:09:54

SQLDSL

2025-01-20 15:06:42

2009-04-13 16:35:25

TSQL查詢SQL Server

2010-07-15 09:14:32

SQL server組

2010-11-09 11:54:50

sql server查

2010-10-21 14:54:32

查詢SQL Serve
點(diǎn)贊
收藏

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