SQL I/O操作学习笔记
SQL Server在以下情況需要和硬盤進行交互:
1.對于內存當中沒有緩存的數據,第一次訪問時需要將數據所在的頁面從數據文件中讀取到內存里。
讀取時以頁面為最小單位。出于性能考慮,讀取的數據可能不僅僅包含所請求的內存頁,同時還包含了預讀的內存頁。讀取的數量與用戶需要需要訪問和數據頁面數量和buffer pool里面現有緩存的數量有關系。
2.在任何Insert\Update\Delete提交之前,SQL server需要保證日志記錄能夠寫入到日志文件。每次寫的數量和數據的修改量有關。
3.當SQL Server做檢查點(Checkpoint)的時候,需要將內存緩沖區中已經發生過修改的數據頁面同步到硬盤的數據文件里。這時候主要發生寫的操作,寫的數量與上次checkpoint以來發生的數據修改量有關。
4.當SQL Server緩沖區(Buffer pool)空間不足的時候,會觸發lazy writer,從而將內存里的一些很久沒有使用過的數據頁面以及執行計劃清空。若這些頁面上發生的修改未由checkpoint寫回硬盤,lazy writer 會將其寫回。這時候會發生一些寫的操作。寫的數量和Lazy writer需要清空的數據頁面數量直接相關。
Checkpoint和lazy writer的區別:
兩者都回寫數據,checkpoint是為了保證數據庫重新啟動的時候能在一定的時間內完成恢復,不論是否有內存壓力,都會被觸發。而Lazy writer則是為了緩解buffer pool的壓力才被觸發。
5.對于一些特殊的操作,DBCC CHECKDB、Reindex、Update statistics、數據庫備份等,通常也會帶來比較大的硬盤讀寫。
?
SQL Server主要的硬盤讀寫行為:
| 操作類型 | 數據文件或日志文件 | 讀或寫 |
| 讀入新數據頁 | 數據文件 | 讀 ? ? ? ? ? ? ? |
| Insert\Update\Delete操作的日志記錄 | 日志文件 | 寫 |
| Checkpoint | 數據文件 | 寫 |
| Lazy writer | 數據文件 | 寫 |
| CheckDB\Reindex\Update statistics\backup ? ? ? ? ? ? ? ? ? | 數據\日志 文件 ? ? ? ? ? ? ? ? ? ? ? | 讀寫 ? ? |
?
?
?
?
?
?
?
對于IO操作的分析:
1.對于select的操作,理想情況下,只要數據存在內存,就不應該有任何的硬盤讀寫。
2.SQL Server發生讀的數量,和內存是否有壓力直接相關。當內存沒有壓力時,讀的數量會想相對較少。而SQL發生的寫的數量,和用戶已經完成的數據修改量直接相關。如果一個數據庫大部分操作都是查詢,SQL發生的寫操作會非常小。
3.影響SQL Server I/O操作行為的因素:
(1) SQL Server的recovery interval(sp_configure):通常保留默認設置
interval時間過長,每次checkpoint產生的硬盤寫的數量會比較多,這樣可能會影響到SQL Server的性能。
Interval時間較短,checkpoint頻繁,這樣每次產生的寫操作較少,對硬盤的沖擊相對比較小。
(2) 數據/日志文件的自動增長和自動收縮:會對文件的讀寫速度產生嚴重影響,所以對于生產數據庫,避免自動收縮、增長的發生
(3) 數據文件里頁面碎片程度
?SQL Server以頁面為單位操作數據。對于相同數據量,頁面排的越緊湊,消耗的頁面數目也就越少,同時SQL Server需要讀入和寫出的頁面數目也就越少。如果頁面碎片過多,SQL Server需要讀寫的頁面也就更多,從而造成額外的硬盤讀寫量。
(4) 表格上的索引結構
通常存儲同樣多的數據,有聚集索引的表格明顯會管理的好些。這里的差別會影響SQL Server需要做的讀寫數目。
(5) 數據壓縮
SQL 2008以后只讀文件組可以使用NTFS的壓縮技術,以節省磁盤空間的消耗,讀取壓縮后的數據,在一定程度上可以降低I/O工作量,但是windows需要花額外的CPU和內存資源來將數據解壓縮,然后返回給SQL Server。對于這個技術,不建議用在OLTP的系統上。對比低廉的磁盤價格,消耗CPU或內存,可能有點得不償失。
(6) 數據文件和日志文件放在同一個盤:
通常數據文件讀的操作較大,而對于日志文件,由于寫的操作較多,建議放在寫入速度比較快的磁盤上。例如一個Raid 10的分區,放在Raid 5上,IO問題就會比較明顯。
(7) 一個數據文件組是否有多個文件,并且放在不同磁盤上。
?
轉載于:https://www.cnblogs.com/roseHLF/p/9304837.html
總結
以上是生活随笔為你收集整理的SQL I/O操作学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx配置文件中,location字
- 下一篇: 老板和主管不懂SEO,乱给SEO人员下指