VDI项目中,与用户一起讨论,数据库事务增长的原理

结合misrosoft的官方资料,经过测试,总结一下数据库事务日志的增长原理,个人经验总结,分享一下,相互学习


如有不明之处,可以进行第6点的测试,测试结果对比后就明白了,可能个人表达能力不够完善。希望大家可以包容,谢谢!


一、什么是数据库事务日志

每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改。 必须定期截断事务日志以避免它被填满。

事务日志是数据库的重要组件,如果系统出现故障,则可能需要使用事务日志将数据库恢复到一致状态。 删除或移动事务日志以前,必须完全了解此操作带来的后果。

例如,Mirror 故障切换过程,会能过事务记录在数据库事务日志中


二、数据库事务如何增长

1.微软对于数据库事务日志的大小,是限制文件增长的,但默认值2097152,即2个TB,文件增长按百分比,默认10%

当然在实际客户的环境中,数据磁盘空间不可能2T,在日常运维管理中,文件很少会增加到2T

2.假设PVS数据库事务日志,初始大小为100M,打个比喻,100M为1节车厢,事务日志会认为1节车厢为是一个逻辑空间,如何记录事务日志呢,例如VDI重启一次,产生事务日志大小为1M,这1M需要存储在PVS数据库事务日志,它以%形式占用逻辑空间,假设VDI重启100次,会有100%数据需要记录在逻辑空间,此时1车厢全部用完,根据前面提到过文件增长按百分比,默认10%,此时100M的文件,会增加10%的大小,为1000M,会增加新的逻辑空间

逻辑空间如图:

spacer.gifwKiom1VoGAjzGoWXAAA4CTeKR9Q764.jpg


3.根据2的描述, 必须定期截断事务日志以避免它被填满。不然会一直增长下去


4.下面我们来看看事务截断的原理

日志截断释放日志文件的空间,以便由事务日志重新使用。 日志截断主要用于阻止日志填充。 日志截断从 SQL Server 数据库的逻辑事务日志中删除不活动的虚拟日志文件,释放逻辑日志中的空间以便物理事务日志重用这些空间。 如果事务日志从不截断,它最终将填满分配给物理日志文件的所有磁盘空间。

为了避免这个问题,除非由于某些原因延迟日志截断,将在以下事件后自动进行截断:

简单恢复模式下,在检查点之后发生。

在完整恢复模式或大容量日志恢复模式下,如果自上一次备份后生成检查点,则在日志备份后进行截断(除非是仅复制日志备份)。

注意

日志截断并不减小物理日志文件的大小。 若要减少物理日志文件的物理大小,需要收缩日志文件。 有关收缩物理日志文件大小的信息,请参阅管理事务日志文件的大小

http://technet.microsoft.com/zh-cn/library/ms190925.aspx

大家可能看的不是很明白,继续前面的例子,当100M的逻辑空间,全部占满时100%,执行一次事务日志截断,此时100%空间会重新释放空间,此时逻辑空间为1%,可以继续使用被释放的空间,这就是微软一直在说备份事务日志,其实备份就是截断事务日志

5.大家可以通过以下命令,查看事务日志的逻辑空间,占用%

DBCC SQLPERF (LOGSPACE)

此KB为此命令的详细信息

http://technet.microsoft.com/zh-cn/library/ms189768.aspx

6.如何测试逻辑空间是否释放呢?

测试数据可以选择PVS数据库,效果更加直观

测试步骤如下:1. 在数据库中新建查询,使用DBCC SQLPERF (LOGSPACE)

                       2.查看当前Log Space Used (%)(即当前事务日志占用的逻辑空间)

                       3.备份事务日志,(备份事务日志之前,最好进行一次完整备份,如何是自己的测试环境就无所谓)

                       4.使用DBCC SQLPERF (LOGSPACE),查看备份后Log Space Used (%)

                       5.重启部分VDI,再次使用DBCC SQLPERF (LOGSPACE),查看重启后Log Space Used (%),就可以观察逻辑空间的变化


7.对于mirror,恢复模式为完整模式,事务日志增长是非常快的,通过这几天测试,总结一点,最好一周一次备份PVS数据库的事务日志,经过多次的测试,发现VDI重启一次,大概会产生1M大小的事务日志,所以只有定期备份事务日志,才能限制数据库事务日志文件的大小。

在关PVS日志量大小,详细参见:

http://support.citrix.com/proddocs/topic/provisioning-60/pvs-install-task1-plan-6-0.html

以上纯属,个人学习总结,如有不足之处,希望大家体谅!!