主頁 > 知識庫 > SQL Server 磁盤請求超時的833錯誤原因及解決方法

SQL Server 磁盤請求超時的833錯誤原因及解決方法

熱門標簽:奧威地圖標注多個地方 外呼系統(tǒng)電銷專用 京華物流公司地圖標注 怎樣在地圖上標注路線圖標 優(yōu)質(zhì)地圖標注 千呼電銷機器人價格 武漢長沙外呼系統(tǒng)方法和技巧 百度地圖標注不同路線 智能語音外呼系統(tǒng)選哪家

最近遇到一個SQL Server服務器響應極度緩慢,并且出現(xiàn)客戶端請求報錯的情況,在數(shù)據(jù)庫中的errorlog中出現(xiàn)磁盤請求超過15s才完成的error消息。

對于此類問題,到底是存儲系統(tǒng)或者磁盤的故障,還是SQL Server 自己的問題,亦或是應用程序引發(fā)的呢?又要如何解決?

本文將對引起此問題的某一方面的因素進行簡單的分析,但是無法涵蓋所有潛在的可能性,因此遇到類似問題還要做具體的分析。

SQL Server中的磁盤請求超時

  該錯誤的英文版的錯誤信息如下:

  SQL Server has encountered %d occurrence(s) of I/O requests taking longer than %d seconds to complete on file [%ls] in database id %d. The OS file handle is 0x%p. 0
  The offset of the latest long I/O is: %#016I64x

  中文版的錯誤信息如下

  SQL Server 已遇到 %1! 次對數(shù)據(jù)庫 ID %4! 中的文件 [%3!] 進行的 I/O 請求超過 %2! 秒才完成。操作系統(tǒng)文件句柄為 0x%5!。最新的長時間 I/O 的偏移量為: %6!

  參考message信息中的833號錯誤消息

具體的833 error 申請磁盤請求超時現(xiàn)象

  具體報錯情況如下:

  SQL Server 已遇到 m 次對數(shù)據(jù)庫 n 中的文件***進行的 I/O 請求超過 15 秒才完成。操作系統(tǒng)文件句柄為 ***。最新的長時間 I/O 的偏移量為: ***

  也就是說在數(shù)據(jù)庫的文件自動增長的過程中遇到了錯誤。

  

  

  比較有意思的是某DBA將此錯誤信息報告給負責存儲(SAN存儲,并非掛的磁盤)的工程師,認為是可能存儲系統(tǒng)存在故障或者不穩(wěn)定造成的,

  存儲工程師認為存儲沒有問題,檢查服務器后說服務器不正常,內(nèi)存“幾乎占滿”,對于數(shù)據(jù)庫服務器,內(nèi)存“幾乎占滿”的情況可以說是完全正常的,鑒于負責存儲的工程師并非專業(yè)DBA,對于SQL Server數(shù)據(jù)庫服務器的內(nèi)存使用可能不是太了解,提出此疑問也可以理解。

  因為數(shù)據(jù)庫服務器使用的存儲是高性能的SAN存儲,存儲是作為一個服務存在的,有N多服務器共同來使用的,其他服務器并沒有出現(xiàn)磁盤請求,不太可能說某一臺服務器會出現(xiàn)疑似“存儲故障”就簡單認定為是存儲故障。

  那么究竟原因在什么地方呢?

數(shù)據(jù)庫引擎錯誤833的含義

  首先來看這個833錯誤的具體含義是什么,就不自己裝13解釋一通了,那本經(jīng)典的書上寫的很清楚了。

  總之,意思就是,SQL Server在請求磁盤讀寫的時候,遇到磁盤繁忙或者其他一些因素,超過了15秒還沒有完成
  比如數(shù)據(jù)的讀寫的時候需要向磁盤發(fā)起請求,而磁盤正忙或者其他問題,來不及或者相應的不夠及時,這樣無疑會嚴重影響SQL Server對外提供服務器的響應時間。

  上面簡單分析了,因為該問題并非普片發(fā)生的,存儲系統(tǒng)不太可能出現(xiàn)問題,那就很有可能定位到當前服務器自身的因素了。

