SQL Server怎样找出一个表包含的页信息(Page)

发布时间: 2019-10-01 15:30:45 来源: 互联网 栏目: MsSql 点击:

这篇文章重要给大年夜家简介了关于SQL Server是若何找出一个表包含的页信息(Page)的相干材料,文中经过过程示例代码简介的异常详细,对大年夜家进修或许应用SQL Server具有必定的参考进修价值,须要的同伙们下面来一路进修进修吧

媒介

在SQL Server中,若何找到一张表或某个索引具有那些页面(page)呢? 有时辰,我们在分析和研究(例如,逝世锁分析)的时辰还真有如许的需求,那么若何做呢? SQL Server 2012供给了一个无文档的DMF(sys.dm_db_database_page_allocations)可以完成我们的需求,sys.dm_db_database_page_allocations有下面几个参数: 

  •  @DatabaseId:    数据库的ID,可以用DB_ID()函数获得某个数据库或以后数据库的ID
  •  @TableId:     表的ID。 我们可以应用OBJECT_ID()函数经过过程表名获得表ID。 这是一个可选参数,假设将其作为NULL传递,则前往与数据库中一切表的接洽关系页面,当它为NULL时,将忽视接上去的两个参数(即@IndexId和@PartionId)值
  • @IndexId:     索引的索引ID。 我们可以应用sys.indexes目次视图来获得索引ID。 它是一个可选参数,假设将其作为NULL传递,则前往一切索引接洽关系的页面。
  • @PartitionId: 分区的ID,它是一个可选参数,假设将其作为NULL传递,则前往与一切分区接洽关系的页面.
  • @Mode:       这是必填参数,有“LIMITED”或“DETAILED”两个参数。 “LIMITED”前往的信息较少。 “DETAILED”会前往详细/更多信息。明显,“DETAILED”形式会占用更多资本。

关于大年夜表而言,假设选择“DETAILED”参数,则消费的资本和时间异常长,这个时辰异常有须要选择“LIMITED”参数。

为了更好的懂得sys.dm_db_database_page_allocations输入的数据,其实我们有须要简单懂得、回想一下SQL Server中数据存储的相干知识点。 这就触及到页(Page)和区(Extent)的概念了。SQL Server中数据存储的根本单位是页,磁盘I/O操作在页级履行。也就是说,SQL Server读取或写入数据的最小单位就是以8 KB为单位的页。

区是管理空间的根本单位。 一个区是8个物理上持续的页的集合(64KB),一切页都存储在区中。区用来有效地管理页一切页都存储在区中。 SQL Server中有两种类型的区: 

  • 同一区: 由单个对象一切。区中的一切8页只能有一个对象应用。
  • 混淆区: 最多可由8个对象共享。区中8页中每页都可由不合的对象一切。然则一页总是只能属于一个对象。

SQL Server中页也有很多类型,详细参考下面表格。

留意事项:有些Page Type比较少见,临时有些材料没有弥补完美

PAGE_TYPE
页类型
页类型码
描述
1
Data Page
DATA_PAGE
数据页(Data Page)用来存放数据
l  堆中的数据页
l  集合索引中“叶子“页
2
Index Page
INDEX_PAGE
索引页(Index Page),集合索引的非叶子节点和非集合索引的一切索引记录
3
Text Mixed Page
TEXT_MIX_PAGE
一个文本页面,个中包含小块的LOB值和text tree的外部,这些可以在索引或堆的同一分区中的LOB值之间共享。
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
TEXT_TREE_PAGE
A text page that holds large chunks of LOB values from a single column value
7
Sort Page
 
在排序操作时代存储中心成果的页面
8
Global Allocation Map Page
GAM_PAGE
GAM在数据文件中第三个页上,文件和页的编号为(1:2),它用bit位来标识照应的区(extents)能否曾经被分派。它差不多能标识约64000个区(8k pages * 8 bits per byte),也就是4G的空间,假设数据空间逾越4G,那么数据库会用别的一个GAM页来标识下一个4G空间
Bit=1: 标识以后的区是余暇的,可以用来分派
Bit=0: 标识以后的区曾经被数据应用了
9
Shared Global Allocation Map Page
SGAM_PAGE
SGAM在数据文件的第四个页上,文件和页编号为(1:3),它的构造和GAM是一样的,差别在于Bit位的含义不合:
Bit=1:区是混淆区,且区内至少有一个页是可以被用来分派的
Bit=0:区是同一区, 或许是混淆区然则区内一切的页都是在被应用的
10
Index Allocation Map Page
IAM_PAGE
表或索引所应用的区的信息。
11
Page Free Space Page
PFS_PAGE
存储本数据文件里一切页分派和页的可用空间的信息
13
Boot Page
BOOT_PAGE
包含有关数据库的相干信息。 数据库中有且只要一个。它位于文件1中的第9页。
15
File header page
FILEHEADER_PAGE
文件标题页。 包含有关文件的信息。 每个文件一个,文件的第0页。
16
Differential Changed Map
DIFF_MAP_PAGE
自最后一条BACKUP DATABASE语句以后更改的区的信息
17
Bulk Changed Map
 
