`
zzc1684
  • 浏览: 1229026 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

虚拟日志文件剖析(转)

阅读更多

每 一个数据库至少有一个日志文件,无论为事务日志定义多个少物理文件,SQL Server均视为一个连续的文件。该事务日志文件实际上由一系列的虚拟日志文件VLF来管理。虚拟日志文件的大小由SQL Server的总日志文件的大小决定。虚拟日志文件的物理结构图如下所示:

当该日志文件收缩时,日志文件末端的未使用的VLF可以被删除。

在SQL server2000中,日志文件仅可以从日志文件的尾部收缩,但是微软已经纠正先前在SQL server 7.0中的问题,当你备份或截断日志时,SQL Server会自动将日志的活动部分转移到文件的始端,然后你运行DBCC SHRINKFILE或DBCC SHRINKDATABASE命令来释放未使用的空间。

如果要判断日志文件中有多少个虚拟日志文件,并且哪些虚拟日志文件是活动的,可以使用未归档命令DBCC命令:DBCC LOGINFO,其语法如下:

DBCC LOGINFO [ ( dbname ) ]

下面我们来通过一个示例来介绍DBCC LOGINFO的用法,同时查看日志收缩与截断的工作原理与实现机制。

首先,创建一个测试数据库,脚本如下:

USE MASTER;

GO

CREATE DATABASE logtest

GO

ALTER DATABASE logtest SET recovery FULL

GO

USE logtest;

GO

DBCC loginfo;
GO

从图中可以知道,活动的虚拟日志文件的状态(status)为2,logtest数据库有两个虚拟日志文件,当前仅有一个虚拟日志文件是活动的,现在创建一个表,然后填充一些行,以产生一些日志再查看日志的变化情况。

SELECT TOP 10000 * INTO bigOrderHeader

FROM AdventureWorks.Sales.SalesOrderHeader

GO

DBCC loginfo
GO

此时你将看到日志文件中有12个虚拟日志文件,并且它们都是活动的(状态都为2),现在,收缩日志然后再查看有什么变化?

DBCC SHRINKFILE (logtest_log)
DBCC LOGINFO
GO

由于未对数据库进行备份,仍没有活动事务,SQL Server将认为你不需要保留日志的不活动部分,就将其删除。现在对数据库进行备份。

BACKUP DATABASE logtest

TO DISK = 'f:\logtest.bak'
GO
已为数据库'logtest',文件'logtest' (位于文件1 上)处理了440 页。

已为数据库'logtest',文件'logtest_log' (位于文件1 上)处理了2 页。

BACKUP DATABASE 成功处理了442 页,花费0.851 秒(4.246 MB/秒)。

现在再运行一些日志记录,重新检查日志的变化情况:

SET ROWCOUNT 1000

GO

BEGIN TRAN

DELETE bigOrderHeader

ROLLBACK TRAN

GO

SET ROWCOUNT 0

GO

DBCC loginfo

GO

从上图注意到,现在有3个标记为2的活动事务,然后收缩该日志:

DBCC shrinkfile ( logtest_log)

GO

无法收缩日志文件2 (logtest_log),因为所有的逻辑日志文件都在使用中。

(1 行受影响)

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

从输出信息知道,该文件的上一个虚拟日志文件仍旧是活动的,因此发生了失败,SQL Server不能从文件的末端进行收缩,接着我们执行另一个事务,让日志继续增长:

SET ROWCOUNT 5000
GO
BEGIN TRAN
DELETE bigOrderHeader
ROLLBACK TRAN
GO
SET ROWCOUNT 0
GO
DBCC loginfo
GO

此时的日志也不能进行收缩,原因在于标记的虚拟日志用于还原操作,只有该日志做了备份或截断,其空间才可以被释放。

BACKUP LOG logtest WITH TRUNCATE_only

DBCC loginfo

GO

现在作了标记的虚拟日志将不再需要(日志记录要么是截断的要么是已经备份至磁盘),日志文件可以进行收缩。

DBCC shrinkfile (logtest_log)

DBCC loginfo

GO

(1 行受影响)

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

(2 行受影响)

DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。

分享到:
评论

相关推荐

    基于大数据 Spark SQL的日志分析 视频教程 虚拟主机 和 data文件

    日志分析是指对系统或应用程序产生的各种日志文件进行收集、处理和分析的过程,目的是为了监控系统的运行状态、发现潜在问题并优化性能。随着大数据技术的发展,传统的日志分析方法已经无法满足现代企业的需要。借助...

    浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 .docx

    事务日志的物理结构主要由虚拟日志文件(Virtual Log Files, VLFs)组成,这些文件是日志文件的逻辑划分,有助于更有效地管理和利用存储空间。在创建数据库时,SQL Server会根据日志文件的大小自动确定VLF的数量和...

    labview操作logger,日志记录

    9. **数据解析和导入**:如果你的日志文件格式规范,其他程序(如Excel、Python等)可以方便地导入和分析这些数据。 10. **配置选项**:允许用户通过配置文件或程序界面调整日志设置,如日志路径、日志级别和是否...

    日志服务分析系统c++编程

    配置文件通常包含系统运行所需的各种参数,例如日志文件的位置、日志级别(如DEBUG、INFO、WARNING、ERROR)、日志格式等。C++提供了多种方式来读取配置文件,如标准库中的fstream类可以用于读取文本文件,而Boost库...

    行业文档-设计装置-一种基于日志文件写入外挂NAS实现虚拟化计算部署的新方法.zip

    标题中的“行业文档-设计装置-一种基于日志文件写入外挂NAS实现虚拟化计算部署的新方法”表明,这份文档主要关注的是在IT行业中,如何利用日志文件的写入功能,结合外部网络附加存储(Network Attached Storage,...

    SQL Server无法收缩日志文件的原因分析及解决办法

    其次,VLF(虚拟日志文件)过多也可能阻碍日志文件的收缩。VLF是日志文件内部的逻辑分区,过多的VLF会影响日志的管理效率。当VLF数量过多时,可以使用DBCC LOGINFO命令来查看当前的VLF状态。如果发现VLF数量异常,...

    shell脚本自动监测系统cpu资源,异常彪高时,自动打印应用线程日志文件

    5. 将线程转储信息输出到日志文件,如`check_info.log`,以便后续分析。 此外,还有其他脚本如`start.sh`、`stop.sh`和`clearLogFile.sh`,它们分别用于启动应用、停止应用和清理日志文件。`start.sh`可能包含启动...

    分析iis日志了解蜘蛛爬行抓取网站习性

    - **日志文件大小**:单个日志文件过大可能导致处理和分析变得复杂甚至无法完成。因此,合理设置日志生成频率有助于保持日志文件的大小适中。 - **日志格式**:确保日志采用易于阅读和分析的格式。常见的日志格式...

    apache日志分析系统awStats完全教材

    然而,直接阅读和分析这些原始日志文件是一项耗时且复杂的任务。这时,awStats作为一个强大的开源日志分析工具,便应运而生。 awStats能够自动分析并生成详尽的统计报告,包括访问量、访客来源、搜索引擎关键词、...

    常见的web服务器日志切割方法

    为了进一步增强安全性,可以为存储日志文件的虚拟目录设置IP访问限制。这样只有经过白名单认证的IP地址才能访问这些文件。 #### IIS7服务器 **1. 日志文件切割** IIS7提供了更为灵活的日志管理选项,包括自动...

    基于hadoop对某网站日志分析部署实践课程设计报告参考模板.doc

    - 源数据文件准备:下载日志文件并将其复制到Hadoop虚拟机,使用hdfs命令将文件上传到HDFS,创建对应目录并确保文件正确无误。 - Python MapReduce脚本开发:编写mapper和reducer程序,用于清洗日志数据,提取关键...

    ASLOG自动日志分析系统 v3.2

    如果是日志文件,它可能用于演示ASLOG如何分析和解读服务器日志,帮助用户理解其工作原理和分析结果。 总的来说,ASLOG自动日志分析系统 v3.2 是一款强大的服务器管理工具,它通过自动化分析和报告生成,提升了IIS...

    vc++键盘钩子记录键盘输入记录,存为日志文件.zip_怎样删除日志文件

    在这里,处理函数会读取键盘事件的详细信息,如虚拟键码(VK_CODE),并根据需求写入日志文件。同时,为了防止无限递归和不必要的性能消耗,钩子函数需要谨慎处理自身的键盘输入。 关于如何删除日志文件,C++同样...

    conpot虚拟工控蜜罐日志文件

    这是一个真实搭建的conpot工控蜜罐所捕获的真实异常网络会话,可用于挖掘 Conpot是一个部署在服务端的低交互ICS蜜罐,能够快速地部署、修改和拓展。开发者通过提供一系列的通用工控协议,使得我们能够非常快速地在...

    用户在基站停留信息日志文件

    【用户在基站停留信息日志文件】是一种常见的大数据分析场景,尤其在移动通信领域,用于研究用户的行为模式、网络优化及服务提供等。这类日志记录了用户在不同基站(Location Area Code,简称LAC)的活动,包含了...

    awstats分析网站日志

    AWStats网站日志分析 AWStats是一款功能强大的日志分析工具,可以对网站的日志进行分析,并以网页的方式查看自己网站的流量PV等数据。下面是使用AWStats对网站日志进行分析的详细知识点: 一、AWStats安装 首先,...

    apache虚拟主机访问日志配置例子.docx

    4. `cronolog`或`rotatelogs`工具用于日志文件的滚动,确保日志文件不会无限增长,同时便于归档和分析。 在Windows系统中,配置方式类似,但使用的是`rotatelogs.exe`,例如: ``` ErrorLog "|bin/rotatelogs.exe ...

    Linux 文件系统剖析

    ### Linux 文件系统剖析 #### 一、引言 在当今高度发展的信息技术领域中,Linux操作系统以其卓越的灵活性和强大的功能而著称。特别是在文件系统管理方面,Linux展现出了极高的适应性和扩展性,能够支持多种多样的...

Global site tag (gtag.js) - Google Analytics