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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

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,如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
安全 Linux 网络安全
/var/log/secure日志详解
Linux系统的 `/var/log/secure` 文件记录安全相关消息,包括身份验证和授权尝试。它涵盖用户登录(成功或失败)、`sudo` 使用、账户锁定解锁及其他安全事件和PAM错误。例如,SSH登录成功会显示&quot;Accepted password&quot;,失败则显示&quot;Failed password&quot;。查看此文件可使用 `tail -f /var/log/secure`,但通常只有root用户有权访问。
108 4
|
1月前
|
运维 监控 数据可视化
日志服务 HarmonyOS NEXT 日志采集最佳实践
鸿蒙操作系统(HarmonyOS)上的日志服务(SLS)SDK 提供了针对 IoT、移动端到服务端的全场景日志采集、处理和分析能力,旨在满足万物互联时代下应用的多元化设备接入、高效协同和安全可靠运行的需求。
116780 10
|
1月前
|
监控 Linux 网络安全
/var/log/auth.log日志说明
`/var/log/auth.log`是Linux系统记录身份验证和授权事件的日志文件,包括登录尝试、SSH连接、sudo操作等。系统管理员可通过它监控用户登录、检查失败尝试、跟踪SSH活动、查看sudo/su操作及PAM活动。日志内容可能因系统配置而异,可能存在于其他日志文件中。分析这些日志可使用`tail`、`grep`等命令或专用日志分析工具。了解系统和其服务详情有助于提取有用信息。
53 2
|
1月前
|
安全 Ubuntu Unix
/var/log/syslog日志说明
`/var/log/syslog`是Unix和Linux的日志文件,记录系统事件和消息,由`syslogd`或`rsyslogd`生成。日志条目含时间戳、主机名、PID、日志级别(如DEBUG、ERROR)和事件描述。内容涵盖系统启动/关闭、硬件错误、网络、用户登录、安全事件等。查看日志可使用`cat`、`tail`、`less`或`grep`命令。不过,不同Linux发行版可能有变,如Ubuntu使用`journald`和`journalctl`。
58 3
|
1月前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
254 1
|
4天前
|
C++
JNI Log 日志输出
JNI Log 日志输出
12 1
|
4天前
|
存储 运维 大数据
聊聊日志硬扫描,阿里 Log Scan 的设计与实践
泛日志(Log/Trace/Metric)是大数据的重要组成,伴随着每一年业务峰值的新脉冲,日志数据量在快速增长。同时,业务数字化运营、软件可观测性等浪潮又在对日志的存储、计算提出更高的要求。
|
11天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。
|
11天前
|
运维 监控 Go
Golang深入浅出之-Go语言中的日志记录:log与logrus库
【4月更文挑战第27天】本文比较了Go语言中标准库`log`与第三方库`logrus`的日志功能。`log`简单但不支持日志级别配置和多样化格式,而`logrus`提供更丰富的功能,如日志级别控制、自定义格式和钩子。文章指出了使用`logrus`时可能遇到的问题,如全局logger滥用、日志级别设置不当和过度依赖字段,并给出了避免错误的建议,强调理解日志级别、合理利用结构化日志、模块化日志管理和定期审查日志配置的重要性。通过这些实践,开发者能提高应用监控和故障排查能力。
87 1
|
12天前
|
弹性计算 运维 Shell