自最后一条BACKUP LOG语句以后的大年夜容量操作锁修改的区的信息
18
 
 
a page that's be deallocated by during a repair operation
19
 
 
the temporary page that  (or DBCC INDEXDEFRAG) uses when working on an index
20
 
 
a page pre-allocated as part of a bulk load operation, which will eventually be formatted as a ‘real' page

别的,关于sys.dm_db_database_page_allocations的输入字段信息以下所示(搜刮相干材料结合本身的懂得,假设缺点,敬请指出):

字段
中文字段描述
英文描述
database_id
数据库ID
ID of the database
object_id
表或视图对象的ID
Object ID For the table or view
index_id
索引ID
ID for the index
partition_id
索引的分区号
Partition number for the index
rowset_id
索引的Partition ID
Partition ID for the index
allocation_unit_id
分派单位的 ID
ID of the allocation unit
allocation_unit_type
分派单位的类型
Type of allocation unit
allocation_unit_type_desc
分派单位的类型描述
Description for the allocation unit
data_clone_id
 
?
clone_state
 
?
clone_state_desc
 
?
extent_file_id
区的文件ID
File ID of the extend
extent_page_id
区的文件ID
Page ID for the extend
allocated_page_iam_file_id
与页面接洽关系的索引分派映照页面的文件ID
File ID for the index allocation map page associate to the page
allocated_page_iam_page_id
与页面接洽关系的索引分派映照页面的页面ID
Page ID for the index allocation map page associated to the page
allocated_page_file_id
分派页面的File ID
File ID of the allocated page
allocated_page_page_id
分派页面的Page ID
Page ID  for the allocated page
is_allocated
该页能否被分派出去了
Indicates whether a page is allocated
is_iam_page
能否为IAM页
Indicates whether a page is the index allocation page
is_mixed_page_allocation
能否分派的混淆页面
Indicates whether a page is allocated
page_free_space_percent
页面的余暇比例
Percentage of space free on the page
page_type
页面的类型(数字描述)
Description of the page type
page_type_desc
页面的类型描述
 
page_level
页的层数
 
next_page_file_id
下一个页的 Fiel ID
File ID for the next page
next_page_page_id
下一个页的Page ID
Page ID for the next page
previous_page_file_id
前一个页的File ID
File ID for the previous page
previous_page_page_id
前一个页的Page ID
Page ID for the previous Page
is_page_compressed
页能否紧缩
Indicates whether the page is compressed
has_ghost_records
能否存虚影记录记录
Indicates whether the page have ghost records

简单懂得了下面知识点后,我们在应用这个DMF找出表或索引相干的页面,根本上可以读懂这些输入信息了。

USE AdventureWorks2014
GO
SELECT DB_NAME(pa.database_id) AS [database_name] ,
 OBJECT_NAME(pa.object_id) AS [table_name] ,
 id.name  AS [index_name] ,
 pa.partition_id AS [partition_id],
 pa.is_allocated AS [is_allocated],
 pa.allocated_page_file_id AS [file_id] ,
 pa.allocated_page_page_id AS [page_id] ,
 pa.page_type_desc ,
 pa.page_level ,
 pa.previous_page_page_id AS [previous_page_id] ,
 pa.next_page_page_id AS [next_page_id] ,
 pa.is_mixed_page_allocation AS [is_mixed_page_allocation],
 pa.is_iam_page  AS [is_iam_page],
 pa.allocation_unit_id AS [allocation_unit_id],
 pa.has_ghost_records AS [has_ghost_records]
FROM sys.dm_db_database_page_allocations(DB_ID('AdventureWorks2014'),
   OBJECT_ID('TestDeadLock'), NULL,
   NULL, 'DETAILED') pa
 LEFT OUTER JOIN sys.indexes id ON id.object_id = pa.object_id
   AND id.index_id = pa.index_id
ORDER BY page_level DESC ,
 is_allocated DESC ,
 previous_page_page_id;

参考材料: 

https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-page/

总结

以上就是我在处理客户端真实IP的办法,欲望本文的内容对大年夜家的进修或许任务具有必定的参考进修价值,感谢大年夜家对我们的支撑。

本文标题: SQL Server怎样找出一个表包含的页信息(Page)
本文地址: http://yourctp.com/shujuku/mssql/277627.html

假设认为本文对您有所赞助请赞助本站

付出宝扫一扫赞助微信扫一扫赞助

  • 付出宝扫一扫赞助
  • 微信扫一扫赞助
  • 付出宝先领红包再赞助
    声明:凡注明"本站原创"的一切文字图片等材料,版权均属编程客栈一切,迎接转载,但务请注明出处。
    sql server编写archive通用模板脚本完成主动分批删除数据SQLyog连接MySQL8.0报2058缺点的完美处理办法
    Top