Sql server SQL Server中的物理页数

Sql server SQL Server中的物理页数,sql-server,Sql Server,我试图理解如何在SQLServer中创建页面。 我举了一个非常简单的例子: -- 0 pages CREATE TABLE TMP_1( id int) -- 2 pages INSERT INTO TMP_1 VALUES(1) -- 3 pages SELECT * INTO TMP_2 FROM TMP_1 首先,表TMP_1没有页面,这相当直观,因为没有数据。插入一行后有两页。其中一个当然存储数据,但第二个是什么 表TMP_2应与TMP_1相同,但有3页,为什

我试图理解如何在SQLServer中创建页面。 我举了一个非常简单的例子:

-- 0 pages
CREATE TABLE TMP_1(
    id int)

-- 2 pages  
INSERT INTO TMP_1
VALUES(1)   

-- 3 pages
SELECT  *
INTO TMP_2
FROM TMP_1 
首先,表TMP_1没有页面,这相当直观,因为没有数据。插入一行后有两页。其中一个当然存储数据,但第二个是什么

表TMP_2应与TMP_1相同,但有3页,为什么

我正在使用以下代码检查页数:

SELECT 
    t.NAME AS TableName,
    p.rows AS RowCounts,
    SUM(a.total_pages) AS TotalPages, 
    SUM(a.used_pages) AS UsedPages, 
    (SUM(a.total_pages) - SUM(a.used_pages)) AS UnusedPages
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
    AND t.name LIKE 'TMP%'
GROUP BY 
    t.Name, p.Rows
ORDER BY 
    t.Name  
首先,表TMP_1没有页面,这相当直观,因为没有数据

Sql server将仅在第一次插入时分配页面

插入一行后有两页。其中一个当然存储数据,但第二个是什么

这称为IAM页面

SQL Server使用索引分配映射来跟踪哪些页面已分配给哪个分配单元。它们存储在特殊的IAM页面中

每个IAM页面在一个文件中覆盖64000个区段的区域,即所谓的GAM间隔。如果单个分配单元需要多个IAM页面,则会形成一个双链接列表,即IAM链

请参阅下面的演示

create table t1
(
id int
)

drop table t1
insert into t1
values(1)

DBCC TRACEON (3604);

DBCC IND('PerformanceV3','t1',-1)
产量:

iam_chain_type  PartitionID   PageType
In-row data 72057594048217088   10
In-row data 72057594048217088   1
关于第三个问题:

表TMP_2应与TMP_1相同,但有3页,为什么

这是一个数据页,我最好的猜测是假设,这是一种方式 select Into在内部工作,当您插入时,SQL总是可以在需要时动态创建页面,但使用select Into,它会另外创建一个数据页面

至于原因,select into显示了所有三个页面的使用情况:
我相信分配DMV将捕获所有页面分配,但我们在这里讨论的是使用..这可以通过下面的DBCC命令更精确地看到

dbcc traceon(3604)
dbcc ind('performancev3','t2',-1)

dbcc page(0,1,36639,3)
参考文献:


但我无法复制。。我对
TMP_1
TMP_2
得到了相同的结果,这可能取决于SQL SERVER中的设置吗?这是我使用的os SQL SERVER版本:Microsoft SQL SERVER 2008 R2(SP2)-10.50.4297.0(X64)2013年11月22日17:24:14版权所有(c)Windows NT 6.1上的Microsoft Corporation Enterprise Edition(64位)(Build 7600:)我对此不确定。。让我们等待DBA大师+1感谢!它回答了我两个问题中的第一个。@TomekTarczynski:添加了我的猜测,但将留待新的答案。如果我理解正确,则此页面应为空(未使用),但根据SQL server,所有3个页面均已使用。对于“选择到案例”,您有三个页面、两个数据页面(一个已使用,一个未使用)和一个IAM页面(已使用)。希望这是清楚的。我明白了,但是检索页数的查询说在TMP_2中有3个页面,所有页面都被使用了。