SQL Server的事务日志

这篇具有很好参考价值的文章主要介绍了SQL Server的事务日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

每个 SQL Server 数据库都有一个事务日志,用于记录所有事务以及每个事务所做的数据库修改。

事务日志是数据库的关键组件。如果出现系统故障,您将需要该日志才能使数据库恢复到一致状态。

二、事务日志支持的操作

事务日志支持以下操作:

  • 单个事务恢复。
  • 在启动 SQL Server 时恢复所有未完成的事务。
  • 将还原的数据库、文件、文件组或页前滚到故障点。
  • 支持事务复制。
  • 支持高可用性和灾难恢复解决方案:Always On 可用性组、数据库镜像和日志传送。

2.1、单个事务恢复

如果应用程序发出语句,或者数据库引擎检测到错误(如与客户端的通信丢失),则日志记录用于回滚未完成事务所做的修改。

2.2、在启动 SQL Server 时恢复所有未完成的事务

如果服务器发生故障,数据库可能会处于从未从缓冲区缓存写入数据文件的某些修改的状态,并且数据文件中未完成的事务可能会进行一些修改。启动 SQL Server 实例时,它会运行每个数据库的恢复。日志中记录的可能尚未写入数据文件的每个修改都将前滚。然后回滚在事务日志中找到的每个未完成的事务,以确保保留数据库的完整性。

2.3、将还原的数据库、文件、文件组或页前滚到故障点

在影响数据库文件的硬件丢失或磁盘故障之后,可以将数据库还原到故障点。首先还原上一个完整数据库备份和最后一个差异数据库备份,然后将事务日志备份的后续序列还原到故障点。

还原每个日志备份时,数据库引擎会重新应用日志中记录的所有修改以前滚所有事务。还原上次日志备份后,数据库引擎将使用日志信息回滚此时未完成的所有事务。

2.4、支持事务复制

日志读取器代理监视为事务复制配置的每个数据库的事务日志,并将标记为复制的事务从事务日志复制到分发数据库中。

2.5、支持高可用性和灾难恢复解决方案

备用服务器解决方案、AlwaysOn 可用性组、数据库镜像和日志传送严重依赖事务日志。

在 Always On 可用性组方案中,对数据库(主副本)的每次更新都会立即在数据库的单独完整副本(辅助副本)中重现。主要副本将每个日志记录立即发送到次要副本,次要副本将传入的日志记录应用于可用性组数据库,并不断向前滚动

在日志传送方案中,主服务器将主数据库的事务日志备份发送到一个或多个目标。每个辅助服务器将日志备份还原到其本地辅助数据库。

在数据库镜像方案中,对数据库(主体数据库)的每次更新都会立即在数据库(镜像数据库)的单独完整副本中重现。主体服务器实例将每个日志记录立即发送到镜像服务器实例,镜像服务器实例将传入的日志记录应用于镜像数据库,并不断前滚。

三、事务日志特征

SQL Server 数据库引擎事务日志的特征:

  • 事务日志作为数据库中的单独文件或一组文件实现。日志缓存与数据页的缓冲区缓存分开管理,从而在 SQL Server 数据库引擎中生成简单、快速且可靠的代码。

  • 日志记录和页面的格式不受数据页面格式的限制。

  • 事务日志可以在多个文件中实现。可以通过设置日志的值将文件定义为自动扩展。这减少了事务日志中空间不足的可能性,同时减少了管理开销。有关详细信息,请参阅更改数据库 (事务处理 SQL) 文件和文件组选项。

  • 重用日志文件中的空间的机制非常快速,对事务吞吐量的影响最小。

四、事务日志截断

日志截断可释放日志文件中的空间,以供事务日志重用。您必须定期截断事务日志,以防止它填满分配的空间。有几个因素可能会延迟日志截断,因此监视日志大小很重要。可以最少记录某些操作,以减少它们对事务日志大小的影响。

日志截断从 SQL Server 数据库的逻辑事务日志中删除非活动虚拟日志文件 (VLF),从而释放逻辑日志中的空间以供物理事务日志重用。如果事务日志从未被截断,它最终将填满分配给物理日志文件的所有磁盘空间。

