将.MDF
( .NDF
) 或.LDF
文件添加到 SQL Server 时,我们可以选择设置其初始大小、自动增长和增量(百分比或绝对)。
数据库运行一段时间后,是否有可能发现数据使用了多少实际大小?例如,如果文件的实际大小是5M,但只用了2M来存储数据,那么文件在需要增长之前仍然可以占用3M的数据。
我需要一种方法来找出文件当前总大小(5M)中的“2M”(使用大小)。
将.MDF
( .NDF
) 或.LDF
文件添加到 SQL Server 时,我们可以选择设置其初始大小、自动增长和增量(百分比或绝对)。
数据库运行一段时间后,是否有可能发现数据使用了多少实际大小?例如,如果文件的实际大小是5M,但只用了2M来存储数据,那么文件在需要增长之前仍然可以占用3M的数据。
我需要一种方法来找出文件当前总大小(5M)中的“2M”(使用大小)。
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
经过一番研究,我注意到了这个FILEPROPERTY
功能。
SELECT FILEPROPERTY(name, 'SpaceUsed') spaceUsed, *
FROM sysfiles
它似乎给了我在文件的当前大小内使用了多少。例如,如果文件的当前大小是 5M,FILEPROPERTY()
则可能给我 2M,这意味着文件在需要增长之前仍然可以占用 3M 的数据。
如果有人可以与我确认,我会将其标记为答案。
如果您使用自己的特定初始大小参数创建了数据库,那么不,除非您编写了数据库创建脚本,否则无法知道它。
否则,通常默认初始大小被认为与model
数据库相同。因此,如果它是默认值,那么您可以检查model
数据库初始大小,通常为3MB
如何查找 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'
如果我错了,请有人纠正我,但对于数据文件,我相信*未压缩的备份应该大致对应于文件中的实际数据量。例如,如果数据库为 2gb,但备份为 1gb,则您有 ~1gb 的数据。至于你自己的日志。