Sql-Server

我認為 sys.dm_db_index_physical_stats 的 SQL 文件是錯誤的

  • November 10, 2021

轉到此文件頁面: https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-index-physical-stats-transact-sql?視圖=sql-server-ver15

然後進入index_level列說明:

僅當 mode = DETAILED 時才處理非葉級索引。

現在轉到掃描模式部分:

LIMITED 模式是最快的模式,掃描的頁面數量最少。對於索引,只掃描 B 樹的父級頁面(即葉級以上的頁面)。對於堆,檢查關聯的 PFS 和 IAM 頁,並以 LIMITED 模式掃描堆的數據頁。

在 LIMITED 模式下,compressed_pa​​ge_count 為 NULL,因為數據庫引擎僅掃描 B 樹的非葉頁以及堆的 IAM 和 PFS 頁。

掃描模式部分是錯誤的,對吧?受限模式僅掃描葉頁。讓我知道你的想法。在將其發佈到適當的渠道之前,我想與社區核實。

我認為這些文件是正確的。LIMITED 模式使用與預讀相同的機制。它利用了這樣一個事實,即所有父級/非葉級頁面都包含一個(指向)葉級所有頁面的列表(指針)。這就是為什麼它可以使用這些頁面 ID 來確定頁面是否處於相同的邏輯順序和物理順序。順便說一句,所有其他掃描模式也會先執行 LIMITED 模式掃描以查找邏輯碎片。

不,一切都按預期工作。

LIMITED模式下,父級頁面被掃描,你得到一行index_level= 0。

DETAILED模式下,所有頁面都被掃描,您會得到幾行(通常是 3 或 4)行,它們具有不同的值index_level,隨後是有關該特定級別頁面的資訊。-丹尼斯·魯巴甚金

引用自:https://dba.stackexchange.com/questions/302335