在寻求解决磁盘空间问题时,我经历了几个帖子,发现缩小数据库是一个选项,而其他一些选项是删除错误日志文件和事务日志文件。但是,
我发现第一个选项有争议,以便释放 未使用的空间SQL使用丑陋的过程并导致索引 从长远来看影响性能的碎片。意思是 在解除分配空间后,我们授予运营权 系统用它来做它需要的东西。
那么,从可用选项列表中删除缩小选项是否公平?
答案 0 :(得分:1)
不建议缩小数据库。缩小数据库时,你可以像这样理解它,然后它会导致碎片现在增加,以减少你尝试重建索引的碎片,最终会导致数据库大小的增加。
您可以运行查询以自行测试
SELECT name, (size*8) Size_KB
FROM sys.database_files
GO
-- Check Fragmentations in the database
SELECT avg_fragmentation_in_percent, fragment_count
FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID('SecondTable'), NULL, NULL, 'LIMITED')
GO
-- Shrink the Database
DBCC SHRINKDATABASE (ShrinkIsBed);
GO
-- Name of the Database and Size
SELECT name, (size*8) Size_KB
FROM sys.database_files
GO
-- Check Fragmentations in the database
SELECT avg_fragmentation_in_percent, fragment_count
FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID('SecondTable'), NULL, NULL, 'LIMITED')
GO
-- Rebuild Index on FirstTable
ALTER INDEX IX_SecondTable_ID ON SecondTable REORGANIZE
GO
-- Name of the Database and Size
SELECT name, (size*8) Size_KB
FROM sys.database_files
GO
-- Check Fragmentations in the database
SELECT avg_fragmentation_in_percent, fragment_count
FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID('SecondTable'), NULL, NULL, 'LIMITED')
GO
从here
查询来源您可以查看Don’t Touch that Shrink Database Button!
收缩数据库时会发生什么?
单击缩小数据库按钮(或将数据库保留为 自动收缩,或安排一个工作来执行收缩),你问SQL 服务器从数据库的文件中删除未使用的空间 进程SQL使用是丑陋的,导致索引碎片 从长远来看会影响绩效。你已经释放了那个空间和 让O / S做它需要的东西。如果你有成长 数据库(因为大多数生产数据库倾向于),这个 意味着该数据库将再次增长。取决于您的自动增长 设置(对另一个帖子的另一个宠儿)这种增长会 可能不仅仅是必要的,你最终会再次萎缩...... 充其量只是额外的工作(收缩增长/收缩增长)和 您的I / O子系统可以正常处理生成的文件碎片。 更糟糕的是,这导致我提到的索引碎片,文件 碎片化,打断原本连续的东西 文件并可能导致与I / O相关的性能问题。真 但是,你是在浪费时间并引入索引碎片。