4

.MDF( .NDF) 或.LDF文件添加到 SQL Server 时,我们可以选择设置其初始大小、自动增长和增量(百分比或绝对)。

数据库运行一段时间后,是否有可能发现数据使用了多少实际大小?例如,如果文件的实际大小是5M,但只用了2M来存储数据,那么文件在需要增长之前仍然可以占用3M的数据。

我需要一种方法来找出文件当前总大小(5M)中的“2M”(使用大小)。

4

5 回答 5

3

sys.database_files (Transact-SQL)
包含存储在数据库本身中的每个数据库文件的一行。这是每个数据库的视图。...

size     | int | Current size of the file, in 8-KB pages.
         |     | For a database snapshot, size reflects the maximum space that the snapshot can ever use for the file.
---------+-----+------------------------------------------------
max_size | int | Maximum file size, in 8-KB pages.
         |     | Databases that are upgraded with an unlimited log file size will report -1 for the maximum size of the log file.

FILEPROPERTY (Transact-SQL) 在指定文件名和属性名时返回指定的文件名属性值。...

SpaceUsed | Amount of space that is used by the specified file. | Number of pages allocated in the file

像这样使用它们:

SELECT 
    name, 
    size, 
    FILEPROPERTY(name, 'SpaceUsed') AS SpaceUsed, 
    size - FILEPROPERTY(name, 'SpaceUsed') As UnusedSize
FROM 
    sys.database_files
于 2015-06-06T12:57:51.373 回答
3

经过一番研究,我注意到了这个FILEPROPERTY功能。

SELECT FILEPROPERTY(name, 'SpaceUsed') spaceUsed, * 
FROM sysfiles

它似乎给了我在文件的当前大小内使用了多少。例如,如果文件的当前大小是 5M,FILEPROPERTY()则可能给我 2M,这意味着文件在需要增长之前仍然可以占用 3M 的数据。

如果有人可以与我确认,我会将其标记为答案。

于 2015-06-07T02:54:37.177 回答
1

如果您使用自己的特定初始大小参数创建了数据库,那么不,除非您编写了数据库创建脚本,否则无法知道它。

否则,通常默认初始大小被认为与model数据库相同。因此,如果它是默认值,那么您可以检查model数据库初始大小,通常为3MB

于 2015-06-05T23:51:26.287 回答
1

如何查找 SQL 日志文件 (.ldf) 大小

DECLARE @command varchar(1000)
SELECT @command = 'USE ? select [Name], physical_name [Path], 
CAST(size AS BIGINT)*8192 [TotalBytes], 
CAST(FILEPROPERTY(name,''SpaceUsed'') AS BIGINT)*8192 [UsedBytes], 
(case when max_size<0 then -1 else CAST(max_size AS BIGINT)*8192 end) [MaxBytes]
from sys.database_files'
Declare @dtTable table
(
[Name] varchar(max), 
physical_name varchar(max), 
[TotalBytes] varchar(max),
[UsedBytes] varchar(max),
[MaxBytes] varchar(max)
)
insert into @dtTable EXEC sp_MSforeachdb @command 
select * from @dtTable where physical_name like '%.ldf'
select * from @dtTable where physical_name like '%.mdf'
于 2017-10-03T08:05:28.070 回答
0

如果我错了,请有人纠正我,但对于数据文件,我相信*未压缩的备份应该大致对应于文件中的实际数据量。例如,如果数据库为 2gb,但备份为 1gb,则您有 ~1gb 的数据。至于你自己的日志。

于 2015-06-06T01:19:47.903 回答