这篇文章和我另一篇文章是相辅相成的,在看《SQLSERVER2012 列存储索引的简单研究和测试》这篇文章之前希望大家先看一下这篇文章o(∩_∩)o 

SQLSERVER2012 列存储索引的简单研究和测试

 

LOB页面相信大家都不会陌生,LOB专门存储大型对象数据的,类型text、image这些数据类型的数据就是存储在LOB页面

MSDN上的解释是这样的:

http://technet.microsoft.com/zh-cn/library/ms189051(v=sql.105).aspx

LOB_DATA:以下列一种或多种数据类型存储的大型对象数据:text、ntext、image、xml、varchar(max)、nvarchar(max)、

varbinary(max) 或 CLR 用户定义类型 (CLR UDT)。页的类型为 Text/Image。

LOB_DATA 分配单元

当表或索引有一个或多个 LOB 数据类型时,将为每个分区分配一个 LOB_DATA 分配单元,以管理该数据的存储。

LOB 数据类型包括text、ntext、image、xml、varchar(max)、nvarchar(max)、varbinary(max) 和 CLR 用户定义类型。

 

但是在DBCC IND的结果里面,有这样的解释

PageType  页面类型:1:数据页面;2:索引页面;3:Lob_mixed_page;4:Lob_tree_page;10:IAM页面

究竟Lob_mixed_page和Lob_tree_page有什么区别?


堆表

先执行下面的SQL语句,用来存储DBCC IND的结果

 1 --执行下面语句,看一下DBCC IND的结果
 2 --先说明一下:
 3 --
 4 --PageType  页面类型:1:数据页面;2:索引页面;3:Lob_mixed_page;4:Lob_tree_page;10:IAM页面
 5 --
 6 --IndexID            索引ID:0 代表堆, 1 代表聚集索引, 2-250 代表非聚集索引 大于250就是text或image字段
 7 CREATE TABLE DBCCResult (
 8 PageFID NVARCHAR(200),
 9 PagePID NVARCHAR(200),
10 IAMFID NVARCHAR(200),
11 IAMPID NVARCHAR(200),
12 ObjectID NVARCHAR(200),
13 IndexID NVARCHAR(200),
14 PartitionNumber NVARCHAR(200),
15 PartitionID NVARCHAR(200),
16 iam_chain_type NVARCHAR(200),
17 PageType NVARCHAR(200),
18 IndexLevel NVARCHAR(200),
19 NextPageFID NVARCHAR(200),
20 NextPagePID NVARCHAR(200),
21 PrevPageFID NVARCHAR(200),
22 PrevPagePID NVARCHAR(200)
23 )

建立一个堆表

1 CREATE TABLE LobTestTable(id INT,NAME varchar(200) ,comment TEXT)
2 GO

插入3条记录

1 INSERT INTO [dbo].[LobTestTable] ( [id],name, [comment] )
2 SELECT 1,'中国','你好你好你好你好你好你好你好你好' UNION ALL
3 SELECT 2,'中国','他好他好他好他好他好他好他好他好' UNION ALL
4 SELECT 3,'中国','我好我好我好我好我好我好我好我好' 
1 SELECT * FROM [dbo].[LobTestTable]
2 GO

SQLSERVER中的LOB页面简单研究


把结果存入[DBCCResult]里

1 --TRUNCATE TABLE [dbo].[DBCCResult]
2 INSERT INTO DBCCResult EXEC ('DBCC IND(pratice,LobTestTable,-1) ')
3 
4 SELECT * FROM [dbo].[DBCCResult] ORDER BY [PageType] DESC

SQLSERVER中的LOB页面简单研究

可以看到,pagetype为3,即是Lob_mixed_page来存储text数据

而且普通的数据页和LOB页是由不同的IAM页来管理的,LOB页面由pageid为14575的页面来管理

普通数据页面由pageid为15608的页面来管理

我们看一下14576页面和14550页面到底存放了什么?

