日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sqlserver查看索引_SQL Server页中行物理存储

發布時間:2024/7/23 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlserver查看索引_SQL Server页中行物理存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL Server頁有很多類型:

1 – 數據頁. 記錄堆或者聚集索引葉子級的數據

2 – 索引頁. 用于保存聚集索引中的中間頁和根頁,或者非聚集索引的所有頁

3 – text mix page. A text page that holds small chunks of LOB values plus internal parts of text tree. These can be shared between LOB values in the same partition of an index or heap.

4 – text tree page. A text page that holds large chunks of LOB values from a single column value.

7 – sort page. A page that stores intermediate results during a sort operation.

8 – GAM page. Holds global allocation information about extents in a GAM interval (every data file is split into 4GB chunks – the number of extents that can be represented in a bitmap on a single database page). Basically whether an extent is allocated or not. GAM = Global Allocation Map. The first one is page 2 in each file. More on these in a later post.

9 – SGAM page. Holds global allocation information about extents in a GAM interval. Basically whether an extent is available for allocating mixed-pages. SGAM = Shared GAM. the first one is page 3 in each file. More on these in a later post.

10 – IAM page. Holds allocation information about which extents within a GAM interval are allocated to an index or allocation unit, in SQL Server 2000 and 2005 respectively. IAM = Index Allocation Map. More on these in a later post.

