解决sqlserver数据库表空间不自动释放问题

本文详细介绍了如何解决SQLServer数据库因日志文件过大导致的查询缓慢问题。通过调整恢复模式、运行检查点、备份日志、收缩日志文件等步骤,有效释放表空间,提升数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中遇到了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 (库名,所需大小);

 

转载于:https://www.cnblogs.com/King-JJ/p/7098051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值