代码之家  ›  专栏  ›  技术社区  ›  pearcewg

SQL Server-数据库大小计算差异问题

  •  0
  • pearcewg  · 技术社区  · 16 年前

    我正在尝试以编程方式监视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。这种差异是否可以描述为“开销”,它只会随着其他数据的增长而增长一小部分速度(对此我只需要粗略估计)。
    三。存储过程、函数、视图、触发器都在这个“开销”空间中?有办法计算这些吗?
    4。有没有其他方法来获取整个数据库的大小?我真的只想要一个简单的方法来得到真正的尺寸。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Diego    16 年前

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

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

    SELECT
      SUM([size] * 8) / 1024  AS DB_Size -- Field "size" contains the number of 8 KB pages contained in each file
    FROM
      [db_name_here].sys.database_files
    

    有关的详细信息 sys.database_files 在msdn网站上。

    希望这有帮助。:)

    迭戈

        2
  •  1
  •   YonahW    16 年前

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

        3
  •  0
  •   Martin Brown    16 年前

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

    也可以从SQL Server联机丛书中获取sp\u spaceused

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

    也可以从同一页的书在线

    数据库\大小将始终较大 大于保留+未分配的总和 空间,因为它包括 日志文件,但保留和 未分配的空间只考虑数据 页。

    还有一件事,您可能需要运行dbcc updateusage来获得准确的数字。

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