Expert 診斷優化系列------------------冤枉磁碟了

来源:http://www.cnblogs.com/double-K/archive/2016/05/29/5539672.html
-Advertisement-
Play Games

現在很多用戶被資料庫的慢的問題所困擾,又苦於花錢請一個專業的DBA成本太高。軟體維護人員對資料庫的瞭解又不是那麼深入,所以導致問題遲遲不能解決,或只能暫時解決不能得到根治。開發人員解決數據問題基本又是搜遍百度各種方法嘗試個遍,可能錯過診斷問題的最佳時機又可能嘗試一堆方法最後無奈放棄。 怎麼樣讓瑣事纏 ...


    現在很多用戶被資料庫的慢的問題所困擾,又苦於花錢請一個專業的DBA成本太高。軟體維護人員對資料庫的瞭解又不是那麼深入,所以導致問題遲遲不能解決,或只能暫時解決不能得到根治。開發人員解決數據問題基本又是搜遍百度各種方法嘗試個遍,可能錯過診斷問題的最佳時機又可能嘗試一堆方法最後無奈放棄。

    怎麼樣讓瑣事纏身的程式維護人員,用最快的方式解決資料庫出現的問題?怎麼讓我們程式員的痛苦降低到最小...每天喝喝茶水,看看新聞平安度過一天呢?本系列重要通過Expert for sqlserver 工具講解下資料庫遇到的各種問題的表象及導致這樣問題的根本原因,讓定位問題更準確,解決問題思路更清晰!!

    資料庫的性能好壞,對於最終用戶來說表現為點擊的操作是否能夠快速響應,那麼反應到資料庫上就是語句執行時間是否夠短!

    對用運維人員資料庫性能的表現,簡單可能看成CPU 、記憶體、磁碟三巨頭指標是否正常,前面講述了CPU和記憶體的基本診斷

Expert 診斷優化系列------------------你的CPU高麽?

Expert 診斷優化系列------------------記憶體不夠用麽?

    本篇我們就講述最後的一位巨頭,看看磁碟能夠看出哪些問題!

廢話不多說,直接開整-----------------------------------------------------------------------------------------

    磁碟也許對部分軟體運維人員來說,這東西不歸我管!愛咋咋地,速度慢就換SSD,壞了就再買!但是用在資料庫上的磁碟你怎麼能判斷出是,磁碟的問題?不是你資料庫其他問題導致的?磁碟壞了...一般的維護人員就哭了。

 

磁碟配置的建議        

  這裡的配置建議主要針對資料庫的磁碟使用,首先我們先明確下物理磁碟和邏輯磁碟的概念。

  物理硬碟是硬體實體,即安裝在電腦機箱內的硬碟;
  邏輯硬碟是指人為在物理上划出分區以方便存取,管理裡面的文件。

   註:當你感覺到磁碟有壓力,並且想用另一塊磁碟幫助分擔這個壓力時,你需要添加的是物理磁碟而不是邏輯磁碟。

 

   SQL SERVER中主要存儲在磁碟,並且主要影響你系統的文件主要有:數據文件、日誌文件、tempDB數據文件(tempDB日誌可以忽略),很多用戶的一臺伺服器上運行這多個資料庫或多實例,那麼針對你的現有資料庫規劃好磁碟分配是第一課!

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

   資料庫磁碟該怎麼劃分? 不同系統不同環境可能都不相同,下麵給出一些簡單建議:

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

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

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

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

  

    

如何區分你的磁碟是物理盤還是邏輯盤?        

  

      此例中C:H:是同一物理盤,Y:G:是同一物理盤,Y: 和 Z:都是單分區的物理盤。這次中共有4個物理磁碟

 

    

      此例中每個都是一個單獨的物理磁碟

 

  註:磁碟信息可以通過系統信息(運行-msinfo32)或通過性能計數器等等手段查看。

 

  下麵看一個文件劃分的例子: (例子使用上面C:D:E:F:J都是單獨物理磁碟)

   

          tempDB放在F盤

   

          數據文件(.mdf)放在D盤,日誌文件(.ldf)放在E盤

 

