由于日志是顺序写入,而修改数据分散在数据库各个页面,属于随机写入,而磁盘顺序写入速度远高于随机写入,因此主流数据库都采用预写日志的方式来确保数据完整性

1.日志记录的是数据的变化而不是引发数据的操作
2.每条记录都有唯一的编号:LSN,并且记录了它属于的事务号。
3.日志记录的行数和实际修改的数据量有关
4.日志记录了事务发生的时间,但不记录发起者的程序名称和客户端信息
5.日志记录数据修改前和修改后的数据

虚拟日志文件的状态:
1.活动(ACTIVE),在VLF上有任一条LSN是活动的
2.可恢复(RECOVERABLE),VLF上的LSN不活动的,但尚未被截断(truncated),该片区域的日志将可能被用于备份/镜像/复制等
3.可重用(REUSED),VLF上无活动的LSN,且已经被截断,该空间可以被再次使用
4.未使用(UNUSED),VLF是不活动的,且空间从未被使用过

(PS: DBCC LOGINFO 中Status=0表示可重用或未使用,Status=2表示活动或可恢复)

数据增长大小与VLF增长数量
1-64M:4个VLF
64M-1G:8个VLF
1G以上:16个VLF

截断(Truncated)是将VLF从Recoberable 状态转变成 reused 状态

In sample recovery model,Every checkpiont will check is there any vlf could be truncated, truncated the recoverable lsn and move the min lsn

在简单恢复模式下,日志仅用于事务回滚和数据库崩溃时的恢复。

在完整恢复模式下,只有经过日志备份过的日志才可以被截断

从完整恢复模式切换到大容量日志恢复模式并不会破坏日志链条,因此可以在可能产生大量日志的操作(SELECT INTO/INSERT INTO SELECT /REBUILD INDEX/CREATE INDEX)等之前将恢复模式转换成大容量日志模式,操作结束后在换回完整模式,这样不会破坏现在的备份策略同时有效避免此操作生成大量日志和日志文件急速增长

引发Log 读的操作

1. Transcation rollback
2. crash recovery
3. create a database snapshot
4. running dbcc checkdb
5. transaction log backup
6. database full backup or differential backup
7. transcation replication
8. change data capture
9. database mirroring
10. a checkpoint in the simple recovery mode
11. processing a DML trigger(on sql server 2000)
12. manually looking in the log(dbcc log or fn_log)

由于单个事务会产生多天事务日志记录,如果每条事务日志记录都写一次磁盘,会造成严重的瓶颈,并且严重延迟事务执行时间,因此SQL SERVER 将事务日志先存放在Log Buffer中,在满足以下条件时将日志记录写入磁盘:
1>事务提交或回滚
2>有超过60KB的日志没有刷新写入磁盘

在log flush时,会将log buffer中所有日志记录都写入磁盘,无论该日志所属的事务是否提交。

由于每个事务提交或回滚都会造成一次log flush,每次事务提交需等待日志被写入磁盘才算成功,因此日志写入磁盘延迟直接影响事务的执行时间。

SQL SERVER限制log flush的并发数最大为32,因此,在同一时间点,只能有32个事务被提交

解决日志写等待的问题
1>减少日志的写入量
2>提高事务日志的写入速度

提高事务日志的写入速度
1>如果日志所在磁盘较慢,可以将日志移动到较快的磁盘上
2>如果日志所在磁盘已经足够快的情况下,有大量并发的小事务操作,可拆分为多个数据库来解决