原因分析

  因為是專門的SQL Server服務器,沒有其他應用程序的請求,很有可能跟向sqlserver數(shù)據(jù)庫發(fā)起的請求有關(guān)。

  其實發(fā)生這個問題之前,早就有預兆了,平時還算穩(wěn)定的服務器(CPU很少超過60%,內(nèi)存的PLE也可以穩(wěn)定在20分鐘以上,磁盤IO延遲較低等等),只是偶爾會存在抽風一陣子的情況

  抽風的時候表現(xiàn)為CPU狂飆到80%左右,內(nèi)存的PLE會嚴重下降,IO延遲嚴重增高。

  現(xiàn)在只能從SQL Server的Session入手,在觀察SQL Server中的活動Session的時候,發(fā)現(xiàn)某一類的SQL語句的查詢時間非常長,
  平時這類SQL在某一個時間段內(nèi)執(zhí)行的頻率還算比較高。

  但是正常情況下,這類SQL的執(zhí)行效率還是比較高的,為什么突然就變的非常之底?

  在檢查活動Session的對應的執(zhí)行計劃的時候,發(fā)現(xiàn)這類活動Session的等待狀態(tài)都是IO等待(PAGEIOLATCH_SH),同時SQL的執(zhí)行完全是意料之外的執(zhí)行方式。

  因為類似查詢還是執(zhí)行的比較頻繁的,此類Session會從不同的客戶端發(fā)起,一旦SQL的執(zhí)行效率降下來,服務器上會積壓大量的活動Session

  為什么平時執(zhí)行的好好的SQL語句突然就變的很慢很慢,

  原因就在于在某一點,SQL Server自動觸發(fā)了統(tǒng)計信息的更新,但是這是一個比較大的表,但是默認統(tǒng)計信息更新的取樣比例是不夠的,如果取樣百分比不夠,這個統(tǒng)計信息完全是不可用的。

  一旦自動收集統(tǒng)計信息完成之后,會根據(jù)當前收集到的統(tǒng)計信息,向之前的SQL語句發(fā)出一種它認為高效的方式(table scan而不是index seek),其實這種方式并非是合理的,
  由此引發(fā)對應的SQL利用一種并非合理的執(zhí)行計劃來實現(xiàn)查詢,同時會引發(fā)Session的擁堵,客戶端發(fā)過來大量的Session同時在利用一種低效的方式緩慢執(zhí)行。

  所以CPU會飆升,IO延遲增加,內(nèi)存的PLE嚴重下降。

  由此也不難理解,數(shù)十個查詢的Session正在以一種不合理的方式瘋狂地想磁盤發(fā)出請求,磁盤正在忙于活動Session的數(shù)據(jù)請求,出現(xiàn)無法響應因為數(shù)據(jù)或者索引文件的自動增長請求,造成一開始說的問題。

  最后經(jīng)過索引重建(促使統(tǒng)計信息更新,當然純粹的統(tǒng)計信息更新也可以)解決,長期預防的話,需要安排job人為地定義統(tǒng)計信息更新的閾值以及取樣百分比。

總結(jié):

  數(shù)據(jù)庫服務器上的問題,很多問題都是一個連鎖反應的過程,對應觀察到的一部分現(xiàn)象,很有可能并不是表面上的反應的那樣(磁盤請求超時,問題出在存儲上?)
  專業(yè)的位置上必須要有專業(yè)的素養(yǎng),比如一開始DBA誤以為是存儲問題,存儲工程師認為服務器內(nèi)存用滿了是不正常的等,其實都不是問題的根本原因所在。
  面對問題,要追本溯源,找出來最根本的原因,才是解決問題的關(guān)鍵。

您可能感興趣的文章:
  • C#訪問SqlServer設置鏈接超時的方法
  • sqlserver 2005連接超時采用bat命令解決
  • SQL Server中查詢結(jié)果超出了查詢時間范圍解決方法

標簽:銅仁 威海 七臺河 防疫戰(zhàn)設 天水 益陽 來賓 宿州

巨人網(wǎng)絡通訊聲明:本文標題《SQL Server 磁盤請求超時的833錯誤原因及解決方法》,本文關(guān)鍵詞  SQL,Server,磁盤,請求,超時,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server 磁盤請求超時的833錯誤原因及解決方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL Server 磁盤請求超時的833錯誤原因及解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章