减少数据库大小 - SQL Server、SSMS

Dav*_*rel 2 sql-server ssms t-sql

我的一个数据库每天都在增长几场演出。这是非常不寻常的,因为它仍处于开发阶段。经过小的研究,我发现偶数日志表几乎是数据库的大小(100GB),所以我清除了它。我运行了一个脚本来检查这个数据库中的表大小,一切都恢复正常。也就是说,没有可笑的胖桌子。然而,尽管有问题的表的饮食,数据库的总体大小并没有改变。

有什么建议?

顺便说一句,我正在使用 SQL SERVER 2012

谢谢,大卫

Ken*_*her 5

我愿意打赌您的数据库已完全恢复并且您没有进行事务日志备份。事务日志需要日志备份来清除和重用空间。否则它只会继续增长和增长。


Mik*_*Fal 5

SQL Server 文件本质上是保存数据的容器,就像存储桶一样。当然,这个存储桶会增长以容纳其中的数据。但是,一旦它增长,它将保持该大小,除非您缩小文件本身,即使您清空数据。像这样:

在此处输入图片说明

您可以使用以下查询(从Glenn Berry 的 DMV 脚本借用)查看数据库文件中有多少空间是空

SELECT f.name AS [File Name] 
, f.physical_name AS [Physical Name]
, CAST((f.size/128.0) AS decimal(15,2)) AS [Total Size in MB]
, CAST(f.size/128.0 - CAST(FILEPROPERTY(f.name, 'SpaceUsed') AS int)/128.0 AS decimal(15,2)) AS [Available Space In MB]
, [file_id]
, fg.name AS [Filegroup Name]
FROM sys.database_files AS f WITH (NOLOCK) 
   LEFT OUTER JOIN sys.data_spaces AS fg WITH (NOLOCK) 
   ON f.data_space_id = fg.data_space_id OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud)

要减小文件大小,您需要使用DBCC SHRINKFILE命令来实际减小文件大小。但是,请记住以下注意事项:

  1. 您不能将文件缩小到超过文件中有数据的程度(因此,如果您有 10 GB 的实际数据,则不能将其缩小到此之外)。
  2. 请注意您是否真的需要收缩。如果您的数据量将再次增长到这个大小,那么缩小这些文件并没有帮助您的数据库。SQL Server 和主机操作系统都必须完成工作才能生成数据文件。保罗兰德尔在这里谈论更多。

  • 除了您的第二点之外,收缩命令可能会导致严重的内部碎片,随着时间的推移会严重影响性能 - 这就是为什么您永远不应该为“维护”执行定期收缩。当然,这在生产和开发/测试环境之间的重要性不同,因此他的里程可能会有所不同,在这种特定情况下,一次性收缩不太可能是一个坏主意。 (4认同)