㈠ 磁碟I/O是什麼
是指磁碟的輸入和輸出(Input和Output的縮寫)。
讀/寫IO,最為常見說法,讀IO,就是發指令,從磁碟讀取某段扇區的內容。指令一般是通知磁碟開始扇區位置,然後給出需要從這個初始扇區往後讀取的連續扇區個數,同時給出動作是讀,還是寫。磁碟收到這條指令,就會按照指令的要求,讀或者寫數據。控制器發出的這種指令+數據,就是一次IO,讀或者寫。
這個概念及操作注意事項程序員比較關注,普通使用者了解即可。
㈡ 硬碟io性能
一,硬碟IO的延時
對於SQL Server資料庫系統,限制查詢響應的主要因素是硬碟的延時,根據硬碟的物理構造(磁軌和扇區),延時可以分為尋道延時和旋轉延時:
尋道延時:硬碟的物理刺頭移動並定位到所需數據的時間,
旋轉延時:硬碟旋轉到所需數據的時間,通常用MB/S,或IO吞吐量來衡量
在OLTP系統中,數據更新操作較多,每次讀取的數據量少,目標數據的位置相對隨機(隨機讀寫),因此,對於尋道延時要求更高,硬碟需要花費更多的尋道時間。
在DSS/DW系統中,事務的運行時間更長,數據相對靜態,不常更新,讀操作比寫操作的要求更高,順序讀操作佔比很高,因此,IO吞吐量更重要,可以通過硬碟的盤面來增加順序訪問的IO吞吐量。
二,根據WaitType偵測IO性能
SQL Server引擎把IO作為一個資源來看待,在多任務的現代資料庫系統中,同一時刻會接收到很多查詢請求,每一個查詢請求都需要申請系統資源(CPU、內存和IO),才能繼續執行下去,然而系統的資源是有限的,當查詢爭用資源時,有些查詢請求資源得到滿足,順利執行下去,有些查詢請求的資源得不到滿足,該查詢就被阻塞,處於等待資源分配的狀態。當出現IO性能問題時,查詢語句會被硬碟IO阻塞,這使得執行計劃被迫掛起(或阻塞)來等待資源,SQL Server通過DMV來顯示系統運行的狀態,用等待類型來表示不同的阻塞信息。
1,數據文件的IO
如果SQL Server 出現 IO 性能問題,那麼在SQL Server 內部通過DMV sys.dm_exec_requests的wait_type,來反饋 IO 問題。如果查詢請求的wait_type長時間處於PageIOLatch_XX,那麼說明系統不能很快把數據讀取到內存中。
PAGEIOLATCH_xx :用於描述數據頁的IO爭用,說明系統正在從硬碟載入數據到內存的Buffer Pool中
當SQL Server 要去讀或寫一個Page的時候,首先會在Buffer Pool里尋找,如果在Buffer Pool中找到了,那麼讀寫操作會繼續進行,沒有任何等待。如果沒有找到,那麼SQL Server 就會設置Wait_Type為PageIOLatch_EX(寫)或PageIOLatch_SH(讀),然後發起一個非同步IO操作,將頁面讀入Buffer Pool中,在IO沒有完成之前,Request將會保持在PageIOLatch_EX(寫)或PageIOLatch_SH(讀)的等待狀態。IO消耗的時間越長,等待的時間越長。
2,日誌文件的寫入
日誌文件以寫為主,工作量由修改命令激發的事務數量決定。當SQL Server要寫事務到日誌文件時,如果Disk 不能及時完成IO請求,那麼事務就無法提交,SQL Server 不得不進入WriteLog 等待狀態,直到事務被成功記錄到日誌文件中,才會提交當前的事務。
如果request經常出現WriteLog的Wait type,說明事務日誌的寫請求不能被Disk及時完成,這種情況,對SQL Server 整體性能影響較大。
WRITELOG:在數據被修改時,在Log Cache和Buffer Cache中都會有記錄,如果在Log Cache中的數據在checkpoint時寫入硬碟,就會發生這種等待。
LOGBUFFER等待:很少出現,當一個任務正在等待存儲日誌到Log Buffer中時,就會出現LOGBUFFER等待,出現這種等待,說明日誌所在的硬碟無法響應請求。如果把日誌文件放在一個非常慢的硬碟上,而數據文件放在一個非常快的硬碟上,就會出現這種等待。
3,AYSNC_IO_COMPLIETION和IO_COMPLIETION也是IO瓶頸的潛在指標
AYSNC_IO_COMPLIETION:標識任務正在等待IO請求來完成操作,當一個應用程序連接SQL Server,在處理數據時變得非常慢,很可能就會出現這種類型的等待。
IO_COMPLIETION:發生在一個任務正在等待用於非數據頁IO的IO操作上,非數據頁,一般是指日誌文件,通常發生在修改大量修改,或者內存中存在大量的臟數據時。
三,影響讀寫性能的因素
資料庫系統對IO的性能依賴較高,那麼影響資料庫系統讀寫性能的因素有哪些呢?
1,物理硬碟的IO能力
機械硬碟的IO速度沒有固態硬碟快,可以考慮把資料庫系統的機械硬碟更新為固態硬碟。
2,內存對硬碟IO的影響
在SQL Server Engine 訪問數據時,如果相應的data不存在於Buffer Pool,那麼Buffer Manager 從Disk中的Data File(mdf 或 ndf)中將相應的data page讀取到內存中。SQL Server 將data page緩存起來。理想情況下,只要SQL Server能夠使用的內存充足,SQL Server 會將所有讀取到內存的中Data Page緩存到Buffer Pool中。對於讀取操作,只要相應的數據都緩存在內存中,Select 就不會有任何硬碟IO。
當Buffer Pool空間不足時,SQL Server 激活 LazyWriter,主動將內存中一些很久沒有使用的Data Cache和 Plan Cache 清除,mark為Free buffer,供其它Data Page使用。如果這些Page上的修改還沒有被CheckPoint寫回Disk,那麼LazyWrite會將其寫回。
3,碎片和壓縮
如果數據頁面或index 頁面的碎片很多,每個頁面存儲的數據行較少,那麼SQL Server 需要讀寫更多的Page。如果數據在頁面里存儲的非常緊湊,存儲相同數據所消耗的Page越少,並且可以充分利用SQL Server 預讀的優勢,減少IO。
壓縮技術不僅使數據佔用的Disk 空間減少,而且能夠減少IO。由於數據在寫入Disk之間經過壓縮處理,存儲相同數據所消耗的Page減少,讀取的Data Page會減少。壓縮技術在一定程度上能夠降低IO,但需要付出一定的代價:額外消耗少量的CPU和內存來解壓縮。
4,利用多個物理硬碟實現Data File的並發讀寫
在DB中的FileGroup 創建多個File,將這些File存放到不同的Physical Disk上。File 分布到不同的Physical Disk上,IO也會分布到不同的Physical Disk上,這樣能夠實現數據的並發讀取,提高讀取性能。
對於日誌文件,SQL Server會頻繁的寫事務日誌。只要資料庫發生修改,就會不斷地寫入日誌文件。如果不能及時完成日誌文件的IO,會導致事務的延遲提交,對性能的影響較大,所以,盡量將日誌文件放到寫入速度快的Disk上。SQL Server 順序寫事務日誌,在一個時間點,SQL Server 只會寫一個日誌文件。在不同的Physical Disk上創建多個log file對性能基本沒有幫助。
5,工作負載
日誌文件以寫為主,工作量由修改命令申請的事務數量決定,日誌文件是順序寫的,寫入速度快於隨機寫。如果日誌記錄不能及時寫入,那麼Request會處於WriteLog等待狀態,對系統整體性能影響較大。
數據文件寫入的數據量由修改量決定,SQL Server除了設置bulk logged 恢復模式之外,沒有太大的調整選項。
數據文件讀取的數據量,由訪問的數據量和Buffer Pool中緩存的數據量共同決定。如果訪問的數據量減少或者內存緩存區增加,都可以降低SQL Server 從Physical Disk讀取的Data Page數量。在內存不變的情況下,可以通過優化查詢語句,減少數據訪問量,來提高SQL Server 數據文件的讀取性能。
㈢ 硬碟出現IO錯誤,該怎麼辦
1、先下載並解壓軟體打開後,直接雙擊需要恢復的分區,然後右擊軟體圖標選擇《以管理員身份運行》
(3)硬碟的io擴展閱讀
1、保持良好的環境
硬碟對環境的要求比較高,有時候嚴重集塵或是空氣濕度過大,都會造成電子元件短路或是介面氧化,從而引起硬碟性能的不穩定甚至損壞。
2、防止受震動
硬碟是十分精密的存儲設備,進行讀寫操作時,磁頭在碟片表面的浮動高度只有幾微米;即使在不工作的時候,磁頭與碟片也是接觸的。硬碟在工作時,一旦發生較大的震動,就容易造成磁頭與資料區相撞擊,導致碟片資料區損壞或刮傷磁碟,丟失硬碟內所儲存的文件數據。