为避免空间不足,除非日志截断由于某种原因而延迟,否则在发生以下事件后会自动截断:

  • 在简单恢复模式下,在检查点之后。
  • 在完整恢复模式或大容量日志恢复模式下,如果自上次备份以来发生了检查点,则在日志备份之后会发生截断(除非它是仅复制日志备份)。
  • 首次使用 FULL 恢复模式创建数据库时,事务日志将根据需要重复使用(类似于 SIMPLE 恢复数据库),直到创建完整数据库备份为止。

五、管理事务日志文件的大小

监视 SQL Server 事务日志大小、收缩事务日志、添加或放大事务日志文件、优化 tempdb 事务日志增长率以及控制事务日志文件的增长。

5.1、监视日志空间使用情况

使用 sys.dm_db_log_space_usage 监视日志空间使用情况。此 DMV 返回有关当前使用的日志空间量的信息,并指示事务日志何时需要截断。

有关当前日志文件大小、其最大大小和文件的自动增长选项的信息,您还可以在 sys.database_files 中使用该日志文件的大小、max_size和增长列。

5.2、缩小日志文件大小

若要减小物理日志文件的物理大小,必须收缩日志文件。当您知道事务日志文件包含未使用的空间时,这很有用。您只能在数据库处于联机状态时收缩日志文件,并且至少有一个虚拟日志文件 (VLF) 可用。在某些情况下,在下一次日志截断之前可能无法收缩日志。

收缩日志文件会删除一个或多个不保存逻辑日志部分的 VLF(即非活动 VLF)。收缩事务日志文件时,将从日志文件末尾删除非活动 VLF,以将日志减小到大约目标大小。

(1)收缩日志文件(不收缩数据库文件)。

  • DBCC SHRINKFILE (Transact-SQL)。

  • 收缩文件。

(2)监视日志文件收缩事件。

  • 日志文件自动收缩事件类。

(3)监视日志空间。

  • sys.dm_db_log_space_usage。

  • sys.database_files。

5.3、添加或放大日志文件

可以通过放大现有日志文件(如果磁盘空间允许)或将日志文件添加到数据库(通常在其他磁盘上)来获取空间。一个事务日志文件就足够了,除非日志空间即将用完,并且保存日志文件的卷上的磁盘空间也已用完。

若要将日志文件添加到数据库,请使用语句的子句。添加日志文件允许日志增长。ADD LOG FILEALTER DATABASE
若要放大日志文件,请使用语句的子句,指定 和 语法。有关详细信息,请参阅更改数据库 (事务处理 SQL) 文件和文件组选项。

5.4、优化 tempdb 事务日志大小

重新启动服务器实例会将 tempdb 数据库的事务日志大小调整为其原始的自动增长前大小。这会降低 tempdb 事务日志的性能。

可以通过在启动或重新启动服务器实例后增加 tempdb 事务日志的大小来避免此开销。

5.5、控制事务日志文件的增长

使用 ALTER 数据库 (Transact-SQL) 文件和文件组选项语句来管理事务日志文件的增长。请注意以下几点:

  • 若要更改当前文件大小(以 KB、MB、GB 和 TB 为单位),请使用该SIZE选项。
  • 要更改增长增量,请使用该FILEGROWTH选项。值为 0 表示自动增长设置为关闭,不允许有额外的空间。
  • 若要控制日志文件的最大大小(以 KB、MB、GB 和 TB 为单位),或将增长设置为“无限制”,请使用该MAXSIZE选项。

总结

  1. 避免日志磁盘过载;确保日志存储能够承受事务负载的 IOPS 和低延迟要求。
  2. 长时间运行的事务等因素使 VLF 长时间保持活动状态,可以限制日志收缩,甚至根本阻止日志收缩。
  3. 在收缩事务日志之前,请记住可能延迟日志截断的因素。如果在日志收缩后再次需要存储空间,事务日志将再次增长,这样做会在日志增长操作期间引入性能开销。
  4. 事务日志的自动增长(自动增长)增量(由选项设置)必须足够大,才能领先于工作负荷事务的需求。
  5. 在数据库中具有多个日志文件不会以任何方式提高性能,因为事务日志文件不像同一文件组中的数据文件那样使用比例填充。

SQL Server的事务日志文章来源地址https://www.toymoban.com/news/detail-418459.html

