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

SQL server阻塞的情形與定義

數(shù)據(jù)庫(kù) SQL Server
我們今天主要是向大家講述的是SQL server阻塞的正確講解,其中主要包含的內(nèi)容有,常見(jiàn)SQL server阻塞的情形以及對(duì)SQL server阻塞避免的方法。

以下的文章主要向大家講述的是對(duì)SQL server阻塞的正確講解,同時(shí)本文也有對(duì)SQL server阻塞的定義,在實(shí)際操作中常見(jiàn)SQL server阻塞的情形以及對(duì)SQL server阻塞避免的方法的描述,以下就是對(duì)其相關(guān)內(nèi)容的描述。

 SQL server阻塞定義

當(dāng)來(lái)自應(yīng)用程序的***個(gè)連接控制鎖而第二個(gè)連接需要相沖突的鎖類型時(shí),將發(fā)生阻塞。其結(jié)果是強(qiáng)制第二個(gè)連接等待,而在***個(gè)連接上阻塞。不管是來(lái)自同一應(yīng)用程序還是另外一臺(tái)客戶機(jī)上單獨(dú)的應(yīng)用程序,一個(gè)連接都可以阻塞另一個(gè)連接。

說(shuō)明:一些需要鎖保護(hù)的操作可能不明顯,例如系統(tǒng)目錄表和索引上的鎖。

大多數(shù)阻塞問(wèn)題的發(fā)生是因?yàn)橐粋€(gè)進(jìn)程控制鎖的時(shí)間過(guò)長(zhǎng),導(dǎo)致SQL server阻塞的進(jìn)程鏈都在其它進(jìn)程上等待鎖。

常見(jiàn)的阻塞情形

1 .提交執(zhí)行時(shí)間長(zhǎng)的查詢。

長(zhǎng)時(shí)間運(yùn)行的查詢會(huì)SQL server阻塞其它查詢。例如,影響很多行的 DELETE 或 UPDATE

操作能獲取很多鎖,這些鎖不論是否升級(jí)到表鎖都阻塞其它查詢。因此,一般不要將長(zhǎng)時(shí)間運(yùn)行的決策支持查詢和聯(lián)機(jī)事務(wù)處理 (OLTP)

查詢混在一起。解決方案是想辦法優(yōu)化查詢,如更改索引、將大的復(fù)雜查詢分成簡(jiǎn)單的查詢或在空閑時(shí)間或單獨(dú)的計(jì)算機(jī)上運(yùn)行查詢。

2 .查詢不適當(dāng)?shù)厥褂糜螛?biāo)。游標(biāo)可能是在結(jié)果集中瀏覽的便利方法,但使用游標(biāo)可能比使用面向集合的查詢慢。

3 .取消沒(méi)有提交或回滾的查詢。

如果應(yīng)用程序取消查詢(如使用開(kāi)放式數(shù)據(jù)庫(kù)連接 (ODBC) sqlcancel 函數(shù))但沒(méi)有同時(shí)發(fā)出所需數(shù)目的 ROLLBACK 和 COMMIT 語(yǔ)句,則會(huì)發(fā)生這種情況。取消查詢并不自動(dòng)回滾或提交事務(wù)。取消查詢后,所有在事務(wù)內(nèi)獲取的鎖都將保留。應(yīng)用程序必須提交或回滾已取消的事務(wù),從而正確地管理事務(wù)嵌套級(jí)。

4 .應(yīng)用程序沒(méi)處理完所有結(jié)果。

將查詢發(fā)送到服務(wù)器后,所有應(yīng)用程序必須立即完成提取所有結(jié)果行。如果應(yīng)用程序沒(méi)有提取所有結(jié)果行,鎖可能會(huì)留在表上而SQL server阻塞其他用戶。如果使用的應(yīng)用程序?qū)ransact-SQL 語(yǔ)句透明地提交給服務(wù)器,則該應(yīng)用程序必須提取所有結(jié)果行。如果應(yīng)用程序沒(méi)這樣做(如果無(wú)法配置它執(zhí)行此操作),則可能無(wú)法解決阻塞問(wèn)題。為避免此問(wèn)題,可以將這些應(yīng)用程序限制在報(bào)表或決策支持?jǐn)?shù)據(jù)庫(kù)上。

5 .分布式客戶端/服務(wù)器死鎖。

與常規(guī)死鎖不同,分布式死鎖無(wú)法由 Microsoft SQL Server? 2000 自動(dòng)檢測(cè)到。如果應(yīng)用程序打開(kāi)多個(gè)與 SQL Server 的連接并異步提交查詢,則可能會(huì)發(fā)生分布式客戶端/服務(wù)器死鎖。

例如,一個(gè)客戶端應(yīng)用程序線程有兩個(gè)開(kāi)放式連接。該線程異步啟動(dòng)事務(wù)并在***個(gè)連接上發(fā)出查詢。應(yīng)用程序隨后啟動(dòng)其它事務(wù),在另一個(gè)連接上發(fā)出查詢并等待結(jié)果。當(dāng) SQL Server 返回其中一個(gè)連接的結(jié)果時(shí),應(yīng)用程序開(kāi)始處理這些結(jié)果。

