确定SQL Server数据库大小

Mic*_*tov 75 t-sql sql-server

SQL Server 2005/2008 Express版每个数据库的限制为4 GB.据我所知,数据库引擎仅考虑数据,因此不包括日志文件,未使用的空间和索引大小.

获取MDF文件的长度不应在SQL Server限制方面提供正确的数据库大小.我的问题是如何获得数据库大小?

Amy*_*y B 100

注释sp_spaceused

  • sp_spaceused考虑了日志文件的大小,因此如果你有一个非常小的数据库和一个非常大的日志文件,sp_spaceused的结果在尝试确定你与4GB限制的接近程度时会产生误导. (7认同)
  • +1这是我迄今为止在SO上阅读的最佳答案. (2认同)

小智 78

的sp_helpdb

与sp_spaceused不同,不需要循环.

  • 给出分配的DB大小(mdf文件的大小),而不是实际使用的大小. (5认同)

dev*_*vio 16

根据SQL2000帮助,sp_spaceused包括数据和索引.

这个脚本应该做:

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 name
SELECT SUM(CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3))) FROM #t
DROP TABLE #t
Run Code Online (Sandbox Code Playgroud)


Ian*_*son 14

在SQL Management Studio中,右键单击数据库,然后从上下文菜单中选择"属性".看看"尺寸"图.


MAX*_*AXE 8

最好的解决方案是使用sys.sysfiles视图计算每个数据库文件的大小,考虑每个页面的大小为8 KB,如下所示:

USE [myDatabase]
GO

SELECT
    [size] * 8
    , [filename]
FROM sysfiles
Run Code Online (Sandbox Code Playgroud)

[field]列表示文件的大小,以页为单位(MSDN参考sysfiles).

您会看到至少会有两个文件(MDF和LDF):这些文件的总和将为您提供整个数据库的正确大小...

  • +1`SELECT SUM(size)/128.0 AS size FROM sysfiles`返回与`sp_spaceused`相同的值,但可能更容易自动分析. (6认同)

小智 5

我一直喜欢直接追求:

SELECT 
    DB_NAME( dbid ) AS DatabaseName, 
    CAST( ( SUM( size ) * 8 ) / ( 1024.0 * 1024.0 ) AS decimal( 10, 2 ) ) AS DbSizeGb 
FROM 
    sys.sysaltfiles 
GROUP BY 
    DB_NAME( dbid )
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在SQL 2005 +中,基本用户帐户(即没有特殊权限的帐户)无法读取sysaltfiles.即使您在master..sysaltfiles或sys.sysaltfiles上将登录添加到master数据库和GRANT SELECT,此表上的select语句也将返回一个空记录集.使用系统管理员帐户没问题. (2认同)