SQL Server內幕之數據頁

来源:https://www.cnblogs.com/aiaitie/archive/2018/07/23/9356225.html
-Advertisement-
Play Games

數據頁是包含已添加到資料庫表中的用戶數據的結構。 如前所述, 數據頁有三種, 每個都以不同的格式存儲數據。 SQL server 有行內數據頁、行溢出數據頁和 LOB 數據頁。 與 SQL server 中的所有其他類型的頁一樣, 數據頁的大小固定為 8 KB 或8192位元組。 它們由三主要組件組成 ...


數據頁是包含已添加到資料庫表中的用戶數據的結構。

如前所述, 數據頁有三種, 每個都以不同的格式存儲數據。

SQL server 有行內數據頁、行溢出數據頁和 LOB 數據頁。

與 SQL server 中的所有其他類型的頁一樣, 數據頁的大小固定為 8 KB 或8192位元組。

它們由三主要組件組成: 頁面頁眉、數據行和行偏移量數組, 如圖6-4 所示。

blob.png

 

頁標題

 

如圖6-4 所示, 頁標題占據每個數據頁的前96個位元組 (為數據、行開銷和行偏移保留8096個位元組)。表6-5 列出了檢查頁標題時顯示的一些信息。

blob.png

 

行內數據的數據行

 

頁標題後面是存儲表實際數據行的區域。單個數據行的最大大小為8060位元組的行內數據。

行還可以在單獨的頁上存儲行溢出和 LOB 數據。

在給定頁上存儲的行數根據表結構和存儲的數據而變化。

具有所有固定長度列的表始終可以存儲每頁相同的行數;

可變長度行可以根據輸入數據的實際長度, 存儲儘可能多的行。

保持行長更短可以使更多行適合頁面, 從而減少 i/o 並增加所需數據在緩存中的可能。

 

行偏移量數組

 

行偏移量數組是2位元組項的塊, 每個條目表示相應數據行開始的頁面上的偏移量。

每行在這個數組中都有一個2位元組的條目 (正如前面所討論的, 當您閱讀每行所需的10個開銷位元組時)。

雖然這些位元組沒有存儲在數據行中, 但它們確實會影響適合頁面的行數。

 

行偏移量數組指示頁上行的邏輯順序。

例如, 如果表具有聚集索引, SQL server 將按聚集索引鍵的順序存儲這些行。

這並不意味著行按聚集索引鍵的順序物理地存儲在頁面上。

相反, 偏移量數組中的插槽0引用聚集索引鍵順序中的第一行, 插槽1引用第二行, 依此類推。

正如您在檢查實際頁面時所看到的那樣, 這些行的物理位置可以位於頁面的任何位置。

 

查看數據頁

 

可以使用 DBCC 頁命令查看數據頁的內容, 

這允許您查看資料庫中任何給定頁的頁標題、數據行和行偏移表。

只有系統管理員才能使用 DBCC 頁。

但是, 由於通常不需要查看數據頁的內容, 因此在 SQL server 文檔中找不到有關 DBCC 頁的信息。

不過, 如果您想使用它, 下麵是語法:

DBCC PAGE ({dbid | dbname}, filenum, pagenum[, printopt])

 

DBCC 頁面命令包含表6-6 中顯示的參數。

清單6-4 中的代碼和結果顯示來自 DBCC 頁的示例輸出, 其 printopt 值為1。

請註意, DBCC TRACEON (3604) 指示 SQL server 將結果返回給客戶端。

如果沒有此 traceflag, 則不會為 DBCC 頁命令返回輸出。

 

blob.png

正如所看到的, DBCC 頁的輸出分為四主要部分: 緩衝區、頁標題、數據和偏移量表 (實際上是偏移量數組)。

緩衝區部分顯示有關給定頁的緩衝區的信息。

此上下文中的緩衝區是管理頁的記憶體結構, 本節中的信息僅在頁處於記憶體中時才相關。

 

從 DBCC 頁的 "輸出" 頁標題部分顯示頁上所有標題欄位的數據。

(表6-5 顯示了大多數這些欄位的含義。數據節包含每行的信息。

使用具有 printopt 值1或3的 DBCC 頁表示插槽位置, 即每行的6個表存儲257、頁上的行的偏移量和行的長度。

行數據分為三部分。

 

左列指示顯示數據所在行內的位元組位置。

中間部分包含存儲在頁面上的實際數據, 每五列顯示八個十六進位數字。

最右邊的列包含數據的 ASCII 字元表示形式。 此列中只有字元數據是可讀的, 儘管可能會顯示某些其他數據。

"偏移量表" 部分顯示頁面末尾的行偏移量數組的內容。

 

在 DBCC 頁的輸出中, 您可以看到此頁包含23行, 第一行 (由插槽0指示) 從偏移量 1585 (0x631) 開始。

實際存儲在頁面上的第一行實際上是6行, 而行偏移量數組中的偏移量為96。printopt 值為1的 DBCC 頁顯示 "插槽編號" 順序中的行, 即使可以從每個插槽的偏移量中看到, 也不是在頁面上實際存在行的順序。

如果使用 printopt 值為2的 DBCC 頁, 則會看到頁的所有8096個位元組 (標頭之後) 的轉儲, 按它們存儲在頁面上的順序排列。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • top命令命令用於實時監測系統資源使用狀況,包含,進程、cpu,記憶體等 1、用法 top [選項] 2、命令選項 -b 以批處理模式操作-c 顯示完整的治命令-d 屏幕刷新間隔時間-I 忽略失效過程-s 保密模式-S 累積模式-i<時間> 設置刷新間隔時間-u<用戶名> 指定用戶名-p<進程號> 指 ...
  • 第1章 Linux啟動過程 開機自檢(BIOS)##硬體檢查 MBR引導 GRUB菜單(選擇不同的內核) 載入內核 運行init進程(Linux系統裡面第一個進程) 讀取/etc/inittab配置文件(讀取運行級別) 執行/etc/rc.d/sysinit腳本(系統的初始化腳本 設置IP地址) 執 ...
  • 1、下載zxing源碼 git clone https://github.com/15903016222/zxing-cpp.git 2、安裝依賴工具cmake sudo apt-get install cmake cmake-qt-gui 在此安裝中需要使用3.0以上版本的cmake工具,而ubu ...
  • 簡介DNS是用來名字解析的,名字解析成IP地址,IP地址解析成名字,正反操作,有伺服器端和客戶端即 S/CDNS是應用層協議,基於UDP/53、TCP/53埠,缺一不可分為正向解析和反向解析/遞歸查詢、迭代查詢註意:正反向解析是兩個不同的名稱空間,是兩棵不同的解析樹名稱解析:主機名解析把一種名稱轉... ...
  • 最近使用 iDrac 和 iLO 總是會使用到 .jnlp 文件, 為了方便,今天把設置過程記錄下來。 JNLP 文件,全名為 Java Network Launching Protocol 文件, 我們需要 javaws 命令去執行它。 在 fedora 中 ,我們需要安裝 相應的 rpm 包,y ...
  • 基於centos7靜默安裝oracle 11gr2單實例資料庫 ...
  • 在開始博客之前,還是同樣的給一個大概的目錄結構,實則即為一般MySQL的優化步驟 1、查看SQL的執行頻率 使用show status命令 2、定位哪些需要優化的SQL 通過慢查詢記錄+show processlist命令查看當前線程 3、分析為什麼SQL執行效率低 使用explain/desc命令 ...
  • 關於{RDBMS(關係型資料庫管理系統)設計範式基礎概念 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的範式,各種範式呈遞次規範,越高的範式資料庫冗餘越小。 目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴德斯科 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...