SQL Server 中的数据块有多大?

Sea*_*ong 4 sql-server disk-space

我在 SQL Server 2008 R2 中工作并创建了一个查询,用于收集和汇总数据文件和日志文件的大小。但是,我无法找到单个 SQL 数据块在磁盘上占用多少实际磁盘空间,因此我可以将其转换为更有意义的内容。

这是脚本:

DECLARE @DataSize INT
DECLARE @LogSize INT
SELECT @DataSize = SUM(size) from sys.database_files where type_desc = 'Rows'
SELECT @LogSize = SUM(size) from sys.database_files where type_desc = 'Log'
PRINT @DataSize
PRINT @LogSize
Run Code Online (Sandbox Code Playgroud)

一格空间有多大?将这两个整数变量转换为对系统管理员更有意义的变量是否容易?

Jon*_*gel 14

从列文档sys.database_files

size:文件的当前大小,以 8 KB 页为单位。

所以更有意义的查询可能是这样的:

SELECT
    df.name AS LogicalFileName,
    df.physical_name AS PhysicalPath,
    CONVERT(int, (((df.size * 8192) / 1024.0) / 1024.0)) AS SizeInMB
    FROM sys.database_files df;
Run Code Online (Sandbox Code Playgroud)

(您可以根据需要进一步扩展。)

  • @TomTom 实际上不,SQL Server 不会在范围内执行所有 IO。[使用扩展事件和进程监视器剖析 SQL Server 物理读取](http://blogs.msdn.com/b/sql_pfe_blog/archive/2013/03/14/dissecting-sql-server-physical-reads-) 中演示的测试with-extended-events-and-process-monitor.aspx) 和 [详细的 Windows I/O:进程监视器](http://sqlvelocity.typepad.com/blog/2011/04/detailed-windows-io-process- monitor.html)很容易复制(观察起来很有趣)。 (9认同)
  • 也就是说,64k 分配仍然是推荐的,尽管这 [通常对性能没有影响](http://www.kendalvandyke.com/2009/02/disk-performance-hands-on-part-2-raid.html) (IOPS、MB/秒或延迟)。 (7认同)
  • 值得补充的是,SQL Server 以 8 页或 64 KB“扩展区”的块为单位执行数据文件 I/O,因此优化存储而不是单个 8 KB 页。 (2认同)