UnL*_*uys 2 sql-server storage dbcc size sql-server-2017
我们要计算表中每一行的总“行上”存储字节数。正如我们所理解的,我们必须将每一列的 DATALENGTH() 相加,同时还要考虑 NULL 和诸如 VARCHAR(MAX) 之类的东西,它们在“行”上只有一个 24 字节的指针。我们知道每一行也有一些开销,这在下面的查询中没有考虑。
SELECT ROW_ID,
CASE
WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL1','PRECISION') = -1 THEN 24
ELSE ISNULL(DATALENGTH(COL1), 1)
END
+
CASE
WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL2','PRECISION') = -1 THEN 24
ELSE ISNULL(DATALENGTH(COL2), 1)
END
+
CASE
WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL3','PRECISION') = -1 THEN 24
ELSE ISNULL(DATALENGTH(COL3), 1)
END
+
...
...
AS ROW_SIZE
FROM EXAMPLE_TABLE
ORDER BY ROW_SIZE DESC
;
Run Code Online (Sandbox Code Playgroud)
多么野兽!而且这只是一个近似值。
然后我们发现
DBCC SHOWCONTIG ('EXAMPLE_TABLE') WITH TABLERESULTS
Run Code Online (Sandbox Code Playgroud)
返回最大记录大小。这表明 SQL Server 中已经有一个算法可以计算行的确切大小。
我们如何直接访问该算法?
我们如何直接访问该算法?
就这个问题的答案而言,具体而言,您无法直接访问它。没有什么可以说的SELECT GetMeMaxRowSize(MyTable, MyPartition, MyIndex)
。
但是,正如LowlyDBA指出的,您可以使用sys.dm_db_index_physical_stats为您提供比 ShowContig 更多的信息。非常有趣的是,如果您运行DBCC SHOWCONTIG()
,捕获不推荐使用的信息,您应该看到一条消息,使用上述 DMV 代替ShowContig
命令。
归档时间: |
|
查看次数: |
269 次 |
最近记录: |