SQLServer日志无法收缩原因分析及解决
SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点。当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要。但是,一旦SQL SERVER发生崩溃时,了解事务日志的原理和概念对于快速做出正确的决策来恢复数据显得尤为重要.本系列文章将会从事务日志的概念,原理,SQL Server如何使用日志来确保持久性属性等方面来谈SQL Server的事务日志。
事务日志一般情况下是不需要进行收缩的,在一些情况下导致了日志占用空间极大情况下需要DBA手工进行收缩维护。
查看日志大小:
dbcc sqlperf(logspace)

如果有数据库日志文件非常大,就需要通过检查日志的VLF使用情况来进行诊断:
DBCC LOGINFO('数据库名称')

日志文件是通过重用VLF文件来实现事务日志按照lsn顺序写入到日志文件的,如果当前VLF的状态都是已使用(2使用0未用),那么收缩文件是无法收缩这些文件的。
查看日志无法收缩的具体原因:
SELECT name,log_reuse_wait_desc FROM sys.databases where name='数据库名称'
log_reuse_wait_desc的值解释如下:
NOTHING
当前有一个或多个可重复使用的虚拟日志文件。
CHECKPOINT
自上次日志截断之后,尚未出现检查点,或者日志头部尚未跨一个虚拟日志文件移动(所有恢复模式)。这是日志截断延迟的常见原因。
LOG_BACKUP
需要日志备份,以将日志的头部前移(仅适用于完整恢复模式或大容量日志恢复模式)。
注意:日志备份不会妨碍截断。
完成日志备份后,日志的头部将前移,一些日志空间可能变为可重复使用。
ACTIVE_BACKUP_OR_RESTORE
数据备份或还原正在进行(所有恢复模式)。
数据备份与活动事务的运行方式相同。数据备份在运行时,将阻止截断。
ACTIVE_TRANSACTION
事务处于活动状态(所有恢复模式)。一个长时间运行的事务可能存在于日志备份的开头。在这种情况下,可能需要进行另一个日志备份才能释放空间。
事务被延迟(仅适用于 SQL Server 2005 Enterprise Edition及更高版本)。“延迟的事务” 是有效的活动事务,因为某些资源不可用,其回滚受阻。
DATABASE_MIRRORING
数据库镜像暂停,或者在高性能模式下,镜像数据库明显滞后于主体数据库(仅限于完整恢复模式)。
REPLICATION
在事务复制过程中,与发布相关的事务仍未传递到分发数据库(仅限于完整恢复模式)。
DATABASE_SNAPSHOT_CREATION
正在创建数据库快照(所有恢复模式)。
这是日志截断延迟的常见原因,通常也是主要原因。
LOG_SCAN
正在进行日志扫描(所有恢复模式)。
这是日志截断延迟的常见原因,通常也是主要原因。
针对延迟日志截断原因的部分解决方案,
针对不同的情况有不同的处理方法,我曾经遇到过NOTHING和REPLICATION
我遇到的虽然是NOTHING,但是有大量正在使用的VLF,所以采用将正在使用的VLF通过发生check point写入到日志文件,具体如下:
DBCC OPENTRAN (dbname)
CHECKPOIN
最棘手的是之前遇到过REPLICATION的情况,已经确认没有replication的数据库,最后通过禁用发布和分发来删除复制功能,但还是没有解决。网上说这是SQL Server的一个bug,需要通过如下命令来删除发布:
EXEC sp_removedbreplication 数据库名称
最后通过执行语句进行收缩。因为是从库,不需要复制、备份等操作,所以可以将恢复模式改成简单日志模式,如果是主库,建议备份日志后进行收缩。
USE [数据库名称]
GO
ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT
GO
DBCC SHRINKFILE (N'数据库名称_log' , 400, TRUNCATEONLY)
GO
DBCC SHRINKDATABASE(N'数据库名称' )
GO
ALTER DATABASE 数据库名称 SET RECOVERY full WITH NO_WAIT
GO
相关连接:
浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架
浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色
浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色
浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用
浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架
浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色
SQLServer日志无法收缩原因分析及解决的更多相关文章
- 一次接口压力测试qps极低原因分析及解决过程
一次接口压力测试qps极低原因分析及解决过程 9-2日在做内部的性能测试相关培训时,发现注册接口压力测试qps极低(20左右),这个性能指标远不能达到上线标准 ,经过一系列调试,最后定位 98%的时间 ...
- JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时 ...
- Code:Blocks 中文乱码问题原因分析和解决方法
下面说说修改的地方. 1.修改源文件保存编码在:settings->Editor->gernal settings 看到右边的Encoding group Box了吗?如下图所示: Use ...
- 【FAQ】接入HMS Core推送服务,服务端下发消息常见错误码原因分析及解决方法
HMS Core推送服务支持开发者使用HTTPS协议接入Push服务端,可以从服务器发送下行消息给终端设备.这篇文章汇总了服务端下发消息最常见的6个错误码,并提供了原因分析和解决方法,有遇到类似问题的 ...
- SQL Server 磁盘请求超时的833错误原因分析以及解决
本文出处:http://www.cnblogs.com/wy123/p/6984885.html 最近遇到一个SQL Server服务器响应极度缓慢,并且出现客户端请求报错的情况,在数据库中的erro ...
- MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DETER ...
- tomcat 内存溢出原因分析及解决
一.错误提示:java.lang.OutOfMemoryError: Java heap space [原因分析] tomcat默认可以使用内存为128MB,在较大型的应用项目中不足以满足运行要求,在 ...
- Mysql update后insert造成死锁原因分析及解决
系统中出现死锁的日志如下: ) TRANSACTION: , ACTIVE sec inserting mysql tables , locked LOCK WAIT lock struct(s), ...
- 【FAQ】应用内支付服务无法拉起支付页面常见原因分析和解决方法
华为应用内支付服务(In-App Purchases)通过简便的接入流程为用户提供良好的应用内支付体验,然而在实际接入过程中,有一些开发者反馈测试时会无法正常拉起支付页面,下文将详细分析问题出现的5种 ...
随机推荐
- iOS学习之NSPredictae及搜索框的实现
NSPredicate Predicate 即谓词逻辑, Cocoa框架中的NSPredicate用于查询,作用是从数据堆中根据条件进行筛选.计算谓词之后返回的结果永远为BOOL类型的值,当程序使用谓 ...
- Hadoop 如何查看是否32位
1.从哪些地方可以识别hadoop是32位还是64位?2.hadoop本地库在什么位置? hadoop在安装的时候,我们需要知道hadoop版本是32位还是64位. hadoop官网本来提供的都是32 ...
- javascript笔记7-事件
主要讲事件流.事件捕获.事件冒泡.事件处理程序.事件属性.事件类型.内存和优化等. 由于本文已经在微信订阅号上发布,为了防止原创性冲突检测,因此本文在此处已经删除. 详细请扫描订阅号二维码,查看历史信 ...
- linux命令:ln
1.命令介绍: nl用来显示文件的行号并打印出来. 2.命令格式: nl [选项] 文件 3.命令参数: -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类 ...
- CSS缩放函数, 旋转函数与倾斜函数
1 :缩放 scale(x,y)函数让元素根据中心原点对对象进行缩放,大于1进行放大,小于1则缩小,如果为负值,则先进行翻转再进行缩放操作. 实例: HTML: <div c ...
- samba 配置
sudo apt-get install samba sudo apt-get install kdenetwork-filesharing vi /etc/samba/smb.conf [Share ...
- C++ 中的形参与返回值
函数调用时,形参对象和返回对象均采用引用方式进行(临时对象作为中介),当一个对象作为参数(非引用)被函数调用时,该对象会通过复制构造函数获得一个临时对象,该临时对象以引用方式传递给函数,简言之,函数会 ...
- jq 文字上下不间断滚动实例
<div class="ruzhuright"> <div class="rzcontent"> ...
- ✡ leetcode 167. Two Sum II - Input array is sorted 求两数相加等于一个数的位置 --------- java
Given an array of integers that is already sorted in ascending order, find two numbers such that the ...
- IAR for msp430 MDK中 warning: #223-D: function "xxx" declared implicitly 解决方法
今天在EINT的范例里添加了一个函数,即eint.c中添加了一个datawrite()的函数,并在主函数main.c中调用,编译便警告 warning: #223-D: function " ...