Sql Server数据库瘦身方法
我的sql server其中一个数据库达到了30多个G不管是备份还是还原都特别耗时间分享一下我的解决办法。1.识别并清理无用数据查找大表SELECT t.name AS 表名, p.rows AS 行数, SUM(a.total_pages) * 8 / 1024.0 AS 占用空间_MB FROM sys.tables t JOIN sys.partitions p ON t.object_id p.object_id JOIN sys.allocation_units a ON p.partition_id a.container_id GROUP BY t.name, p.rows ORDER BY 占用空间_MB DESC;归档历史数据将不常用的历史数据迁移到备份表或归档数据库。删除冗余数据清理日志、临时表、测试数据等。2.重建或重新生成索引索引碎片会导致空间浪费定期重建或重新组织索引-- 重新生成索引会锁定表需在低峰期操作 ALTER INDEX ALL ON 表名 REBUILD; -- 重新组织索引在线操作影响较小 ALTER INDEX ALL ON 表名 REORGANIZE;3.启用数据压缩对表或索引启用压缩适用于 SQL Server Enterprise 版本-- 启用行压缩 ALTER TABLE 表名 REBUILD WITH (DATA_COMPRESSION ROW); -- 启用页压缩压缩率更高 ALTER TABLE 表名 REBUILD WITH (DATA_COMPRESSION PAGE);4.收缩数据库文件收缩数据文件谨慎使用可能产生碎片DBCC SHRINKDATABASE (数据库名, 目标百分比);收缩日志文件-- 首先截断日志 BACKUP LOG 数据库名 TO DISKNUL; -- 然后收缩日志文件 DBCC SHRINKFILE (日志文件名, 目标大小_MB);5.分区表对大表按时间或范围分区便于按分区清理数据提升查询性能。6.分离和附加数据库分离数据库后删除日志文件.ldf再重新创建日志文件需提前备份-- 分离数据库 EXEC sp_detach_db 数据库名; -- 手动删除日志文件后重新附加 EXEC sp_attach_db 数据库名, 数据文件路径.mdf;7.定期维护计划设置定期任务自动清理日志、重建索引、更新统计信息等。注意事项操作前务必备份数据库。收缩数据库可能导致碎片增加影响性能建议在清理数据后使用。日志文件过大通常由未提交的事务或完整恢复模式导致可考虑切换为简单恢复模式ALTER DATABASE 数据库名 SET RECOVERY SIMPLE;但会失去时间点恢复能力。