磁碟壓力的診斷和分析    

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

  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. 記憶體不足導致需要頻繁和磁碟交互  (一般為主因
  2. 經常有大量冷數據需要從磁碟讀取,或經常有大批量臟頁一次寫入(checkpoint觸發)
  3. 磁碟讀寫速度,不能滿足業務需要

 

   為什麼記憶體不足會導致磁碟壓力大? 

   上一篇介紹了,記憶體這三個計數器是如何聯動的?

        Page life expectancy 不被使用的頁在緩存中停留的秒數,如果低說明記憶體壓力

        Page Reads/sec 所要讀的數據不在記憶體中需要物理讀取

        Lazy writes/sec 記憶體壓力時成批的刷新老化緩衝區 

   磁碟的讀寫計數器:Avg. Disk Write Queue Length和Avg. Disk Read Queue Length和記憶體計數器很大程度上也是聯動的!

   當一個操作需要大量讀取數據,且數據頁不在緩存中 ——》 那麼需要大量從磁碟讀取冷數據放入緩存(Page Reads/sec 升高,Avg. Disk Read Queue Length升高) ——》緩存有明顯壓力的時候Lazy writes/sec就會觸發(Lazy writes/sec升高),大批量的將老化的數據或緩存計劃等刷出緩存 ——》數據被清出緩存(有臟頁需要寫入磁碟Avg. Disk Write Queue Length),那麼頁生命周期就會下降(Page life expectancy)

              ——》

   借用上一篇 Expert 診斷優化系列------------------記憶體不夠用麽?  三小時一次記憶體的例子,我們看看磁碟是什麼樣的表現

   

   

   

 

    這內規律波動,記憶體壓力很有規律,記憶體壓力不過多介紹請參見上一篇。我們看看磁碟對應時間點的計數器是什麼樣子的? 你能想想到麽?

   

   

 

 

    是不是規律很強?這個例子展示了磁碟壓力和記憶體的聯動,也說明當你看到磁碟隊列很高的時候,不要輕易定位磁碟的問題,先看看當前系統記憶體是怎麼樣的狀態吧。

 

 

   藉助上一篇第二個,記憶體嚴重不足的例子:

   

  

   

 

   

 

 

 

    我們來看看這麼大記憶體的壓力下,磁碟是什麼狀態,我想已經不用我說過多了。

   

 

   

 

 

   高能預警:隊列高可能,不那麼直觀的說明啥,下麵我們來看一下這麼高隊列下的響應時間。每次和磁碟交互就要有1秒以上的磁碟響應時間(正常幾毫秒),那麼一個語句多次交互會是什麼樣的效果?

 

   

  

   ----------------------------------------------------------------------------------

   至此我們瞭解到了,系統磁碟隊列高的根本原因是由於記憶體不足導致的,那麼我們拋開記憶體壓力不談,遇到上面的情況我們怎麼緩解磁碟壓力呢???

   那就是前面提到的用多塊磁碟分擔這個壓力或選用速度更快的。

   看一下這個系統的磁碟及資料庫文件分佈

   

 

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

  

   資料庫1

   

   資料庫2

   

   tempDB

   

 

 

   2個業務頻繁的大資料庫,數據文件、日誌文件和系統tempDB都在同一個磁碟上!

   如果有其他物理磁碟可以分攤壓力,讀寫隊列會有降低,讀寫響應時間也會大幅縮短,但我們不能忽略根本原因是記憶體的超大壓力

   最佳的優化效果,當然即做記憶體做優化(請參見上一篇 Expert 診斷優化系列------------------記憶體不夠用麽? ) 又按照最佳的實踐把文件分散到多個磁碟分擔壓力。

 

-----------------------------------------------------------------------------------------------------

  總結:現在硬體成本越來越低,很多用戶都採用SSD或高級存儲等,直接以提升硬體的方式對系統做出優化。

     但本文主要介紹了磁碟壓力的主因是記憶體不足引起的,記憶體不足又很大程度是語句寫的太差,或明顯缺少索引導致。

     不要讓一個很簡單調優就能解決的問題,升級為要花高價換硬體。

     不能否認提升硬體效果肯定會有,但是找出系統真正的原因,對症下藥更為重要。

     

      

       

 

 

 ----------------------------------------------------------------------------------------------------

註:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接!
若您覺得這篇文章還不錯請點擊下右下角的推薦,非常感謝!

  引用高大俠的一句話 :“拒絕SQL Server背鍋,從我做起!”

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大圖:http://images2015.cnblogs.com/blog/730765/201605/730765-20160529113743209-72994369.png ...
  • 1. PCH文件概述 PCH文件是一種預編譯頭文件(一般擴展名為.PCH),是把一個工程中較穩定的代碼預先編譯好放在一個文件(.PCH)里。這些預先編譯好的代碼可以是任何的C/C++代碼--甚至可以是inline函數,只它們在整個工程中是較為穩定的,即在工程開發過程中不會經常被修改的代碼。 在 Xc ...
  • 看了很多別人寫的安卓SQlite數據的操作代碼,都是浮雲,瞎弄!一點也不通俗易懂,我覺得我寫的不錯,而且安卓項目也用上了,所以在博客園裡保存分享一下! 一SQLiteHelper類是自動重載增刪改查函數的,另外一個是自己定義的類,用Context傳值。我用的是Fragment,用Activity的話 ...
  • 此前編譯過Android4.4的源碼,但是現在Android都到了7.0的版本,不禁讓我感嘆Google的步伐真心難跟上,趁這周周末時間比較充裕,於是在過去的24小時里,毅然花了9個小時編譯了一把Android6.0的源碼,但是昨天編譯完之後已經很晚了,沒來得及記錄編譯的步驟,今天才慢悠悠地來記錄一 ...
  • 教你如何在 Android 使用多線程下載文件 =============================================== 前言 在 Android 日常開發中,我們會經常遇到下載文件需求,這裡我們也可以用系統自帶的 api 來解決這個問題,當然我們也可以自己來寫。在這裡我將教大 ...
  • 我們在使用手機的時候,經常會遇到一個問題:先是卡死,然後跳出該程式無響應,是否關閉的提示(當然有可能是我們手機性能太差=。=)這是因為線程的阻塞引起的,在這裡我講述一下UI線程,一般處理程式會在UI線程中執行耗時操作,這回導致UI線程阻塞,當UI線程阻塞,屏幕會出現卡死,用戶體驗會變得非常差,當線程 ...
  • OC 觀察者模式(通知中心,KVO) 什麼是觀察者模式??? A對B的變化感興趣,就註冊為B的觀察者,當B發生變化時通知A,告知B發生了變化。這就是觀察者模式。 觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使它們 ...
  • 在資料庫遠程連接上,很多時候我們總是連接不上,這時候很有可能1433埠未開放導致的。 解決方案: (1)在Windows防火牆中開放1433的入站(在Windows中開放1433埠的步驟:1.打開控制面板,2.點擊系統和安全,3.點擊防火牆,4.點擊高級設置,可以看到入站規則和出站規則,5.右鍵 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...