sqlserver数据库的日志文件其实是由很多个逻辑上的日志文件组成,我们可以通过命令看一下数据库日志文件

​可以看到的是sqlserver数据库日志文件是由很多文件组成的,当数据库日志文件已满的时候,自动增长就会生成新的文件,这些文件叫做VLF(虚拟日志文件),所以说在这个层面上来说,我们可以简单的把数据库日志理解为一列火车,一节一节的车厢理解为数据库的虚拟日志文件,当然如果不够存的下事务日志的时候,就要扩充,就是加一个火车厢.

所以说数据库事务日志其实是由很多个独立的虚拟事务日志文件组成的,我们看一下,大概就知道数据库的虚拟日志文件有自己的状态,也有自己的LSN标识.那在数据库的层面是怎么管理这些数据库日志文件呢.

​看一下LSN的作用

1:就是LSN用来标识VLF的序列号

2:LSN标识日志在VLF文件中的具体位置

我们分析一下数据库日志的逻辑管理​

我们简单的理解数据库日志是有两种状态的,活动日志和非活动日志(虽然日志有四种状态,但是我们理解这两种状态应该就足够了),活动日志的头部和尾部的标记就是头日志和尾日志,中间部分就是数据库活动日志,其实这个图还是不太直观的,因为数据库日志管理的话,更像一个圆形的管理,是可以达到连续管理的,当数据库头日志到达数据的尾部时候,如果第一个日志文件是可用的,事务日志则不会自动增长,而是去占用第一个数据库的VLF,这一点是很重要的,我们可以看一下,数据库的头日志是不断的往前走而尾日志什么时候才能改变位置呢.

如果想要改变尾日志的位置,只有活动日志减少,活动日志减少就意味着数据库日志的截断,所以说,每次发生数据库事务日志截断的时候尾日志才会向后推移.

数据库日志文件有一个状态,status,大家细心观察一下就会发现,其实有0,2两种状态,0就是代表空闲,2代表使用.

千万不要小看这个状态,对于收缩数据库日志文件来说,这个状态是很重要的

日志文件能被收缩的原因是该文件尾部的数据被清除了,使得该部分空间被释放,而不是逃过尾部去删除文件首部或者中间部分的内容。

sqlserver数据库的收缩是从最后一个数据库日志文件开始进行压缩的,所以说只有当最后一个VLF的状态为0的时候,DBCC SHRINKFILE才能发挥作用,否则收缩数据库日志文件是不会有效果的.

最新文章

  1. ORACLE 常见错误
  2. Lesson 2 Breakfast or lunch?
  3. 三种POST和GET的提交方式
  4. [ javascript canvas 插件演示 ] canvas 插件演示
  5. 运用EasyUI中datagrid读取数据库数据实现分页
  6. uglifyjs压缩JS的
  7. MFC 最大化 的时候控件 按比例变大
  8. c语言编程中%g是什么格式
  9. js小分享
  10. SVN在ubuntu的安装和使用
  11. Stitch Fix 融资1200万美元,又一个时尚创业的哈佛女MBA |华丽志
  12. HDU1325 Is It A Tree? 【并查集】
  13. WinFrom通过委托传递事件
  14. 【带着canvas去流浪(4)】绘制散点图
  15. 缺少新的栈标识:报出异常FLAG_ACTIVITY_NEW_TASK flag-是由于activity关闭之后开启一个新的acitivity时没有标识在栈中,所以需要给一个栈标识
  16. 自学web前端能不能找到一份前端的工作吗
  17. app -webkit-box-orient: vertical 打包后不显示
  18. 剑指Offer 15. 反转链表 (链表)
  19. vue中computed和watch的写法,以及区别
  20. Angular CLI命令

热门文章

  1. C++_基础1-基本数据类型
  2. JAVA数据结构--LinkedList双向链表
  3. Poj:1064 : :Cable master (假定一个解并判断是否可行)(二分搜索答案)
  4. 鼠标拖动div,div跟随鼠标移动效果
  5. [转] 商业应用中Java浮点数的精确计算及表示
  6. Oracle 中 Cursor 介绍
  7. mysql远程连接详细配置
  8. 什么是SocLib
  9. 关于箭头函数的this指向问题
  10. jumpserver 安装详解