SQL server事务日志详解,示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

每个事务的开始和结束。 每次数据修改(插入、更新或删除)。这包 括系统存储过程或数据定义语言 (DDL) 语句对 包括系统表在内的任何表所做的更改。 每次分配或释放区和页。 创建或删除表或索引。
截断事务日志:截断是对SQL逻辑日志的一个 清除过程,清除非活动的逻辑事务日志
预写式日志(Write-Ahead Logging (WAL)) SQL Server使用了WAL来确保了事务的原子性和 持久性.实际上,不光是SQL Server,基本上主流的关 系数据库包括oracle,mysql,db2都使用了WAL技术. WAL的核心思想是:在数据写入到数据库之前,先 写入到日志.(如果没有WAL技术则每修改一条数 据都需要提交到磁盘,则磁盘的IO就大大增加了。 每次对于修改的数据只会写入到日志文件的逻辑 末端。而不像数据那样,可能会写到磁盘的各个 地方.所以,写入日志的开销会比写入数据的开 销小很多)
Lazy Writer存在的目的是对缓冲区进行管理。当缓冲区达 到某一临界值时,Lazy Writer会将缓冲区内的脏页存入磁 盘文件中,而将未修改的页释放并回收资源。 CheckPoint存在的意义是减少服务器的恢复时间(Recovery Time).CheckPoint就像他的名字指示的那样,是一个存档 点.CheckPoint会定期发生.来将缓冲区内的“脏”页写入磁盘。 但不像Lazy Writer,Checkpoint对SQL Server的内存管理毫无 兴趣。这里要注意的是:CheckPoint会将所有缓冲区的脏 页写入磁盘,不管脏页中的数据是否已经Commit。这意味 着有可能已经写入磁盘的“脏页”会在之后回滚(RollBack). 不过不用担心,如果数据回滚,SQL Server会将缓冲区内 的页再次修改,并写入磁盘。 所以CheckPoint也就意味着在这个点之前的所有修改都已 经保存到了磁盘
Ldf文件的大小 1M到64M 64M到1GB 大于1GB
Vlf文件的个数 4 8 16
指定数据库日志为最小值1M
现在把日志文件设成4M,那么按照虚拟日志 的增长公式就该增长4个虚拟日志4+4=8
所以指定合适的日志文件初始大小和增长, 是减少日志碎片最关键的部分
逻辑日志:感觉这个应该是数据库事务日志的真 实写照,物理日志文件好比是一个容器,里面容 纳的是日志记录,这些记录就称为逻辑日志,从 物理日志文件的起点开始,逻辑日志顺序的生成, 记录下数据库里发生的每个事务,这些事务被打 上一个标签,LSN,顺序的排列下来,这样逻辑 日志就在物理日志文件内慢慢的成长,直到充满 了他,这个时候物理日志文件就会自动添加新的 空间,以继续前面的步骤,这种情况是最直接的 一种(从来不截断日志,基本上就是这样的), 但事实上往往是复杂的多
当SQL Server把虚拟日志文件1和2作为可重用区域时,事务日志也相应被截断 (Truncate)。需要注意的是,物理日志大小也会随着变动。如果数据库运行在完 整或是批量日志恢复模型下,那么从LSN45到49之间的区域将被删除(delete), 而且直到事务日志被备份后,这段区域的空间才会被重用。 那么当更新的事务被创建时,又会发生什么呢?在简单模式下,日志的起始空 间将会被重用。
一.物理日志 二.虚拟日志 三.逻辑日志 四.截断事务日志
物理日志:这个比较好理解,实实在在的东 西,数据库目录下面的.ldf文件就是,可改后 缀,建议一般不要改,因为约定俗成的东西, 大家看着也习惯,数据库的事务日志记录就 在这里面
虚拟日志:对于一个或多个连续的物理日志文件, SQL SERVER在这些文件的内部又划分成了多个小 的文件,称为虚拟日志文件,他是日志文件收缩 和日志截断的最小单位,比如物理日志文件是 400M,内部划分了4个100M的虚拟文件,收缩 时你得到的是300M,200M,不可能得到239M, 对于一个物理文件,会划分成多少个虚拟文件, 这个由SQL自己维护,唯一可以人工干预的是指 定较大的物理日志文件,并指定较大的增长比例, 这样可能虚拟文件的块头会大点,数量会少点, 系统的维护开销会低一点
当针对数据库对象所做的任何修改保存到数 据库之前,相应的日志首先会被记录到日志 文件。这个记录会被按照先后顺序记录到日 志文件的逻辑末尾,并分配一个全局唯一的 日志序列号(log sequence number,简称LSN), 这个序列号完全是按照顺序来的,如果日志 中两个序列号LSN2>LSN1,则说明LSN2所在 LSN1之后发生的.
在完整或是批量日志恢复模型下,事务日志的空间则会被扩展
SQL Server修改数据的步骤 SQL Server对于数据的修改,会分为以下几个步骤顺序 执行: 1.在SQL Server的缓冲区的日志中写入”Begin Tran”记录 2.在SQL Server的缓冲区的日志页写入要修改的信息 3.在SQL Server的缓冲区将要修改的数据写入数据页 4.在SQL Server的缓冲区的日志中写入”Commit”记录 5.将缓冲区的日志写入日志文件 6.发送确认信息(ACK)到客户端(SMSS,ODBC等) 可以看到,事务日志并不是一步步写入磁盘.而是首先 写入缓冲区后,一次性写入日志到磁盘.这样既能在日 志写入磁盘这块减少IO,还能保证日志LSN的顺序.
那么当CheckPoint被执行时:所有有变化的数据写到数据 文件中,然后创建一个检查点记录(CheckPoint record)。
现在,由事务1,2,3所导致的变化将会被写到数据文件 中。因为事务3没有被提交,所以活动区间日志的范变 成了从LSN50到LSN52之间。如果使用简单恢复模型的话, 那么LSN45到LSN49之间区域可以被重用,因为那些记录已 经不再需要了。
相关文档
最新文档