在项目中遇到了sql server数据库经过频繁地删减数据后,查询变慢的问题。
我把数据导到另一个库中,发现查询就很快。
查了下原因,根本原因是删除数据并不释放表空间,日志文件太过巨大的原因。
网上查了查,解决方案如下:
第一步, 在收缩前先查看日志的大小: SELECT * FROM sysfiles WHERE name LIKE '%LOG%' GO 第二步, 把数据库的恢复模式设成”简单”: ALTER DATABASE [数据库名] SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE [数据库名] SET RECOVERY SIMPLE GO 第三步, 运行checkpoint指令, 把dirty page写进数据库: CHECKPOINT GO 第四步, 截断日志: BACKUP LOG 库名 WITH NO_LOG GO 第五步, 记录一下日志名为下一步做准备: SELECT Name FROM sysfiles WHERE name LIKE '%LOG' GO 第六步, 收缩日志文件, 把不用的空间释放给操作系统: DBCC SHRINKFILE (文件名, 所需大小) GO 第七步, 验证一下日志大小是否达到所需大小了: SELECT * FROM sysfiles WHERE name LIKE '%LOG%' GO 第八步,将模式设置回去 ALTER DATABASE [数据库名] SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE [数据库名] SET RECOVERY FULL GO --查询指定数据库的日志文件名称 USE [数据库名] GO SELECT name FROM SYS.database_files WHERE type_desc='LOG' 后续步骤: 1)查看你的主要数据库, 看看日志增长是否失控; 2)查看上面的代码, 并进行必要修改和测试以适应你的数据库要求; 3)定期收缩数据库 ----(注: 慎用!! 不建议用在production环境里.) 4)继续监控数据库大小和服务器上的可用空间大小.
释放表空间:
DBCC SHRINKDATABASE (库名,所需大小);