sql i/o開銷指什么,開銷大對數據庫有什么影響 摘自CSDN論壇 1) 執行sql查詢的過程,是經過SQL解析、SQL執行計划產生的,而SQL通過讀取表的頁數據到內存,讀取過程是通過全表讀 還是索引讀 均是產生cost的【無論何時運行查詢,SQL Server都必須從數據緩沖區中讀取數據(邏輯讀),如果所需要的數據沒有在緩沖區中,則需要到磁盤上讀取(物理讀)。所以io大會對磁盤造成壓力影響性能。同時也可能影響CPU性能。】,不論是i/O開銷還是cpu開銷,I/O方面的開銷列入頁數據讀取,而復雜的排序 、分組聚合等也產生CPU開銷,基於開銷大小的比較是SQL優化的基礎,可以在查詢分析器中執行查詢打開SQL語句,清晰看到每個訪問路徑操作的i/o開銷和cpu開銷 2)sql的network I/O是什么意思,為什么等待時間很長,網站打開相當卡 程序發送請求到數據庫取數據,sql把數據查出來之后發給程序,是通過網絡傳輸的,所以就是網絡io。 如果是等在網絡io,要么是取數太多,要么是程序取數是一條條的,而不是一次把數據都取走在處理 SQL Server磁盤I/O性能分析 原文:http://www.cnblogs.com/dreamer-fish/p/3499728.html SQL Server中的I/O操作類型: 1.對於內存中沒有緩存的數據,第一次訪問時需要將數據從所在的頁面從數據文件中讀取到內存中 2.在任何Insert/Update/Delete提交前,SQL Server需要保證日志記錄能夠寫入到日志文件中 3.當SQL Server做Checkpoint時,需要將內存緩沖區中已經發生修改的數據頁面同步到硬盤的數據文件中,一般一分鍾一次Checkpoint。如果修改較多,頻率高一些,寫的數量 和上次checkpoint依賴發生的數據修改量有直接關系 4.當SQL Server Buffer Pool發生壓力時,會觸發Lazy Writer,主動將內存里的一些很久沒有使用過的數據頁面和執行計划清空。如果這些頁面上發生的修改還未由checkpoint寫回硬盤,Lazy Writer會將其寫回 5.一些特殊操作,例如DBCC Checkdb、Reindex、Updata Statistics、Backup等,會帶來較大的硬盤讀寫。這些操作應該給都發生在一些固定的時間段 數據庫級別的I/O影響: 1.Recovery Interval(sp_configure)控制着SQL Server多久進行一次checkpoint checkpoint pages/sec(Buffer Manager)呈周期性上升 MSSQL:SQL Statistics-Batch Requests/sec:每秒鍾完成的批處理(batch)數目 MSSQL:Databases-Active Transactions:SQL Server里打開的,還沒有提交的事物數目 2.數據/日志文件的自動增長和收縮 3.數據文件里面碎片程度:頁面碎片越多,SQL Server就需要讀取和寫入更多的頁面,增加硬盤讀寫量 4.表格上的索引結構 5.數據文件和日志文件分開放在不同的磁盤上。如果可能的話,日志文件要放在寫入速度較快的磁盤上 6.一個數據文件組是否有多個文件,並且放在不同的磁盤上。但是對於日志文件,在一個時間點,SQL Server只會寫一個日志文件,所以在不同磁盤上創建多個日志文件對性能沒有任何提高 系統級別的I/O影響: %Disk Time:只觀察其曲線趨勢,值本身沒有參考價值 %idle Time:磁盤處於空閑狀態百分比。當磁盤處於空閑狀態時,值為100%。當磁盤滿負荷操作時,值為0,所以可以根據該值反推%Disk Time Disk Bytes/sec:每秒鍾磁盤讀和寫總量(磁盤的吞吐量)。需要先確認該磁盤的最大讀寫速度才有參考價值,可以看出是否已經達到了該磁盤的讀寫上限 Avg.disk sec/transfer:磁盤每一次讀或寫的動作所花的平均時間 Avg.Disk Queue Length:發出的磁盤操作正在等待被磁盤處理的請求數目。理論上講,這個值不應該長時間大於2 Current Disk Queue Length:當前正在等待被磁盤處理的請求數目 當Avg.Disk Queue Length高時,需要分別觀察Disk Bytes/sec和Avg.disk sec/transfer哪個計數器已經達到了其最大值 SQL Server中的性能計數器 Buffer Manager: Page Reads/sec和Page Writes/sec:每秒鍾讀寫了多少頁面。了解到由於Buffer Pool的行為帶來了多少磁盤讀寫 Lazy Writes/sec:Lazy Writer為了清空Buffer Pool每秒鍾做了多少頁面寫入操作 Checkpoint Writes/sec:每秒鍾從Buffer Pool里寫入到磁盤上的Dirty Page數目 Freespace Scans/sec:在堆(heap)結構里找能夠使用的空間。對於沒有聚集索引的表格,SQL Server會以堆的形式存儲。如果該值很高,應該多建立一些聚集索引 Full Scans/sec:每秒鍾SQL Server做全表掃描數目,該值越小越好 Databases(Log Activity): Log Flush Wait Time:寫入日志的動作曾經因為磁盤來不及響應而遇到的等待時間,會導致前端的事務不能提交,會嚴重影響SQL Server性能。該值應該在絕大多數時間都為0 Log Flush Waits/sec:在每秒提交的事務里,有多少個事務曾經等待過日志寫入完成。理想情況下,日志寫入應該立刻完成,不需要等待。