理解SQL SERVER中的邏輯讀,預讀和物理讀

來源:互聯網
上載者:User

SQL SERVER資料存放區的形式

在談到幾種不同的讀取方式之前,首先要理解SQL SERVER資料存放區的方式.SQL SERVER儲存的最小單位為頁(Page).每一頁大小為8k,SQL SERVER對於頁的讀取是原子性,要麼讀完一頁,要麼完全不讀,不會有中間狀態。而頁之間的資料群組織結構為B樹(請參考我之前的博文).所以SQL SERVER對於邏輯讀,預讀,和物理讀的單位是頁.

SQL SERVER一頁的總大小為:8K

但是這一頁儲存的資料會是:8K=8192位元組-96位元組(頁頭)-36位元組(行位移)=8060位元組

所以每一頁用於儲存的實際大小為8060位元組.

比如上面AdventureWorks中的Person.Address表,通過SSMS看到這個表的資料空間為:

我們可以通過公式大概推算出佔用了多少頁:2.250*1024*1024/8060(每頁的資料容量)≈293 - 表中非資料佔用的空間≈290(中的邏輯讀取數)

SQL SERVER查詢語句執行的順序

SQL SERVER查詢執行的步驟如果從微觀來看,那將會非常多。這裡為了講述邏輯讀等概念,我從比較高的抽象層次來看:

圖有些粗糙。

下面我解釋一。當遇到一個查詢語句時,SQL SERVER會走第一步,分別為產生執行計畫(佔用CPU和記憶體資源),同步的用估計的資料去磁碟中取得需要取的資料(佔用IO資源,這就是預讀),注意,兩個第一步是並行的,SQL SERVER通過這種方式來提高查詢效能.

然後查詢計劃產生好了以後去緩衝讀取資料.當發現緩衝缺少所需要的資料後讓緩衝再次去讀硬碟(物理讀)

最後從緩衝中取出所有資料(邏輯讀)。

下面我再通過一個簡單的例子說明一下:

這個估計的頁數資料可以通過這個DMV看到:

當我們第一次查詢完成後,再次進行查詢時,所有請求的資料這時已經在緩衝中,SQL SERVER這時只要對緩衝進行讀取就行了,也就是只用進行邏輯讀:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.