当前位置: 代码迷 >> Sql Server >> sql server 查询MDB文件的实时大小,该如何解决
  详细解决方案

sql server 查询MDB文件的实时大小,该如何解决

热度:104   发布时间:2016-04-24 10:16:18.0
sql server 查询MDB文件的实时大小
sql server  如何用DMV查询MDB文件的实时大小?
------解决方案--------------------
是这样吗:
select sum(size)
from sys.database_files

------解决方案--------------------
引用:
Quote: 引用:

是这样吗:
select sum(size)
from sys.database_files


这个问题我也有点疑惑,我测试了几种方法好像都不行,你给的提示我也测试了
方法1
SELECT
DB_NAME(S.database_id) AS dbName, 
f.name,
CAST(S.size_on_disk_bytes  * 1.0 / 1024 / 1024 AS DECIMAL(16,4)) 'dbSize(:M)'
FROM sys.databases D
INNER JOIN sys.sysaltfiles F
ON D.database_id=F.dbid
INNER JOIN sys.dm_io_virtual_file_stats(null,null) S
ON S.database_id=D.database_id
AND S.file_id=F.fileid
WHERE  s.file_id = 1




方法二:
USE master
select b.name DB_Name, a.name Logical_name, a.filename File_Name,
cast((a.size * 8.00) / 1024 as numeric(12,2)) as DB_Size_in_MB,
case when a.growth > 100 then 'In MB' else 'In Percentage' end File_Growth,
cast(case when a.growth > 100 then (a.growth * 8.00) / 1024
else (((a.size * a.growth) / 100) * 8.00) / 1024
end as numeric(12,2)) File_Growth_Size_in_MB,
case when ( maxsize = -1 or maxsize=268435456 ) then 'AutoGrowth Not Restricted' else 'AutoGrowth Restricted' end AutoGrowth_Status
from sysaltfiles a
join sysdatabases b on a.dbid = b.dbid
where DATABASEPROPERTYEX(b.name, 'status') = 'ONLINE' AND fileid = 1  --AND DB_NAME(b.name) = 'NewPackOne' 
order by b.name


用这两种方法以及你给的提示,我测试了几个较大的db,删除大量数据后发现mdf文件没有变化,我不知道是否有其他原因


删除数据和文件大小不变是两码事,只有收缩才可能引起数据文件变小。SQLSERVER是先从操作系统申请磁盘空间,然后自行管理,不收缩的话,是不会释放空间给操作系统的
------解决方案--------------------
是的。这是SQLSERVER对文件管理机制决定的;因删除而空闲的空间并不会马上释放给操作系统,这也是你为什么在数据库的属性常规页中看到,可用空间这个描述;
  相关解决方案