工作或學習中經常遇到的五種阻塞情況

2021-04-15 10:41:12 字數 1121 閱讀 7705

工作或學習中經常遇到的五種阻塞情況

1 .提交執行時間長的查詢。

長時間執行的查詢會阻塞其它查詢。例如,影響很多行的 delete 或 update

操作能獲取很多鎖,這些鎖不論是否公升級到表鎖都阻塞其它查詢。因此,一般不要將長時間執行的決策支援查詢和聯機事務處理 (oltp)  

查詢混在一起。解決方案是想辦法優化查詢,如更改索引、將大的複雜查詢分成簡單的查詢或在空閒時間或單獨的計算機上執行查詢。  

2 .查詢不適當地使用游標。

游標可能是在結果集中瀏覽的便利方法,但使用游標可能比使用面向集合的查詢慢。  

3 .取消沒有提交或回滾的查詢。

如果應用程式取消查詢(如使用開放式資料庫連線 (odbc) sqlcancel 函式)但沒有同時發出所需數目的 rollback 和 commit 語句,則會發生這種情況。取消查詢並不自動回滾或提交事務。取消查詢後,所有在事務內獲取的鎖都將保留。應用程式必須提交或回滾已取消的事務,從而正確地管理事務巢狀級。  

4 .應用程式沒處理完所有結果。

將查詢傳送到伺服器後,所有應用程式必須立即完成提取所有結果行。如果應用程式沒有提取所有結果行,鎖可能會留在表上而阻塞其他使用者。如果使用的應用程式將transact-sql 語句透明地提交給伺服器,則該應用程式必須提取所有結果行。如果應用程式沒這樣做(如果無法配置它執行此操作),則可能無法解決阻塞問題。為避免此問題,可以將這些應用程式限制在報表或決策支援資料庫上。  

5 .分布式客戶端/伺服器死鎖。

與常規死鎖不同,分布式死鎖無法由 microsoft sql server? 2000 自動檢測到。如果應用程式開啟多個與 sql server 的連線並非同步提交查詢,則可能會發生分布式客戶端/伺服器死鎖。  

例如,乙個客戶端應用程式執行緒有兩個開放式連線。該執行緒非同步啟動事務並在第乙個連線上發出查詢。應用程式隨後啟動其它事務,在另乙個連線上發出查詢並等待結果。當 sql server 返回其中乙個連線的結果時,應用程式開始處理這些結果。應用程式就這樣處理結果,直到生成結果的查詢被另乙個連線上執行的查詢阻塞而導致再沒有可用的結果為止。此時第乙個連線阻塞,無限期等待處理更多的結果。第二個連線沒有在鎖上阻塞,但仍試圖將結果返回給應用程式。然而,由於應用程式阻塞而在第乙個連線上等待結果,第二個連線的結果將得不到處理。 

學習Python 中經常遇到疑惑的地方

可以這樣,不用儲存遞迴中的變數 import os deffindfile str dir os.path.abspath for x in os.listdir dir if os.path.isdir os.path.join dir,x findfile str,os.path.join di...

工作中經常遇到的232 485 TTL訊號

今天在除錯乙個儀表,該儀表的通訊腳直接是微控制器出來的tx和rx腳 需要將這個儀表和液晶屏通訊,液晶屏上是485通訊。一開始沒注意這個,直接將液晶的485串列埠的a b先接到的tx和rx腳上面。然後就發現儀表能夠接收到液晶屏發過來的資料,但是液晶屏收不到儀表發給它的資料。後來領導過來說,微控制器的t...

您一生中經常遇到五個有趣的問題

分享 人一生中五個問題,在生活每個人都會碰到很多的問題,根據這個問題你能聯想到什麼?乙個簡單的問題也許就能講出一番人生大道理呢,不信你看看,然後看看你犯了那個沒。問題一 如果你家附近有一家餐廳,東西又貴又難吃,桌上還爬著蟑螂,你會因為它很近很方便,就一而再 再而三地光臨嗎?回答 你一定會說,這是什麼...