應(yīng)用程序就這樣處理結(jié)果,直到生成結(jié)果的查詢被另一個(gè)連接上執(zhí)行的查詢阻塞而導(dǎo)致再?zèng)]有可用的結(jié)果為止。此時(shí)***個(gè)連接阻塞,無(wú)限期等待處理更多的結(jié)果。第二個(gè)連接沒(méi)有在鎖上SQL server阻塞,但仍試圖將結(jié)果返回給應(yīng)用程序。然而,由于應(yīng)用程序阻塞而在***個(gè)連接上等待結(jié)果,第二個(gè)連接的結(jié)果將得不到處理。

避免SQL server阻塞方法

1 .對(duì)每個(gè)查詢使用查詢超時(shí)。

2 .對(duì)每個(gè)查詢使用鎖定超時(shí)。有關(guān)更多信息,請(qǐng)參見(jiàn)自定義鎖超時(shí)。

3 .使用綁定連接。有關(guān)更多信息,請(qǐng)參見(jiàn)使用綁定連接。

4 .SQL Server 本質(zhì)上是受客戶端應(yīng)用程序操縱的傀儡??蛻舳藨?yīng)用程序?qū)Ψ?wù)器上獲取的鎖幾乎有完全的控制(并對(duì)鎖負(fù)責(zé))。雖然 SQL Server

鎖管理器自動(dòng)使用鎖保護(hù)事務(wù),但這受客戶端應(yīng)用程序發(fā)出的查詢類型和對(duì)結(jié)果的處理方式的直接鼓動(dòng)。因此,大多數(shù)阻塞問(wèn)題的解決方案都涉及檢查客戶端應(yīng)用程序。

5 .阻塞問(wèn)題常要求檢查應(yīng)用程序提交的 SQL 語(yǔ)句本身,以及檢查與連接管理、所有結(jié)果行的處理等有關(guān)的應(yīng)用程序行為本身。如果開(kāi)發(fā)工具不允許顯式控制連接管理、查詢超時(shí)、結(jié)果處理等,阻塞問(wèn)題可能得不到解決。

設(shè)計(jì)應(yīng)用程序以避免SQL server阻塞的準(zhǔn)則

1. 不要使用或設(shè)計(jì)使用戶得以填寫編輯框的應(yīng)用程序,編輯框會(huì)生成長(zhǎng)時(shí)間運(yùn)行的查詢。例如,不要使用或設(shè)計(jì)提示用戶輸入的應(yīng)用程序,允許某些字段保留空白或允許輸入通配符。這可能導(dǎo)致應(yīng)用程序提交運(yùn)行時(shí)間過(guò)長(zhǎng)的查詢,從而導(dǎo)致阻塞問(wèn)題。

2 .不要使用或設(shè)計(jì)使用戶得以在事務(wù)內(nèi)輸入內(nèi)容的應(yīng)用程序。

3 .允許取消查詢。

4 .使用查詢或鎖定超時(shí),防止失控查詢和避免分布式死鎖。

5 .立即完成提取所有結(jié)果行。

6 .使事務(wù)盡可能簡(jiǎn)短。

7 .顯式控制連接管理。

8 .在所預(yù)計(jì)的并發(fā)用戶全負(fù)荷下對(duì)應(yīng)用程序進(jìn)行應(yīng)力測(cè)試。

【編輯推薦】

  1. SQL Server索引選擇的引用與建議
  2. SQL Server評(píng)價(jià)索引之有效性
  3. 關(guān)于SQL Server索引密度的知識(shí)
  4. 對(duì)SQL Server聚集索引的指示描述
  5. SQL Server視圖索引與索引視圖指南

 

 

責(zé)任編輯:佚名 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2010-07-20 11:26:08

SQL Server阻

2010-07-20 11:31:25

SQL Server避

2011-02-18 17:31:18

SQL Server

2010-07-06 09:44:51

SQL Server數(shù)

2011-03-11 13:26:32

SQL ServerBlocking阻塞

2010-07-09 10:08:53

SQL Server函

2010-11-11 16:59:59

SQL Server視

2010-07-06 09:49:56

SQL Server

2010-07-19 14:24:15

SQL Server盤

2010-07-23 10:26:05

SQL Server

2010-07-07 13:58:25

SQL Server死

2010-08-13 08:56:00

SQL Server鎖

2010-07-19 17:57:22

SQL Server鎖

2009-04-27 15:02:42

SQL Server 數(shù)據(jù)庫(kù)引擎升級(jí)

2010-07-20 08:48:14

SQL Server

2010-11-12 14:49:28

SQL Server外

2010-07-22 16:02:29

2011-04-18 13:02:08

SQL Server SQL Server

2010-07-20 11:35:41

避免SQL Serve

2010-10-21 14:06:22

定義SQL Serve
點(diǎn)贊
收藏

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