14576页面

  1 PAGE: (1:14576)
  2 
  3 
  4 BUFFER:
  5 
  6 
  7 BUF @0x03E8A5E4
  8 
  9 bpage = 0x193C0000                   bhash = 0x00000000                   bpageno = (1:14576)
 10 bdbid = 5                            breferences = 0                      bUse1 = 3859
 11 bstat = 0xc0010b                     blog = 0x212159bb                    bnext = 0x00000000
 12 
 13 PAGE HEADER:
 14 
 15 
 16 Page @0x193C0000
 17 
 18 m_pageId = (1:14576)                 m_headerVersion = 1                  m_type = 1
 19 m_typeFlagBits = 0x4                 m_level = 0                          m_flagBits = 0x8000
 20 m_objId (AllocUnitId.idObj) = 438    m_indexId (AllocUnitId.idInd) = 256  
 21 Metadata: AllocUnitId = 72057594066632704                                 
 22 Metadata: PartitionId = 72057594057261056                                 Metadata: IndexId = 0
 23 Metadata: ObjectId = 891150220       m_prevPage = (0:0)                   m_nextPage = (0:0)
 24 pminlen = 8                          m_slotCnt = 3                        m_freeCnt = 7979
 25 m_freeData = 207                     m_reservedCnt = 0                    m_lsn = (2922:21125:41)
 26 m_xactReserved = 0                   m_xdesId = (0:0)                     m_ghostRecCnt = 0
 27 m_tornBits = 0                       
 28 
 29 Allocation Status
 30 
 31 GAM (1:2) = ALLOCATED                SGAM (1:3) = ALLOCATED               
 32 PFS (1:8088) = 0x61 MIXED_EXT ALLOCATED  50_PCT_FULL                      DIFF (1:6) = CHANGED
 33 ML (1:7) = NOT MIN_LOGGED            
 34 
 35 Slot 0 Offset 0x60 Length 37
 36 
 37 Record Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
 38 
 39 Memory Dump @0x0917C060
 40 
 41 00000000:   30000800 01000000 03006802 001500250.........h....%         
 42 00000010:   80d6d0b9 fa0000f1 71250000 00d63800 †........q%....8.         
 43 00000020:   00010000 00††††††††††††††††††††††††††.....                    
 44 
 45 Slot 0 Column 0 Offset 0x4 Length 4
 46 
 47 id = 1                               
 48 
 49 Slot 0 Column 1 Offset 0x11 Length 4
 50 
 51 NAME = 中国                          
 52 
 53 comment = [Textpointer] Slot 0 Column 2 Offset 0x15 Length 16
 54 
 55 TextTimeStamp = 160825409536         RowId = (1:14550:0)                  
 56 
 57 Slot 1 Offset 0x85 Length 37
 58 
 59 Record Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
 60 
 61 Memory Dump @0x0917C085
 62 
 63 00000000:   30000800 02000000 03002002 001500250......... ....%         
 64 00000010:   80d6d0b9 fa0000f2 71250000 00d63800 †........q%....8.         
 65 00000020:   00010001 00††††††††††††††††††††††††††.....                    
 66 
 67 Slot 1 Column 0 Offset 0x4 Length 4
 68 
 69 id = 2                               
 70 
 71 Slot 1 Column 1 Offset 0x11 Length 4
 72 
 73 NAME = 中国                          
 74 
 75 comment = [Textpointer] Slot 1 Column 2 Offset 0x15 Length 16
 76 
 77 TextTimeStamp = 160825475072         RowId = (1:14550:1)                  
 78 
 79 Slot 2 Offset 0xaa Length 37
 80 
 81 Record Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
 82 
 83 Memory Dump @0x0917C0AA
 84 
 85 00000000:   30000800 03000000 03002002 001500250......... ....%         
 86 00000010:   80d6d0b9 fa0000f3 71250000 00d63800 †........q%....8.         
 87 00000020:   00010002 00††††††††††††††††††††††††††.....                    
 88 
 89 Slot 2 Column 0 Offset 0x4 Length 4
 90 
 91 id = 3                               
 92 
 93 Slot 2 Column 1 Offset 0x11 Length 4
 94 
 95 NAME = 中国                          
 96 
 97 comment = [Textpointer] Slot 2 Column 2 Offset 0x15 Length 16
 98 
 99 TextTimeStamp = 160825540608         RowId = (1:14550:2)                  
100 
101 
102 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
View Code

相关文章:

  • 2022-12-23
  • 2021-12-18
  • 2021-05-25
  • 2022-12-23
  • 2021-08-27
  • 2021-08-29
  • 2021-04-26
  • 2021-08-05
猜你喜欢
  • 2021-07-03
  • 2022-01-25
  • 2021-08-29
  • 2021-07-29
  • 2022-12-23
  • 2021-09-02
相关资源
相似解决方案