sql server邏輯讀-預讀-物理讀
sql server 儲存資料的方式
1.頁是最小的操作單元,也就是說從磁碟讀取資料庫的時候最少讀取一頁,每一頁的大小是8kb,sql server對於頁的讀取是原子性,要麼讀完一頁,要麼完全不讀,不會有中間狀態
2.區是8個連續的頁組成的,區是最小的分配單元,當需要空間時最少分配乙個區的空間。
看圖說話,兩個表的結構完全一樣,乙個插入四條資料,另乙個插入100條資料,結果大小都為0.008;
sql server一頁的總大小為:8k
但是這一頁儲存的資料會是:8k=8192位元組-96位元組(頁頭)-36位元組(行偏移)=8060位元組
所以每一頁用於儲存的實際大小為8060位元組.(測試表額資料)
1.336*1024*1024/8060=173(約)
根據這個公式計算而得到的就是,預讀的次數(用估計資訊,去硬碟讀取資料到快取)
再看語句執行過程
當遇到乙個查詢語句時,sql server會走第一步,分別為生成執行計畫(占用cpu和記憶體資源),
同步的用估計的資料去磁碟中取得需要取的資料(占用io資源,這就是預讀),注意,兩個第一步是並行的,sql server通過這種方式來提高查詢效能.
然後查詢計畫生成好了以後去快取讀取資料.當發現快取缺少所需要的資料後讓快取再次去讀硬碟(物理讀)
最後從快取中取出所有資料(邏輯讀)。
為了測試為精確,你可以加上:
dbcc dropcleanbuffers (生產環境中不要使用.....)
**測試:
總結:預讀:用估計資訊,去硬碟讀取資料到快取。預讀100次,也就是估計將要從硬碟中讀取了100頁資料到快取。
物理讀:查詢計畫生成好以後,如果快取缺少所需要的資料,讓快取再次去讀硬碟。物理讀10頁,從硬碟中讀取10頁資料到快取。
邏輯讀:從快取中取出所有資料。邏輯讀100次,也就是從快取裡取到100頁資料。
SQLSERVER預讀邏輯讀物理讀
預讀 用估計資訊,去硬碟讀取資料到快取。預讀100次,也就是估計將要從硬碟中讀取了100頁資料到快取。物理讀 查詢計畫生成好以後,如果快取缺少所需要的資料,讓快取再次去讀硬碟。物理讀10頁,從硬碟中讀取10頁資料到快取。邏輯讀 從快取中取出所有資料。邏輯讀100次,也就是從快取裡取到100頁資料。l...
初談SQL Server邏輯讀 物理讀 預讀
要理解邏輯讀 物理讀 預讀這三個概念,先要搞懂sql server的資料儲存方式。sql server資料庫包括資料檔案和日誌檔案,乙個資料庫可以有乙個或多少資料檔案 日誌檔案。所有的資料儲存在資料檔案中,資料檔案可以劃分為再小的單元,我們稱為 頁 每頁大小8k。8個頁面構成乙個區。sql serv...
SQL Server邏輯讀 預讀和物理讀
預讀 用估計資訊,去硬碟讀取資料到快取。預讀100次,也就是估計將要從硬碟中讀取了100頁資料到快取。物理讀 查詢計畫生成好以後,如果快取缺少所需要的資料,讓快取再次去讀硬碟。物理讀10頁,從硬碟中讀取10頁資料到快取。邏輯讀 從快取中取出所有資料。邏輯讀100次,也就是從快取裡取到100頁資料。s...