Questions tagged «data-pages»

2
当SQL Server没有可用的物理内存时会发生什么?
在进行谷歌搜索时,我发现了一些相互矛盾的信息。 一些站点指出,当没有物理内存可用于数据时,SQL Server会将已存在的数据移至TEMPDB中(请参阅:SQL Server:使TempDb神秘化和建议)。 但是其他站点指出,当剩余的物理内存不足时,操作系统可以使用PAGE FILE并将数据从物理内存移至该页面(请参阅SQL Server的页面文件)。 我想知道当SQL Server的物理内存用尽时,它将在哪里写入数据?要tempdb还是OS页面文件?还是两者都可以?

1
如何将ctid分解为页码和行号?
表格中的每一行都有一个系统列 ctid,其类型tid表示该行的物理位置: create table t(id serial); insert into t default values; insert into t default values; select ctid , id from t; ctid | ID :---- | -: (0,1)| 1个 (0,2)| 2 dbfiddle 在这里 是什么让刚刚页面数从最好的方式ctid在最适合的类型(例如integer,bigint或numeric(1000,0))? 我能想到的唯一方法是非常丑陋。


3
SQL Server的8 KB数据页未使用512字节
我已经创建了下表: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); 然后创建一个聚集索引: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); 接下来,我为它填充30行,每个行的大小为256字节(基于表声明): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO dbo.TestStructure (id, filler1, filler2) VALUES …

1
插槽阵列和总页面大小
我继续在许多论坛和博客中读到一个页面构成,如下所示:页面大小:16 x 512B = 8192B页面标题:= 96B最大行内行:= 8060B 这留下(8192-96-8060)B = 36B。 好的,这是合乎逻辑且正确的。我的问题是:为什么有那么多人说剩下的36B是为插槽阵列保留的? 显然,插槽数组在页面上每行提供2B的空间;因此,它可以小至2B,大至1472B: 2B:1行* 2B = 2B 1472B:8096B = n * 9B(带有开销的最小行大小...考虑单个TINYINT列)+ n * 2B(每行的插槽阵列成本)=> 8096 = 11n => n = 8096/11 = 736。 736 * 2B = 1472B。 由于使用14B版本标记,因此我的排名为20。 USE master ; GO CREATE DATABASE test ; GO USE test …


2
DATALENGTH的总和与sys.allocation_units中的表大小不匹配
我的印象是,如果我将DATALENGTH()一个表中所有记录的所有字段的总和求和,我将得出该表的总大小。我错了吗? SELECT SUM(DATALENGTH(Field1)) + SUM(DATALENGTH(Field2)) + SUM(DATALENGTH(Field3)) TotalSizeInBytes FROM SomeTable WHERE X, Y, and Z are true 我在下面使用此查询(我从网上获得此查询来获取表大小,仅聚集索引,因此它不包含NC索引)来获取数据库中特定表的大小。出于计费目的(我们按部门使用的空间量向部门收取费用),我需要找出此表中每个部门使用的空间。我有一个查询,用于标识表中的每个组。我只需要弄清楚每个小组要占用多少空间。 由于VARCHAR(MAX)表中的字段,每行空间可能会波动很大,因此我不能只取平均大小*部门的行数比率。当我使用上述DATALENGTH()方法时,我只能获得下面查询中使用的总空间的85%。有什么想法吗? SELECT s.Name AS SchemaName, t.NAME AS TableName, p.rows AS RowCounts, (SUM(a.total_pages) * 8)/1024 AS TotalSpaceMB, (SUM(a.used_pages) * 8)/1024 AS UsedSpaceMB, ((SUM(a.total_pages) - SUM(a.used_pages)) * 8)/1024 AS UnusedSpaceMB FROM sys.tables t with …

2
删除辅助数据文件。DBCC SHRINKFILE:无法移动页面,因为它是工作表页面
我为创建了太多辅助数据文件(.ndf)tempdb。要删除多余的文件,我需要清空文件(内容将移至其他文件): DBCC SHRINKFILE('tempdbfile8', EMPTYFILE); 然后删除文件: ALTER DATABASE tempdb REMOVE FILE tempdbfile8; 但是EMPTYFILE命令返回错误: DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page. Msg 2555, Level 16, State 1, Line 2 Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation. …

1
使用页面压缩时的行开销是多少?
我创建了一个包含650 Numeric(19,4)列的表。当我打开页面压缩时,通过运行 ALTER TABLE fct.MyTable REBUILD WITH (DATA_COMPRESSION = PAGE); 我懂了 消息1975,级别16,状态1 索引“ PK_Mytable”的行长度超过了“ 8060”字节的最大允许长度。 但是650乘以9字节仅是5850字节,与规定的8060字节的限制相去甚远。 服务器正在运行Windows 2012 r2和SQL Server 2016 SP1 CU2 使用页面压缩时的行开销是多少? 这是一些代码来显示我的意思: /* test script to demo MSG 1975 */ DECLARE @sql NVARCHAR(max)='', @i INT =0 drop table if exists dbo.mytable; SET @sql = 'Create table dbo.Mytable …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.