Log--事务日志的更多相关文章

  1. HA_Ship Transcation Log 事务日志传送

    环境准备: 虚拟机3台,INTER-DC, INTER-SQLA, INTER-SQLB 创建域帐户 INTER\MSSQLSERVER.SERVICE,INTER\AGENT.SERVICE,分别添 ...

  2. 详细分析MySQL事务日志(redo log和undo log)

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  3. 【MySQL (六) | 详细分析MySQL事务日志redo log】

    Reference:  https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html 引言 为了最大程度避免数据写入时 IO ...

  4. 详细分析MySQL事务日志(redo log和undo log) 表明了为何mysql不会丢数据

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  5. InnoDB事务日志(redo log 和 undo log)详解

    数据库通常借助日志来实现事务,常见的有undo log.redo log,undo/redo log都能保证事务特性,undolog实现事务原子性,redolog实现事务的持久性. 为了最大程度避免数 ...

  6. 详细分析MySQL事务日志(undo log)

    2.undo log 2.1 基本概念 undo log有两个作用:提供回滚和多个行版本控制(MVCC). 在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败 ...

  7. SQL0946N错误及DB2事务日志

    在对DB2数据库进行批量增删的时候, 如果数据量比较大会导致SQL0964N错误, DB2 Knowledge center(http://pic.dhe.ibm.com/infocenter/db2 ...

  8. 事务日志以及虚拟日志文件(VLFs)概述

    Part 1:事务日志 每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改.必须定期截断事务日志以避免它被填满.但是,一些因素可能延迟日志截断,因此监视日 ...

  9. sqlserver 事务日志过大 收缩方法解决方案

    sqlserver 事务日志过大,可能会导致备份失败或者数据库出现异常,所以要定期清除sqlserver 事务日志 建议:为了防止日志文件无限扩大,可以对日志文件作一些限制. 清除sqlserver事 ...

  10. ZooKeeper事务日志记录器SyncRequestProcessor

    SyncRequestProcessor作为一个ZooKeeper中的一个关键线程(ZooKeeperCriticalThread),是ZooKeeper请求处理链中的事务日志记录处理器,其主要用来将 ...

随机推荐

  1. Jenkins的用户管理

    用户管理入口 Jenkins首页有一个用户,但是只能从那查看用户列表和信息,管理用户的入口在Jenkins->系统管理->管理用户 新建用户 在管理用户左侧有一个新增用户,点击后按照表单填 ...

  2. cvc-complex-type.2.4.a: Invalid content was found starting with element 'async-supported'

    <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springfr ...

  3. git问题记录

    1.从远程仓库拉取A文件,在本地删掉了这个A文件,然后再去拉取远程仓库,是拉不下来的,因为本地版本库比远程库的高 我觉得是第一次远程的版本已经拉取了,本地已记录,远程程没有发生变化,在拉取和先前的一致 ...

  4. selenium 定位元素可以用多个findElement

    selenium 定位元素可以用多个findElement,如driver.findElement(By.id"XXX").findElement(By.linkText(XXX) ...

  5. 杂项-公司:联邦快递百科-un

    ylbtech-杂项-公司:联邦快递百科 联邦快递( FedEx)是一家国际性速递集团,提供隔夜快递.地面快递.重型货物运送.文件复印及物流服务,总部设于美国田纳西州,隶属于美国联邦快递集团(FedE ...

  6. JSON数据的解析方法

    1.JSON.parse(json) 2.new Function(“return ” + json) (); 3.eval(“(”+json+”)”)

  7. mongoDB的了解

    一.什么是mongoDB? 1.MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. 2.MongoDB 旨在为WEB ...

  8. http协议Keep-Alive

    Keep-Alive 是什么? 概观 默认情况下,HTTP链接通常在请求完成之后关闭.这意味着服务端在完成响应的交付之后便关闭了TCP链接.为了让链接保持打开,来满足多请求,可以使用keep-aliv ...

  9. http://www.jb51.net/list/list_233_2.htm(导航: 首页 >> 软件编程 >> Android)

      日期:2015-04-24理解Android中Activity的方法回调 日期:2015-04-24Android获取手机通讯录.sim卡联系人及调用拨号界面方法 日期:2015-04-24And ...

  10. 去掉字符串中的html标签

    public static string removeHtml(string html) { System.Text.RegularExpressions.Regex regex1 = new Sys ...