到了这里,关于SQL Server的事务日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SQL Server】数据库开发指南(八)高级数据处理技术 MS-SQL 事务、异常和游标的深入研究

    本系列博文还在更新中,收录在专栏:#MS-SQL Server 专栏中。 本系列文章列表如下: 【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作 【SQL Server】数据库开发指南(一)数据库设计的核心概念和基本步骤 【SQL Server】数据库开发指南(二)MSSQL数据库开发对

    2024年02月07日
    浏览(86)
  • sql server 截断和收缩所有用户数据库日志--用游标循环所有正常状态的用户数据库

    在服务器运维活动中,我们经常需要做一项工具就是将好多年的用户数据库日志文件截断并收缩为最小,以节省大量的磁盘空间。当数据库只有一两个时可以手动操作,但数据库数量众多时,就需要采用sql脚本,批量化执行这个过程。 本人写了一段这样的脚本。并且经过验证

    2024年02月06日
    浏览(56)
  • 在Azure SQL DB/Azure托管实例里快速查询各数据库大小以及每个数据库下表的大小

    目录 (一)前言 (二)正文 1. 环境: 2. 查看实例下每个数据库的空间大小 (1) SQL语法 (2)运行结果 3. 查看特定数据库下每张表的大小 (1)SQL语法 (2)运行结果 日常工作中对于各个数据库以及每一个数据库中下辖的表的大小,是我们日常监控以及分析问题的重要方向

    2024年02月11日
    浏览(68)
  • SQL Server 数据库之SQL Server 数据库的安全设置

    数据库服务器是所有应用的数据中转站,若数据库服务被恶意攻击,可能会造成数据泄露、数据丢失、数据被恶意篡改等诸多无法挽回的损失; 所以,对数据库进行安全设置是每一个数据库管理人员都应掌握的知识; SQL Server 登录模式分为 “Windows 身份验证模式” 和 “SQL

    2024年02月06日
    浏览(73)
  • SQL Server数据库使用SQL Server代理实现数据库自动备份

    在现实中,为了保证数据的安全和完整,防止人为错误和硬件故障等造成的数据丢失和损坏,就需要用到数据库的备份,不同的数据库方法有所差别,我这边主讲SQL Server数据库的备份和使用SQL Server代理作业实现数据库的定时备份。 目录 一、开启SQL Server代理 1、找到SQL Serv

    2024年02月09日
    浏览(75)
  • 【建议收藏】数据库 SQL 入门——事务(内附演示)

    🙋‍♂️作者简介:生鱼同学,大数据科学与技术专业硕士在读👨‍🎓,曾获得华为杯数学建模国家二等奖🏆,MathorCup 数学建模竞赛国家二等奖🏅,亚太数学建模国家二等奖🏅。 ✍️研究方向:复杂网络科学 🏆兴趣方向:利用python进行数据分析与机器学习,数学建模竞

    2023年04月23日
    浏览(38)
  • SQL Server数据库——创建数据库

    目录 一、界面方式创建数据库 1.1创建数据库xscj,数据文件和日志文件的属性按默认值设置  1.2在xscj数据库中增加文件xcsj1,其属性均取系统默认值  1.3在数据库xscj中增加一个名为myGroup的文件组。 1.4数据库的重命名  1.5数据库的删除  二、命令方式创建数据库 以创建学生管

    2024年02月01日
    浏览(63)
  • SQL Server的事务日志

    每个 SQL Server 数据库都有一个事务日志,用于记录所有事务以及每个事务所做的数据库修改。 事务日志是数据库的关键组件。如果出现系统故障,您将需要该日志才能使数据库恢复到一致状态。 事务日志支持以下操作: 单个事务恢复。 在启动 SQL Server 时恢复所有未完成的事

    2023年04月19日
    浏览(41)
  • SQL Server 数据库安装教程SQL Server 2017

    官网: SQL Server 下载 | Microsoft  软件版本看你自己需求啦,反正我是下了SQL Server 2017 评估版(试用180天,秘钥自己百度)  下载后,软件有点小,不是实际的安装包,只是安装导向包,在安装过程才下载实际的安装包:      要保持有网络,直接双击安装,选基本即可:  选好

    2024年02月05日
    浏览(84)
  • SQL Server2008数据库升级至SQL Server2012

    今天接到了一个需求,服务器上的数据库需要从SQL Server2008升级到2012。根据之前的经验,感觉是一个非常有意思的过程(事实上也是。这个过程也给了我一些触动与启发,因此,便记录了自己的踩坑过程以及解决方案,还有安装过程的体会。 启动SQL Server2012的安装引导程序,

    2024年02月05日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包