您的位置:首页 > 数据库

Sql Server 事务日志(二)

2015-07-02 23:28 260 查看
Sql Server在将每次更新写入到数据文件之前,会先顺序的将更改 写入到日志文件。这种技术应用到很多种类的数据库上,这种预先写入日志的技术,称之为WAL(write ahead logging)。

由于每次数据修改都会被写到事务日志中,所以,在数据库崩溃自动恢复时,已经完成提交的事务会被Redo,而未提交的事务会RollBack。

对于一个事务来说,他是在何时写入到日志文件呢。对于任何数据修改,都是在数据缓存中进行的,缓存中的数据被修改之前,将在记录修改的日志高速缓存中生成一条记录,然后修改缓存中的数据页,若事务被提交,则日志会写到磁盘。在此,需要注意的一点是,如果一个事务比较大,则可能出现即使事务未提交,日志也被写入到磁盘的情况。所以,日志告诉缓存中的记录在以下两种情况下会写入磁盘:

1. 事务提交时;

2. 有超过60KB的日志没有刷新写入磁盘;

则日志记录写入日志文件的大致流程示意图如下:



sql server 数据修改分步骤来说如下 :

1. SQL Server 在日志缓存中写入Begin Tran 记录

2. 在日志缓存中写入要修改的信息

3. 修改缓存中的数据页;

4. 日志缓存中记录Commit

5. 将日志缓存刷新到磁盘

6. 返回给客户端事务执行成功。

需要注意的是,每次事务提交都会造成日志刷新,且只有等待日志刷新到磁盘后,事务才算提交成功,因此,日志文件所在磁盘的延迟会直接影响到事务的执行时间。

数据修改被写入日志文件之后,数据是如何写入数据文件呢,SQL Server通过 CheckPoint 和 Lazy writer两个存储过程将缓存中的数据页写入数据文件。

上面提及到,事务在提交时,只是日志高速缓存中的记录写入到日志文件,数据缓存中的数据页并没有写入到数据文件



做CheckPoint 或 Lazy Writer后,数据缓存写入磁盘



CheckPoint和Lazy Writer 区别

首先,两者都可将数据缓存中的“脏”页写入数据文件。

Lazy Writer 的主要作用是对缓存区进行管理,并管理缓存区可用资源列表,CheckPoint不会;

CheckPoint 的触发条件

1.自上次检查点后产生大量日志

2.数据库实例关闭

3.数据库完备或差异备份

Lazy writer触发条件

1.缓存数据页不足

2.windows 系统存在内存压力
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: