Part 1:事务日志

每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改。必须定期截断事务日志以避免它被填满。但是,一些因素可能延迟日志截断,因此监视日志大小很重要。某些操作可以最小日志量进行记录以减少其对事务日志大小的影响。事务日志是数据库的重要组件,如果系统出现故障,则可能需要使用事务日志将数据库恢复到一致状态。删除或移动事务日志以前,必须完全了解此操作带来的后果。

例如,当用户发出一个插入操作(INSERT),它被会被记录在事务日志中。如果出现了错误,数据库可以回滚或还原事务之前的状态,并防止数据损坏。再比如,一个员工需要将2000条数据插入到数据库中,这时候突然间服务器断电。由于insert语句已经写入了事务日志并且知道了出现了错误,它将会回滚这次操作。如果没有这个功能,你可以想象我们需要数据筛选看到底成功插入了多少行,然后再更改其他行的代码执行其他操作。 更有甚者,如果是随机插入,你必须确定已经插入了什么数据,什么数据需要被排除在外。这可能需要非常非常长的时间。

日志条目是顺序的记录在文件中。整个日志文件会被分成很多小块称之为虚拟日志文件 。当一个虚拟日志文件被填满的时候,他会自动地去插入到下一个虚拟日志文件。当虚拟日志文件已经到整个日志文件的末尾的时候,他将会绕回到开始的虚拟日志文件并且覆盖掉之前的数据。

借用别人的图。操作如下图所示:

Part 2:虚拟日志文件

每个物理的事务日志文件内部分为多个虚拟日志文件,如上图的(virtual log 1-4)。在物理日志文件中没有指定虚拟日志文件大小也不能指定到底要存在多少个虚拟日志文件。数据库引擎会自动的控制它们,但出于性能原因,数据库引擎会试图维持少量的虚拟文件个数。

如果日志文件开始设置的比较小,然后设置的增长率或大小也比较小。在日志文件不断增大的过程中,每次都是按许多微小增加,它将增加虚拟日志文件的数量,而影响系统性能。这就是为什么要将自动增长设置为一个较大的增量。如果日志设置一次增长 1 MB 会不断产生更多的虚拟日志文件中。不断增加的虚拟日志文件会影响数据库启动和日志的备份/恢复操作。

在一个数据库中没有一个正确或者是错误的虚拟日志文件个数的界定。但是记住,如果你的数据库性能变的很糟糕,这可能是一个原因。您可以使用 DBCC LOGINFO 数据库中检查 VLF 的数目。

DBCC LOGINFO

结果:

关于大量的虚拟日志文件影响性能的问题,会在数据库调优系列中做详细的介绍。

事务日志以及虚拟日志文件(VLFs)概述的更多相关文章

  1. DBCC SHRINKFILE收缩日志/收缩数据库/收缩文件

    DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKFILE    ( { file_name | file_id }        { [ ,t ...

  2. Apache日志不记录图片文件设置方法和来源日志的配置

    Apache日志不记录图片文件设置方法 <FilesMatch "\.(ico|gif|jpg|swf)">SetEnv IMAG 1</FilesMatch&g ...

  3. mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)

    一. mysql错误日志:错误日志记录的事件:a).服务器启动关闭过程中的信息b).服务器运行过程中的错误信息c).事件调试器运行一个事件时间生的信息d).在从服务器上启动从服务器进程时产生的信息lo ...

  4. zookeeper 事务日志与快照日志

    zookeeper日志各类日志简介 zookeeper服务器会产生三类日志:事务日志.快照日志和log4j日志. 在zookeeper默认配置文件zoo.cfg(可以修改文件名)中有一个配置项data ...

  5. 使用SVN钩子强制提交日志和限制提交文件类型

    Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...

  6. mysql事务、redo日志、undo日志、checkpoint详解

    转载: https://zhuanlan.zhihu.com/p/34650908 事务: 说起mysql innodb存储引擎的事务,首先想到就是ACID(不知道的请google),数据库是如何做到 ...

  7. Linux centosVMware Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间

    一.Nginx访问日志 vim /usr/local/nginx/conf/nginx.conf //搜索log_format  日至格式 改为davery格式 $remote_addr  客户端IP ...

  8. Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间

    一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...

  9. mysql基础之日志管理(查询日志、慢查询日志、错误日志、二进制日志、中继日志、事务日志)

    日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 ,事务日志. 修改配置或者想要使配置永久生效需将内容写入配置文 ...

随机推荐

  1. [Think In Java]基础拾遗3 - 容器、I/O、NIO、序列化

    目录 第十一章 持有对象第十七章 容器深入研究第十八章 Java I/O系统 第十一章 持有对象 1. java容器概览 java容器的两种主要类型(它们之间的主要区别在于容器中每个“槽”保存的元素个 ...

  2. HttpClient 4.3 使用

    httpclient的api变化很快,本篇随笔记录自己使用4.3.6版本时所做的设置.版本虽然不是最新,但达到了目的就行. maven依赖: <dependency> <groupI ...

  3. 前后台获取上下文context

    1.web server端获取上下文:Context ctx = WafContext.getInstance().getContext();上下文中包含当前登录组织.当前登录用户.语种.数据库.客户 ...

  4. java 跨平台 数据类型 修饰符 程序结构

    java跨平台的实现: .java文件 ——编译(javac)——> 二进制字节码的.class文件 ——不同平台的虚拟机(JVM)——>对应硬件平台可执行的代码 java数据类型的划分: ...

  5. Examples of MIB Variables - SNMP Tutorial

    30.5 Examples of MIB Variables Versions 1 and 2 of SNMP each collected variables together in a singl ...

  6. 出现could not find developer disk image解决办法和不受信任的开发者

    真机测试问题 最近一直遇到这样的问题,很是让人心烦,但是还是要自己解决的,我也是从网上查了很多这样的解决办法,都没有成功,所以今天我要把自己的总结的方法和大家分享一下. iOS测试当中的问题 iOS ...

  7. Java创建对象的几种方法

    有时候,也可能碰到这样面试题,如: Java创建对象有哪几种方法? 除了new之外,java创建对象还有哪几种方式? 本文结合例子,给出几种Java创建对象的方法,Here we go~~~~ 使用n ...

  8. 工作中的一些JS--为网页动态添加元素,类似于邮箱添加联系人的功能

    项目中要解决一个为下拉框动态添加选项的问题,之前从网上搜到结果,写个JS函数 //先新建元素,并添加属性 var option = document.createElement("optio ...

  9. JAVA起名规范

    1:包名 package com.cenzhongman.模块名.组件 必须全部小写,作为java文件第一行代码 2:类名 名词,表示一类实物,如:人类 首字母大写 3.接口名 形容词/副词,表示一种 ...

  10. ImageView的常用属性

    ImageView的一些常用属性,并且这些属性都有与之对应的getter.setter方法: android:adjustViewBounds:设置ImageView是否调整自己的边界来保持所显示图片 ...