SQL Server 中的邏輯讀與物理讀

來源:互聯網
上載者:User

標籤:

首先要理解邏輯讀和物理讀:

  •   預讀:用估計資訊,去硬碟讀取資料到緩衝。預讀100次,也就是估計將要從硬碟中讀取了100頁資料到緩衝。
  •   物理讀:查詢計劃產生好以後,如果緩衝缺少所需要的資料,讓緩衝再次去讀硬碟。物理讀10頁,從硬碟中讀取10頁資料到緩衝。
  •   邏輯讀:從緩衝中取出所有資料。邏輯讀100次,也就是從緩衝裡取到100頁資料。

  SQL Server儲存的最小單位是頁,每一頁大小為8K,SQL Server對於頁的讀取是原子性的,要麼讀完一頁,要麼完全不讀。即使是僅僅要獲得一條資料,也要讀完一頁。而頁之間的資料群組織結構為B樹結構。所以SQL Server對於邏輯讀、預讀、物理讀的單位是頁。

樣本:

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

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

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

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

      基本上,邏輯讀、物理讀、預讀都等於是掃描了多少個頁。

      SQL SERVER查詢語句執行的順序

  當SQL Server執行一個查詢語句時,SQL Server會開始第一步,產生查詢計劃,查詢處理器需要讀取各個表的定義及表上各個索引的統計資訊,當查詢計劃產生後,真正交給查詢執行器執行時,SQL server 才會使用另外一個線程將查詢“可能需要的資料”從磁碟讀取的緩衝區中(前提是資料不在緩衝中),這就是預讀。SQL Server通過這種方式來提高查詢效能。

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

  估計的頁數可以通過DMV看到:select * from sys.dm_db_index_physical_stats... ,page_count 顯示為254;

      此時再執行之前的查詢語句:

   

     Storage engine notices pattern and kicks off read ahead, which starts to read data not yet requested into buffer pool. These are counted as read ahead reads, but not as logical or physical reads.Next time the scan or seek needs data, it is already in the buffer pool, so only logical io, no physical io.

    從外國論壇上看的,不難理解,就是第二次查詢時,如果資料已經再緩衝中了,那麼只有邏輯讀,沒有物理讀了,因為直接在緩衝中可以找到這些資料了。
參考:http://www.cnblogs.com/CareySon/archive/2011/12/23/2299127.html

 

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.