在sql server数据库中查找可用空间的最佳方法?

时间:2009-05-14 22:17:48

标签: sql sql-server sql-server-2005

我希望能够找出我的数据库文件中剩余多少空间,这样我就可以知道何时增加空间,以便在应用程序运行困难时不会这样做。

我希望能够编写脚本,以便我可以定期在多个数据库中运行它。

我有SQL Server 2000和SQL Server 2005数据库,但我希望能够跨两者运行相同的脚本。

我可以使用Management Studio在2005数据库上手动执行此操作,但不能在2000数据库上执行此操作。

5 个答案:

答案 0 :(得分:14)

尝试sp_spaceused

  

显示行数,磁盘   空间保留,以及使用的磁盘空间   表,索引视图或服务   当前数据库中的代理队列,   或显示保留的磁盘空间   并由整个数据库使用。

我认为这存在于SQL Server 2000中,但我无法证明这一点。它在2005年和2008年有效。

如果您想将其与某些服务器端逻辑联系起来,可以使用sp_helptext来查看它。

编辑:扩展我的评论,并感谢http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359的原始撰稿人,这是一种按文件分解使用情况的方法:

select
      name
    , filename
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB
    , convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)) as SpaceUsedMB
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) as FreeSpaceMB
from dbo.sysfiles a

答案 1 :(得分:0)

可以运行SQL脚本来手动检查可用空间。但是,如果没有足够的空间,最好创建作业并分配警报以自动通知管理员。

我找到的最好的文章 - Managing Database Data Usage With Custom Space Alerts(需要SQLServerCentral登录),即使是没有太多DBA经验的支持人员也可以跟踪。

您也可以使用类似的文章Monitor database file sizes with SQL Server Jobs

另外,对于手动检查,我更喜欢 sp_SOS (可以从中下载 http://searchsqlserver.techtarget.com/tip/Find-size-of-SQL-Server-tables-and-other-objects-with-stored-procedure

EXEC dbo.sp_SOS @OrderBy='T' 

答案 2 :(得分:0)

运行以下命令以了解SQL Server 2000中当前可用的可用空间:

DECLARE @command VARCHAR(5000)   
DECLARE @DBInfo TABLE   
( ServerName VARCHAR(100),   
DatabaseName VARCHAR(100),   
PhysicalFileName NVARCHAR(520),   
FileSizeMB DECIMAL(10,2),   
SpaceUsedMB DECIMAL(10,2),   
FreeSpaceMB DECIMAL(10,2), 
FreeSpacePct varchar(8) 
) 

SELECT @command = 'Use [' + '?' + '] SELECT   
@@servername as ServerName,   
' + '''' + '?' + '''' + ' AS DatabaseName   , filename 
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
    , convert(decimal(12,2),round(fileproperty(a.name,'+''''+'SpaceUsed'+''''+')/128.000,2)) as SpaceUsedMB 
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'+''''+'SpaceUsed'+''''+'))/128.000,2)) as FreeSpaceMB, 
    CAST(100 * (CAST (((a.size/128.0 -CAST(FILEPROPERTY(a.name,' + '''' + 'SpaceUsed' + '''' + ' ) AS int)/128.0)/(a.size/128.0)) AS decimal(4,2))) AS varchar(8)) + ' + '''' + '%' + '''' + ' AS FreeSpacePct 
from dbo.sysfiles a' 

INSERT INTO @DBInfo 
EXEC sp_MSForEachDB @command   

SELECT * from @DBInfo

答案 3 :(得分:0)

我已编辑 Michael Petrotta 查询以添加可用空间百分比列。

SELECT DISTINCT
    SUBSTRING(volume_mount_point, 1, 1) AS volume_mount_point
    ,total_bytes/1024/1024 AS total_MB
    , available_bytes/1024/1024 AS available_MB
    ,((available_bytes/1024*1024) *100/(total_bytes/1024*1024)) as free_percent
FROM
    sys.master_files AS f
CROSS APPLY
    sys.dm_os_volume_stats(f.database_id, f.file_id);

答案 4 :(得分:-1)

对我来说,sql server总是自动分配更多空间,直到硬盘已满,所以只需查询硬盘上的可用空间。

您使用哪些设置来增加数据库的“空间”?