解析SQL SERVER 資料頁面頭部結構
解析資料頁面頭部結構
if object_id('test') is not null
drop table test
go
create table test( id int,birth datetime,name char(10))
insert into test
select 1,'2009-11-27','aaaa' union all
select 2,'2009-11-27','aaaa'
exec sp_spaceused 'test'
結構:
name |
rows |
reserved |
Data |
index_size |
unused |
test |
2 |
16 KB |
8 KB |
8 KB |
0 KB |
通過dbcc ind (test,test,0) 可以檢視到該表有兩個頁,頁號分別為109,和89,其中89為資料頁。下面通過dbcc page 我們可以檢視到該資料頁的頭部結構,下面我們就來解析頭部結構每一個欄位的含義。
dbcc traceon(3604)
dbcc page(test,1,89,1)
m_pageId = (1:89) |
資料頁號 |
m_headerVersion = 1 |
標頭檔案版本號,從7.0以後,一直為1 |
m_type = 1 |
頁面型別,1為資料頁 |
m_typeFlagBits = 0x4 |
資料頁和索引頁為4,其他頁為0 |
m_level = 0 |
該頁在索引頁(B樹)中的級數 |
m_flagBits = 0x8000 |
頁面標誌 |
m_objId (AllocUnitId.idObj) = 83 |
|
m_indexId (AllocUnitId.idInd) = 256 |
|
Metadata: AllocUnitId = 72057594043367424 |
儲存單元的ID |
Metadata: PartitionId = 72057594038386688 |
資料頁所在的分割槽號 |
Metadata: IndexId = 0 |
頁面的索引號 |
Metadata: bjectId = 2089058478 |
該頁面所屬的物件的id,可以使用object_id獲得 |
m_prevPage = (0:0) |
該資料頁的前一頁面 |
m_nextPage = (0:0) |
該資料頁的後一頁面 |
pminlen = 26 |
定長資料所佔的位元組數 |
m_slotCnt = 2 |
頁面中的資料的行數 |
m_freeCnt = 8034 |
頁面中剩餘的空間 |
m_freeData = 154 |
從第一個位元組到最後一個位元組的空間位元組數 |
m_reservedCnt = 0 |
活動事務釋放的位元組數 |
m_lsn = (30:170:20) |
日誌記錄號 |
m_xactReserved = 0 |
最新加入到m_reservedCnt領域的位元組數 |
m_xdesId = (0:0) |
新增到m_reservedCnt 的最近的事務id |
m_ghostRecCnt = 0 |
幻影資料的行數 |
m_tornBits = 0 |
頁的校驗位或者被由資料庫頁面保護形式決定分頁保護位取代 |
注意在標頭檔案中幾個重要資料:
1、 pminlen = 26:除了表中固定資料所佔的位元組數外,還需要加上每行開始的4個位元組
的行開銷。即:
26=4(行開銷)+4(int所佔空間)+8(datetime 所佔空間)+10(char(10)所佔的空間)
2、 m_freeData = 154:頁面檔案的頭結構+(儲存每行資料需要的額外空間+資料自身的所佔的空間)*(行數)
154=96+(7+22)*2=96+58
3、 m_freeCnt = 8034: 每個頁面8K,減去m_freeData,再減去用來記錄每行資料行偏移的所需要的空間,(每行2個位元組)
8034=8192-154-4
4、 m_slotCnt = 2 該頁面中資料的行數
注意下m_freeData這個欄位的值,它實際的值是從第一個位元組到最後一個位元組的空間位元組數。假如這個表的結構沒有改變過,那麼資料的儲存是
頭部結構(96B) |
第一行資料 |
第二行資料 |
剩餘空間 |
行的偏移 |
m_freeData的值是
這三部分資料所佔空
間的總和
但是假如修改了表結構,沒有進行分頁,資料會向後向下移動,那麼表的儲存情況為變為:
頭部結構(96B) |
|
|
第一行資料 |
第二行資料 |
剩餘空間 |
行的偏移 |
m_freeData的值是
這五部分資料所佔空
間的總和
轉自http://www.cnblogs.com/trieagle/archive/2010/01/09/1642763.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-624806/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL SERVER大話儲存結構(1)_資料頁型別及頁面指令分析SQLServer型別
- ICMP 頭部資料結構 (轉)資料結構
- PostgreSQL Page頁結構解析(2)- 頁頭和行資料指標SQL指標
- 資料塊內部結構dump解析
- 透過結構化資料構建頁面
- PostgreSQL Page頁結構解析(3)- 行資料SQL
- 修改SQL-SERVER資料庫表結構的SQL命令SQLServer資料庫
- SQL Server Page資料庫結構深入分析SQLServer資料庫
- PostgreSQL 資料頁Page解析(2)- 頁頭和行資料指標SQL指標
- 給定json資料,將資料與頁面結構進行繫結JSON
- SQL Server 索引結構SQLServer索引
- SQL Server 資料頁損壞修復SQLServer
- TopThink頁面頭部存在多餘 li 標籤
- Redis 內部資料結構Redis資料結構
- InnoDB資料頁結構
- 從資料在頁面顯示不解析
- 基於Sql server資料庫的四種分頁方式總結SQLServer資料庫
- SpringMVC中利用@InitBinder來對頁面資料進行解析繫結SpringMVC
- Redis 字串 內部資料結構Redis字串資料結構
- sql學習過程1:sql server資料型別解析SQLServer資料型別
- sql server 2005 資料修改的內部原理SQLServer
- SQL Server 批量生成資料庫內多個表的表結構SQLServer資料庫
- SQL Server 記憶體資料庫原理解析SQLServer記憶體資料庫
- SQL Server 索引結構及其使用SQLServer索引
- 讀取SQL Server 表結構SQLServer
- SQL Server Report Service網頁頁面顯示英文問題SQLServer網頁
- 你真的理解索引嗎?從資料結構層面解析mysql索引原理索引資料結構MySql
- TopThink頁面頭部HTML的loginInfo內部多一個 li 標籤HTML
- HTML-5-頁面結構分析HTML
- 整理SQL SERVER資料頁checksum校驗演算法SQLServer演算法
- SQL Server之旅(6):使用winHex利器加深理解資料頁SQLServer
- tcp 偽頭部 結構 格式 校驗和TCP
- SQL Server 索引結構詳述(1)SQLServer索引
- SQL Server 索引結構及其使用(二)SQLServer索引
- SQL Server 索引結構及其使用(一)SQLServer索引
- SQL Server資料倉儲的構建與分析SQLServer
- 資料庫內部儲存結構探索資料庫
- redis 資料結構和內部編碼Redis資料結構