11 – PFS page. Holds allocation and free space information about pages within a PFS interval (every data file is also split into approx 64MB chunks – the number of pages that can be represented in a byte-map on a single database page. PFS = Page FreeSpace. The first one is page 1 in each file. More on these in a later post.

13 – boot page. Holds information about the database. There's only one of these in the database. It's page 9 in file 1.

15 – file header page. Holds information about the file. There's one per file and it's page 0 in the file.

16 – diff map page. Holds information about which extents in a GAM interval have changed since the last full or differential backup. The first one is page 6 in each file.

17 – ML map page. Holds information about which extents in a GAM interval have changed while in bulk-logged mode since the last backup. This is what allows you to switch to bulk-logged mode for bulk-loads and index rebuilds without worrying about breaking a backup chain. The first one is page 7 in each file.

PFS頁= 96+4+8088+4 間隔8088, 96頁頭,4行頭,slot0 8088 ,4slotlist

GAM/SGAM=96+4+90+4+7988+10 間隔 7988*8,96頁頭,4行頭,90slot0,4行頭,7988slot1,10slotlist

IAM頁 = ? ? ?96+4+90+4+7988+10 96頁頭,4行頭,90slot0,4行頭,7988slot1,10slotlist?

1. ? 數據頁行存儲格式

數據頁的基本格式:

數據頁的基本格式:

信息

助記符

大小(Byte)

狀態A

TagA

1

狀態B

TagB

1

固定長度大小

Fsize

2

固定長度數據

Fdata

Fsize-4

列數量

Ncol

2

NULL位圖(表中每列一個位;1表示對應列為null)

Nullbits

Ceil(Ncol/8)

行中存儲的可變長度列數

VarCount

2

可變長度的偏移陣列

VarOffset

2*VarCount

可變長數據

VarData

VarOffset[VarCount]-(Fsize+8-4+ Ceil(Ncol/8)+2*VarCount)

實例:

USE db_TestEnvcreate table Index_test(id int,a varchar(10))goinsert into Index_test select 100,'aaaaa'go 4000DBCC IND(db_TestEnv,Index_test,1)DBCC PAGE(db_TestEnv,1,45969,1)

輸出

Slot 0, Offset 0x60, Length 20, DumpStyle BYTE Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNSRecord Size = 20 Memory Dump @0x613BC060 00000000: 30000800 64000000 02000001 00140061 ?0...d..........a 00000010: 61616161 ????????????????????????????aaaa

a. ? ? ?第一個字節 TagA = 0x30 是由2個部分組成0x10(第4個位) 和0x20(第5個位),其中0x10表示有null列,0x20表示有可變長,0x40(第6個位)表示有版本標記,0x80(第7個位)表示TagB是否有值。

其中1-3位為行類型分別意思如下:

? ? ? ? 0:primary record,堆上的數據頁或者聚集索引的葉子頁。

? ? ? ? 1:forwarded record, ?被轉發頁

? ? ? ? 2:forwarding record,轉發根存頁(在行移動時會出現轉發頁和轉發根存頁如行溢出,可以查看《深入解析sql server 2008》 5.7.4.1 和6.7.4.1的相關內容)

? ? ? ? 3:index record,聚集索引非葉子頁或者非聚集索引記錄

? ? ? ? 4:blob record,blob記錄

? ? ? ? 5:ghost index record ,影子索引,被刪除了沒被清理,可以使用顯示事務來觀察

? ? ? ? 6:ghost data record,影子記錄,被刪除了沒被清理,可以使用顯示事務來觀察

? ? ? ? 7:ghost version record,幻想記錄,詳細請看《深入解析 SQL Server 2008》 10.7.3.8

b. ? ? ?第二個字節TagB有2個取值0x00,0x01.如果是0x01說明是被轉發頁的幻影頁。若為0x01則為TagA字節的解釋

其他的不需要解釋了,更具上面的表格就可以。

2. ? 索引頁行存儲格式

索引頁行存儲格式分為2種:1.非葉子,2.葉子。但是會因為是堆表上的非聚集索引,還是聚集索引表上的非聚集索引有所不同。是否include對索引的存儲格式沒啥影響。

1.堆表下

實例:

USE db_TestEnvcreate table Index_test(id INT IDENTITY,a char(10),b VARCHAR(10))goinsert into Index_test select 'aaaaa','bbb'go 4000create nonclustered index ix_id_a on Index_test(id,a)

1.1 ?葉子頁

基本格式

基本格式

信息

助記符

大小(Byte)

行頭

Header

1

定長建值

Fkey

定長大小

表記錄Rowid(fileid:page:slote)

RowID

8(4數據頁,2頁號,2槽號)

索引記錄包含的字段個數

col

2

NULL位圖(表中每列一個位;1表示對應列為null)

Nullbits

Ceil(可為空列數/8)

行中存儲的可變長度列數

VarCount

2

可變長度的偏移陣列

VarOffset

2*VarCount

可變長數據

VarData

VarOffset[VarCount]-(Fkey+12+ Ceil(可為空列/8)+2*VarCount)

DBCC PAGE(db_TestEnv,1,41006,1)

輸出

Slot 0, Offset 0x60, Length 26, DumpStyle BYTERecord Type = INDEX_RECORD Record Attributes = NULL_BITMAP Record Size = 26Memory Dump @0x6128C06000000000: 16220100 00616161 61612020 202020f2 ?."...aaaaa . 00000010: e1000001 00200003 0000???????????????..... ....

a. ? ? ?第一個字節header有以下的意義:

0x40:對于記錄類型為索引記錄總為0

0x20: 包含可變長字段

0x10: 包含null位圖數據

? ? ? ? 1-3bit 表示是否是索引記錄

? ? ? ? ?其他就不需要解釋了,按照表格可以輕易的得出。

1.2 ?非葉子頁

基本格式

信息

助記符

大小(Byte)

行頭

Header

1

定長建值

Fkey

定長大小

表記錄Rowid(fileid:page:slote)

RowID

8(4數據頁,2頁號,2槽號)

下一個頁所在的葉子節點(fileid:page)

KeyRowid

6(4數據頁,2頁號)

索引記錄包含的字段個數

col

2

NULL位圖(表中每列一個位;1表示對應列為null)

Nullbits

Ceil(可為空列數/8)

行中存儲的可變長度列數

VarCount

2

可變長度的偏移陣列

VarOffset

2*VarCount

可變長數據

VarData

VarOffset[VarCount]-(Fkey+18+ Ceil(可為空列/8)+2*VarCount)

DBCC PAGE(db_TestEnv,1,41007,1)

輸出

Slot 0, Offset 0x60, Length 32, DumpStyle BYTERecord Type = INDEX_RECORD Record Attributes = NULL_BITMAP Record Size = 32Memory Dump @0x6095C06000000000: 16010000 00616161 61612020 202020f0 ?.....aaaaa . 00000010: e1000001 0000007c 8d010001 00030000 ?.......|........

葉子非葉子沒有什么大的區別就是非葉子少了鍵值所在的葉子節點。需要注意的是唯一索引的非葉子比較特別沒有表記錄Rowid。

2.在聚集索引下的非聚集索引

2.1葉子節點

信息

助記符

大小(Byte)

行頭

Header

1

定長建值+聚集索引定長值

Fkey

定長大小

索引記錄包含的字段個數

col

2

NULL位圖(表中每列一個位;1表示對應列為null)

Nullbits

Ceil(可為空列數/8)

行中存儲的可變長度列數

VarCount

2

可變長度的偏移陣列

VarOffset

2*VarCount

可變長數據

VarData

VarOffset[VarCount]-(Fkey+18+ Ceil(可為空列/8)+2*VarCount)

create table Index_test(id INT IDENTITY,a varchar(10),b VARCHAR(10),iid)goinsert into Index_test select 'aaaaa','bb'go 4000UPDATE dbo.Index_test SET iid = id+1create clustered index cix_id_a on Index_test(id,a)GOCREATE NONCLUSTERED INDEX [idx__iid] ON [dbo].[Index_test]([iid],[b])DBCC PAGE(db_TestEnv,1,164560,1)

輸出

Slot 0, Offset 0x60, Length 25, DumpStyle BYTERecord Type = INDEX_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNSRecord Size = 25 Memory Dump @0x6083C06000000000: 36214104 00204104 00050000 02001400 ?6!A.. A......... 00000010: 19006262 61616161 61?????????????????..bbaaaaa

這個沒什么難度,第一個字節 Header 和其他的都一樣就是聚集索引上的非聚集索引會帶上聚集索引的key,在實例中:21410400 為自己的iid,20410400為id主鍵,6262為key的鍵,6161616161為聚集索引key。

如果聚集索引是可重復的,sql server會產生一個消除重復的數字,被當成可變長存放在可變成區域

2.2非葉子節點

信息

助記符

大小(Byte)

行頭

Header

1

定長建值+聚集索引定長值

Fkey

定長大小

下一個頁所在的葉子節點(fileid:page)

KeyRowid

6(4數據頁,2頁號)

索引記錄包含的字段個數

col

2

NULL位圖(表中每列一個位;1表示對應列為null)

Nullbits

Ceil(可為空列數/8)

行中存儲的可變長度列數

VarCount

2

可變長度的偏移陣列

VarOffset

2*VarCount

可變長數據

VarData

VarOffset[VarCount]-(Fkey+18+ Ceil(可為空列/8)+2*VarCount)

UPDATE dbo.Index_test SET b = b+RTRIM(id) 重建索引DBCC PAGE(db_TestEnv,1,177184,1)

輸出

Slot 0, Offset 0x60, Length 32, DumpStyle BYTERecord Type = INDEX_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNSRecord Size = 32 Memory Dump @0x607AC06000000000: 36020000 00010000 00e0b302 00010005 ?6............... 00000010: 00000200 1b002000 62623161 61616161 ?...... .bb1aaaaa

第一個字節和其他的都一樣不解釋,其他的按表格都可以解析

如果聚集索引是可重復的,sql server會產生一個消除重復的數字,被當成可變長存放在可變成區域

3.聚集索引中

在聚集索引下只有非葉子頁才是索引頁

基本格式

信息

助記符

大小(Byte)

行頭

Header

1

一下層最小固定聚集索引建值

Fkey

固定聚集索引建大小

一下層頁號(fileid:page)

KeyRowid

6(4數據頁,2頁號)

索引記錄包含的字段個數

col

2

NULL位圖(表中每列一個位;1表示對應列為null)

Nullbits

Ceil(可為空列數/8)

行中存儲的可變長度列數

VarCount

2

可變長度的偏移陣列

VarOffset

2*VarCount

可變長數據

VarData

VarOffset[VarCount]-(Fkey+18+ Ceil(可為空列/8)+2*VarCount)

實例:

create table Index_test(id INT IDENTITY,a varchar(10),b VARCHAR(10))goinsert into Index_test select 'aaaaa','bb'go 4000create clustered index cix_id_a on Index_test(id,a)GODBCC IND(db_TestEnv,Index_test,1)DBCC PAGE(db_TestEnv,1,51106,1)

輸出

Slot 0, Offset 0x60, Length 23, DumpStyle BYTERecord Type = INDEX_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNSRecord Size = 23 Memory Dump @0x6056C06000000000: 36010000 0097b300 00010002 00000100 ?6............... 00000010: 17006161 616161??????????????????????..aaaaa

轉載自:

https://www.cnblogs.com/Amaranthus/archive/2013/01/31/2886581.html

文章經作者授權轉載,版權歸原文作者所有

圖片來源于網絡,侵權必刪!

總結

以上是生活随笔為你收集整理的sqlserver查看索引_SQL Server页中行物理存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美久久久久久久 | 一区二区成人在线观看 | 91sao| 亚洲综合欧美综合 | 国产精品一区二区三区免费在线观看 | 成年网站在线播放 | 色婷婷av一区二区 | 久久精品69 | 97精品一区二区 | 美女视频免费在线观看 | 黄色免费在线看 | 日本阿v视频 | 欧美一区二区三区免费视频 | 成人自拍在线 | 国产成人高清在线 | 中文在线不卡视频 | 国产999久久久 | 成 人 黄 色 片 在线播放 | 国产精品日| 亚洲精品一区二区三区中文字幕 | 在线一区二区不卡 | 国产国语性生话播放 | 亚洲人成人一区二区在线观看 | 老色批影视 | 那里可以看毛片 | 澳门黄色一级片 | 免费黄色一级 | 日韩欧美国产网站 | 可乐操亚洲| 美女精品 | 男人午夜免费视频 | 日本xxxx高潮少妇 | 污污网站在线免费观看 | 99婷婷| 日韩精品久久久久 | 少妇太爽了 | 最新天堂在线视频 | 午夜免费小视频 | 999国内精品永久免费视频 | 91精品网 | 日韩视频免费在线播放 | 久久9999久久免费精品国产 | 视频在线观看电影完整版高清免费 | 亚洲色图偷| 精品国产免费人成在线观看 | 午夜精品福利影院 | 色小说在线 | 北条麻妃久久 | 先锋av资源站 | 日本aa视频 | 国产精品无码电影在线观看 | 91全免费 | 东北少妇露脸无套对白 | 殴美一区二区 | 欧美一区二区二区 | 成人黄色大片 | 色月婷婷 | av黄色在线播放 | 国产suv精品一区二区6 | 国产伦精品一区二区三区高清 | 国产高清不卡一区 | 日韩有码在线观看 | 欧美精品久久天天躁 | www一区二区 | 亚洲熟妇无码av在线播放 | 久色91| 国产精品二区在线 | 欧美另类高清 | 91丨九色丨海角社区 | 久久有精品 | 2019日韩中文字幕mv | 午夜两性网 | 思思99精品视频在线观看 | 久久久精品久久久久久 | 日韩一区二区精品 | 欧美日韩福利 | 男男大尺度 | 精品一卡二卡三卡 | 激情文学亚洲 | 午夜精品福利在线观看 | 久久久夜夜夜 | 国产极品在线播放 | 一区二区三区亚洲 | 天天躁日日躁bbbbb | 欧美三级视频在线观看 | 色涩综合 | 99精品视频免费版的特色功能 | 亚洲国产精彩视频 | 日韩午夜一区 | 女人喂男人奶水做爰视频 | 中文字幕在线视频一区二区 | 国产午夜三级 | 欧美在线性 | 91精品国产91久久久久福利 | 爱爱网站视频 | 国产激情精品 | 国产精品成人一区二区三区 | 国产三级91 | 欧美一区二区三区免费在线观看 |