Automatic Truncation of Virtual Log Files(VLFs的自动截断)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介:

sql server会在一下三种情况下认为你不需要维护日志备份:

  • 使用BACKUP LOG WITH NO_LOG 或者 BACKUP LOG WITH TRUNCATE_ONLY来进行日志备份
  • 简单恢复模式
  • 从来没有进行过完整备份

对于上述情况,数据库日志会在“足够满”的时候自动截断,以使VLFs重用。日志截断虽然是VLFs重用,但是不会收缩日志文件的大小。

复制代码
---实验:验证日志的自动截断与日志收缩-----------------------------
--新建pubs数据库
USE pubs
--step1:查看pubs数据库中的VLFs信息,第一个VLFs的FSeqNo=23,Status=0,其他都为0
DBCC LOGINFO

--step2:查看pubs数据库是不是出于自动截断模式,如果last_log_backup_lsn为null则表示自动截断模式 
SELECT last_log_backup_lsn
FROM master.sys.database_recovery_status
WHERE database_id = db_id('pubs')
GO

--step3:创建表
CREATE TABLE newtable (a int)
GO
INSERT INTO newtable VALUES (10)
INSERT INTO newtable VALUES (20)
INSERT INTO newtable VALUES (30)
GO
DECLARE @counter int
SET @counter = 1
WHILE @counter < 1000 BEGIN
    UPDATE newtable SET a = a + 1
    SET @counter = @counter + 1
END

--step4:再次查看VLFs信息,VLFs的顺序是27,24,25,26.Status的顺序是2,0,0,2
DBCC LOGINFO

--step5:备份数据库
--定义备份设备
EXEC sp_addumpdevice 'disk', 'PubsBackup', 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\pubs.bak';
--step6:备份到逻辑设备
BACKUP DATABASE pubs TO PubsBackup;

--step7:再次查看VLFs信息,发现Status顺序变成了2,0,0,0.表示VLFs被截断.
DBCC LOGINFO
  

--step8:查看pubs数据库是不是出于自动截断模式,如果last_log_backup_lsn为null则表示自动截断模式 
--此时的last_log_backup_lsn=27000000015900042,这个LSN就是备份操作的first lsn,也就是日志不再自动搜索
SELECT last_log_backup_lsn
FROM master.sys.database_recovery_status
WHERE database_id = db_id('pubs')
GO

--step9:再次执行更新操作,发现日志文件增长,从原来的1024kb增长到1536kb
DECLARE @counter int
SET @counter = 1
WHILE @counter < 1000 BEGIN
    UPDATE newtable SET a = a + 1
    SET @counter = @counter + 1
END

--step10:查看VLFs,我们发现新增了两个VLFs.
DBCC LOGINFO

------------------------------------
--在2005中shrink日志文件的操作,在2008及以后版本不支持
DBCC SHRINKDATABASE (pubs)
BACKUP LOG pubs WITH TRUNCATE_ONLY--在2008以后不支持了
----------------------------------

--step11:2008以后shrink文件方法,切换恢复模式,然后执行收缩.最后切换回来.
USE pubs;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE pubs
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.成功将日志文件从1536kb缩小到1024kb,并且只有一个VLFs的Status=2
DBCC SHRINKFILE (2, 1);  -- here 2 is the file ID for trasaction log file,you can also mention the log file name (pubs_log)
GO
-- Reset the database recovery model.
ALTER DATABASE pubs
SET RECOVERY FULL;
GO
--------------------------------------------
复制代码

在《inside sql server 2005: the storage engine》的“SIMPLE Recovery Model”章节提到一句话“In fact, as soon as you change you database to SIMPLE recovery model, the log will be truncated.”也就是一旦我们将数据库恢复模式修改成简单恢复模式,数据立刻截断日志。所以在我们上面的实验中,要收缩shrink日志,但是我们并没有进行截断truncate操作,其实截断操作已经隐含在切换数据库模式的那一步了。

还有在checkpoint的时候,数据库也会截断日志,截断的是MinLSN之前的VLFs。

 

本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/07/16/2594085.html,如需转载请自行联系原作者


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
10月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
2840 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
9月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
244 9
|
7月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
584 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
11月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
1029 3
|
6月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
462 13
|
6月前
|
缓存 Java 编译器
|
7月前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
255 5
图解MySQL【日志】——Redo Log
|
8月前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
319 7
MySQL事务日志-Undo Log工作原理分析
|
6月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
613 0
|
7月前
|
存储 关系型数据库 MySQL
图解MySQL【日志】——Undo Log
Undo Log(回滚日志)是 MySQL 中用于实现事务原子性和一致性的关键机制。在默认的自动提交模式下,MySQL 隐式开启事务,每条增删改语句都会记录到 Undo Log 中。其主要作用包括:
237 0