我希望能够找出我的数据库文件中剩余多少空间,这样我就可以知道何时增加空间,以便在应用程序运行困难时不会这样做。
我希望能够编写脚本,以便我可以定期在多个数据库中运行它。
我有SQL Server 2000和SQL Server 2005数据库,但我希望能够跨两者运行相同的脚本。
我可以使用Management Studio在2005数据库上手动执行此操作,但不能在2000数据库上执行此操作。
答案 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总是自动分配更多空间,直到硬盘已满,所以只需查询硬盘上的可用空间。
您使用哪些设置来增加数据库的“空间”?