国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL server阻塞(來自微軟技術(shù)支持人員)

2024-08-31 00:48:03
字體:
供稿:網(wǎng)友


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

說明  一些需要鎖保護(hù)的操作可能不明顯,例如系統(tǒng)目錄表和索引上的鎖。
大多數(shù)阻塞問題的發(fā)生是因為一個進(jìn)程控制鎖的時間過長,導(dǎo)致阻塞的進(jìn)程鏈都在其它進(jìn)程上等待鎖。

常見的阻塞情形包括
===============
 
1 .提交執(zhí)行時間長的查詢。
長時間運行的查詢會阻塞其它查詢。例如,影響很多行的 delete 或 update
操作能獲取很多鎖,這些鎖不論是否升級到表鎖都阻塞其它查詢。因此,一般不要將長時間運行的決策支持查詢和聯(lián)機(jī)事務(wù)處理 (oltp)

查詢混在一起。解決方案是想辦法優(yōu)化查詢,如更改索引、將大的復(fù)雜查詢分成簡單的查詢或在空閑時間或單獨的計算機(jī)上運行查詢。
 
2 .查詢不適當(dāng)?shù)厥褂糜螛?biāo)。游標(biāo)可能是在結(jié)果集中瀏覽的便利方法,但使用游標(biāo)可能比使用面向集合的查詢慢。
 
3 .取消沒有提交或回滾的查詢。
如果應(yīng)用程序取消查詢(如使用開放式數(shù)據(jù)庫連接 (odbc) sqlcancel 函數(shù))但沒有同時發(fā)出所需數(shù)目的 rollback 和 commit
語句,則會發(fā)生這種情況。取消查詢并不自動回滾或提交事務(wù)。取消查詢后,所有在事務(wù)內(nèi)獲取的鎖都將保留。應(yīng)用程序必須提交或回滾已取消的事務(wù),從而正確地管理事務(wù)嵌套級。


4 .應(yīng)用程序沒處理完所有結(jié)果。
將查詢發(fā)送到服務(wù)器后,所有應(yīng)用程序必須立即完成提取所有結(jié)果行。如果應(yīng)用程序沒有提取所有結(jié)果行,鎖可能會留在表上而阻塞其他用戶。如果使用的應(yīng)用程序?qū)?

transact-sql 語句透明地提交給服務(wù)器,則該應(yīng)用程序必須提取所有結(jié)果行。如果應(yīng)用程序沒這樣做(如果無法配置它執(zhí)行此操作),則可能無法解決阻塞問題。為避免此問題,可以將這些應(yīng)用程序限制在報表或決策支持?jǐn)?shù)據(jù)庫上。


5 .分布式客戶端/服務(wù)器死鎖。
與常規(guī)死鎖不同,分布式死鎖無法由 microsoft sql server? 2000 自動檢測到。如果應(yīng)用程序打開多個與 sql server
的連接并異步提交查詢,則可能會發(fā)生分布式客戶端/服務(wù)器死鎖。
 
例如,一個客戶端應(yīng)用程序線程有兩個開放式連接。該線程異步啟動事務(wù)并在第一個連接上發(fā)出查詢。應(yīng)用程序隨后啟動其它事務(wù),在另一個連接上發(fā)出查詢并等待結(jié)果。當(dāng) sql server 返回其中一個連接的結(jié)果時,應(yīng)用程序開始處理這些結(jié)果。應(yīng)用程序就這樣處理結(jié)果,直到生成結(jié)果的查詢被另一個連接上執(zhí)行的查詢阻塞而導(dǎo)致再沒有可用的結(jié)果為止。此時第一個連接阻塞,無限期等待處理更多的結(jié)果。第二個連接沒有在鎖上阻塞,但仍試圖將結(jié)果返回給應(yīng)用程序。然而,由于應(yīng)用程序阻塞而在第一個連接上等待結(jié)果,第二個連接的結(jié)果將得不到處理。



避免阻塞方法
===============
1 .對每個查詢使用查詢超時。

2 .對每個查詢使用鎖定超時。有關(guān)更多信息,請參見自定義鎖超時。
 
3 .使用綁定連接。有關(guān)更多信息,請參見使用綁定連接。

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

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


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



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


2 .不要使用或設(shè)計使用戶得以在事務(wù)內(nèi)輸入內(nèi)容的應(yīng)用程序。
 
3 .允許取消查詢。
 
4 .使用查詢或鎖定超時,防止失控查詢和避免分布式死鎖。
 
5 .立即完成提取所有結(jié)果行。
 
6 .使事務(wù)盡可能簡短。
 
7 .顯式控制連接管理。
 
8 .在所預(yù)計的并發(fā)用戶全負(fù)荷下對應(yīng)用程序進(jìn)行應(yīng)力測試。

以下是一些相關(guān)的技術(shù)文檔。
understanding and resolving sql server 7.0 or 2000 blocking problems
<http://support.microsoft.com/default.aspx?scid=kb;en-us;224453>

how to: troubleshoot application performance with sql server
<http://support.microsoft.com/default.aspx?scid=kb;en-us;224587>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 锡林浩特市| 卓尼县| 双牌县| 武义县| 高碑店市| 庆元县| 平和县| 股票| 梓潼县| 玉屏| 铜梁县| 洪泽县| 余庆县| 西充县| 交口县| 江华| 偃师市| 靖远县| 商水县| 财经| 青龙| 南木林县| 广平县| 中江县| 巴彦淖尔市| 昆山市| 肃宁县| 林甸县| 石首市| 昌乐县| 隆化县| 郑州市| 馆陶县| 城市| 崇左市| 梁河县| 双峰县| 惠来县| 景洪市| 灵璧县| 广平县|