Sql server SQL Server中的物理页数
我试图理解如何在SQLServer中创建页面。 我举了一个非常简单的例子: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页,为什
-- 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个页面,所有页面都被使用了。