SQL SERVER——磁盤問題定位與解決

磁盤問題定位基本流程:
 
 

磁盤的壓力分析,主要使用下面幾個性能計數器 (針對單獨的物理盤,每個物理磁盤都會有一組):

  1. Avg. Disk Read Queue Length   讀隊列(越小越好,理想值 2 以下,隊列越高說明一個操作的響應時間越長)
  2. Avg. Disk Write Queue Length  寫隊列(越小越好,理想值 2 以下,隊列越高說明一個操作的響應時間越長)
  3. Avg. Disk sec/Read  
  4. Avg. Disk sec/Write
  5. Disk Read Bytes/sec
  6. Disk Write Bytes/sec
 
注:常規判斷系統磁盤壓力,通過讀寫隊列即可判斷,後面4個主要用於磁盤是否自身性能存在問題,本文不介紹。
 
 

步驟1.排除其他因素影響

    磁盤IO一般是整個數據庫的瓶頸,磁盤寫入速度的快慢直接影響着數據庫的性能,一般推薦數據庫服務器不要與其他應用共用服務器,同時也要儘量避免在數據庫服務器上做大的文件處理工作。
 

步驟2.磁盤問題定位

磁盤隊列計數器持續很高(Avg. Disk Read Queue Length、Avg. Disk Write Queue Length)

 

 

磁盤響應時間很長(磁盤隊列很高,請求需要排隊完成,所以表現爲響應時間長)

 

 

磁盤隊列波動

 

 

 

 


 

 

步驟3.磁盤問題分析與解決(通用步驟)

 首先有哪些情況會對磁盤造成壓力?

    1. 內存不足導致需要頻繁和磁盤交互  (一般爲主因)
    2. 經常有大量冷數據需要從磁盤讀取,或經常有大批量髒頁一次寫入(checkpoint觸發)
    3. 磁盤讀寫速度,不能滿足業務需要
 
 
解決磁盤問題首先請診斷內存是否存在瓶頸,參照上一篇 -----內存問題定位與解決
如果內存不存在問題,請分析語句壓力,是否有不優化的語句(要查詢大量數據)需要從磁盤讀取。
並查看系統的文件磁盤規劃:

看一下這個系統的磁盤及數據庫文件分佈

   

 

   可以看到這個服務器只配置了一塊物理磁盤

  

   數據庫1

   

   

數據庫2

   

   tempDB

   

 

 2個業務頻繁的大數據庫,數據文件、日誌文件和系統tempDB都在同一個磁盤上!這樣磁盤的讀寫速度勢必不能滿足業務要求。

 
磁盤規劃建議:

       規劃磁盤分配的好處:假設你有兩個數據庫,業務操作都很繁忙,且讀/寫量都很大對磁盤的壓力都很大,那麼你自然會想到把他們分散到不同的磁盤上,這樣每個庫針對自己的磁盤讀/寫,不會互相影響且壓力相當於原來的1/2,從而可以提升磁盤操作的響應時間。

   數據庫磁盤該怎麼劃分? 不同系統不同環境可能都不相同,下面給出一些簡單建議:

    1. 按照文件類型劃分:數據文件、日誌文件、tempDB文件、備份文件,分別放在一個物理磁盤
    2. 按照數據庫劃分:不同的業務數據庫(壓力大的)分別放在一個物理磁盤,tempDB和備份文件各一個物理磁盤。

   上面的兩種分法是基本的劃分方式,但是根據系統壓力系統配置,均有不同情況。

   當你的數據庫壓力較小,或磁盤資源緊張可以做適當的合併。當你的數據庫特別大,並且有多個文件組,也可以選擇把文件組更進一步細分。

   類似於做了分區表,不同分區放在不同磁盤上,當需要多個分區數據時,可以利用IO並行提升效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章