事务日志以及虚拟日志文件(VLFs)概述
Part 1:事务日志
每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改。必须定期截断事务日志以避免它被填满。但是,一些因素可能延迟日志截断,因此监视日志大小很重要。某些操作可以最小日志量进行记录以减少其对事务日志大小的影响。事务日志是数据库的重要组件,如果系统出现故障,则可能需要使用事务日志将数据库恢复到一致状态。删除或移动事务日志以前,必须完全了解此操作带来的后果。
例如,当用户发出一个插入操作(INSERT),它被会被记录在事务日志中。如果出现了错误,数据库可以回滚或还原事务之前的状态,并防止数据损坏。再比如,一个员工需要将2000条数据插入到数据库中,这时候突然间服务器断电。由于insert语句已经写入了事务日志并且知道了出现了错误,它将会回滚这次操作。如果没有这个功能,你可以想象我们需要数据筛选看到底成功插入了多少行,然后再更改其他行的代码执行其他操作。 更有甚者,如果是随机插入,你必须确定已经插入了什么数据,什么数据需要被排除在外。这可能需要非常非常长的时间。
日志条目是顺序的记录在文件中。整个日志文件会被分成很多小块称之为虚拟日志文件 。当一个虚拟日志文件被填满的时候,他会自动地去插入到下一个虚拟日志文件。当虚拟日志文件已经到整个日志文件的末尾的时候,他将会绕回到开始的虚拟日志文件并且覆盖掉之前的数据。
借用别人的图。操作如下图所示:
Part 2:虚拟日志文件
每个物理的事务日志文件内部分为多个虚拟日志文件,如上图的(virtual log 1-4)。在物理日志文件中没有指定虚拟日志文件大小也不能指定到底要存在多少个虚拟日志文件。数据库引擎会自动的控制它们,但出于性能原因,数据库引擎会试图维持少量的虚拟文件个数。
如果日志文件开始设置的比较小,然后设置的增长率或大小也比较小。在日志文件不断增大的过程中,每次都是按许多微小增加,它将增加虚拟日志文件的数量,而影响系统性能。这就是为什么要将自动增长设置为一个较大的增量。如果日志设置一次增长 1 MB 会不断产生更多的虚拟日志文件中。不断增加的虚拟日志文件会影响数据库启动和日志的备份/恢复操作。
在一个数据库中没有一个正确或者是错误的虚拟日志文件个数的界定。但是记住,如果你的数据库性能变的很糟糕,这可能是一个原因。您可以使用 DBCC LOGINFO 数据库中检查 VLF 的数目。
DBCC LOGINFO
结果:
关于大量的虚拟日志文件影响性能的问题,会在数据库调优系列中做详细的介绍。
事务日志以及虚拟日志文件(VLFs)概述的更多相关文章
- DBCC SHRINKFILE收缩日志/收缩数据库/收缩文件
DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKFILE ( { file_name | file_id } { [ ,t ...
- Apache日志不记录图片文件设置方法和来源日志的配置
Apache日志不记录图片文件设置方法 <FilesMatch "\.(ico|gif|jpg|swf)">SetEnv IMAG 1</FilesMatch&g ...
- mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)
一. mysql错误日志:错误日志记录的事件:a).服务器启动关闭过程中的信息b).服务器运行过程中的错误信息c).事件调试器运行一个事件时间生的信息d).在从服务器上启动从服务器进程时产生的信息lo ...
- zookeeper 事务日志与快照日志
zookeeper日志各类日志简介 zookeeper服务器会产生三类日志:事务日志.快照日志和log4j日志. 在zookeeper默认配置文件zoo.cfg(可以修改文件名)中有一个配置项data ...
- 使用SVN钩子强制提交日志和限制提交文件类型
Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...
- mysql事务、redo日志、undo日志、checkpoint详解
转载: https://zhuanlan.zhihu.com/p/34650908 事务: 说起mysql innodb存储引擎的事务,首先想到就是ACID(不知道的请google),数据库是如何做到 ...
- Linux centosVMware Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间
一.Nginx访问日志 vim /usr/local/nginx/conf/nginx.conf //搜索log_format 日至格式 改为davery格式 $remote_addr 客户端IP ...
- Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间
一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...
- mysql基础之日志管理(查询日志、慢查询日志、错误日志、二进制日志、中继日志、事务日志)
日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 ,事务日志. 修改配置或者想要使配置永久生效需将内容写入配置文 ...
随机推荐
- PRINCE2
首先要说的是,我这篇体会是针对一定的背景的,不能算是一种通用的管理方式,只能是我自己的经验总结,能给大家平常的管理提供一点思路,我就很满足了.先说说背景,我所在公司做的是大型桌面应用软件,简单点说就是 ...
- 基于Emgu CV的人脸检测代码
这个提供的代码例子是Emgu CV提供的源码里面自带的例子,很好用,基本不需要改,代码做的是人脸检测不是人脸识别,这个要分清楚.再就是新版本的Emgu CV可能会遇到系统32位和64位处理方式有区别的 ...
- 【USACO 2.3】Cow Pedigrees(DP)
问n个结点深度为k且只有度为2或0的二叉树有多少种. dp[i][j]=dp[lk][ln]*dp[rk][j-1-ln],max(lk,rk)=i-1. http://train.usaco.org ...
- 解决Unable to create new native thread
两种类型的Out of Memory java.lang.OutOfMemoryError: Java heap space error 当JVM尝试在堆中分配对象,堆中空间不足时抛出.一般通过设定J ...
- map、Array工具类,来源于东宏软件
//===================================================================================package org.jxs ...
- 移动端浏览器和微信浏览器上禁止body的滚动条
一般禁止body滚动的做法就是设置overflow:hidden. 但是很奇怪的发现在移动端浏览器和微信浏览器上这个不起作用,然后我分析了我的写法,就是在body上加了一个class去定义属性,然后改 ...
- markdown测试
测试 1.第一点 这一点 代码块 @requires_authorization def somefunc(param1='', param2=0): '''A docstring''' if par ...
- (转载)Sumblime Text 2 常用插件以及安装方法
[内容提要]使用Package Control组件在线安装更方便 安装Sublime Text 2插件的方法: 1.直接安装 安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Pa ...
- Node.js process 模块常用属性和方法
Node.js是常用的Javascript运行环境,本文和大家发分享的主要是Node.js中process 模块的常用属性和方法,希望通过本文的分享,对大家学习Node.js http://www.m ...
- 面试题目——《CC150》线程与锁
package cc150.thread_lock; public class RunnableThreadExample implements Runnable{ public int count ...