【问题标题】:SQL Server - database size calculation difference questionSQL Server - 数据库大小计算差异问题
【发布时间】:2008-12-08 15:13:52
【问题描述】:

我正在尝试以编程方式监控 SQL Server 数据库的大小,以便我的 Web 应用程序的管理部分可以报告它,并且我可以使用它来执行一些清理 SP、清除日志文件等。

根据 SO 建议,我使用以下代码计算表的大小:

CREATE TABLE #t (name SYSNAME, rows CHAR(11), reserved VARCHAR(18), data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18))EXEC sp_msforeachtable 'INSERT INTO #t EXEC sp_spaceused ''?'''-- SELECT * FROM #t ORDER BY name-- SELECT name, CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3)) FROM #t ORDER BY nameSELECT SUM(CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3))) FROM
#tDROP TABLE #t

当我对我的小型示例数据库运行此程序时,我得到的总和值约为 6.8 兆字节。当我查看数据库的属性时,它显示为 15.5 兆字节。

我有以下问题:
1. 还有什么可以弥补的?
2. 这种差异是否可以被描述为“开销”,它只会随着其他数据的增长而增长(我只需要粗略的估计)。
3. 存储过程、函数、视图、触发器都在这个“开销”空间中吗?有没有办法计算这些?
4. 还有其他方法可以获取整个数据库的大小吗?我真的只是想要一个简单的方法来获得真正的大小。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    在我看来,不同之处在于您在“属性”页面中看到的大小是通过查询表 .sys.database_files 计算得出的,该表计算每个数据库文件分配的 8KB 页数。

    要获得相同的结果,只需运行以下查询 (SQL Server 2005):

    选择 SUM([size] * 8) / 1024 AS DB_Size -- 字段“size”包含每个文件中包含的 8 KB 页数 从 [db_name_here].sys.database_files

    有关sys.database_files 的更多信息,请访问 MSDN 网站。

    希望这会有所帮助。 :)

    迭戈

    【讨论】:

      【解决方案2】:

      为什么不只检查磁盘上文件的大小?假设您知道文件的名称,您可以通过文件系统检查它们的大小。

      【讨论】:

        【解决方案3】:

        快速观察一下,您的脚本似乎只对 sp_spaceused 的数据列求和,而不是保留列(保留 = 数据 + 索引 + 未使用)。 sp_msforeachtable 也不包括系统表。

        也来自用于 sp_spaceused 的 SQL Server 联机丛书

        如果未指定 objname,则结果 为整个数据库返回。

        也来自在线书籍的同一页

        database_size 总是更大 比保留 + 未分配的总和 空间,因为它包括 日志文件,但保留和 unallocated_space 只考虑数据 页面。

        您可能还需要运行 DBCC UPDATEUSAGE 以获得准确的数字。

        另见“SQL Server Books Online sp_spaceused (Transact-SQL)"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-19
          • 1970-01-01
          • 2023-03-21
          • 1970-01-01
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 2022-08-15
          相关资源
          最近更新 更多