你的位置:首页 > 软件开发 > 数据库 > SQL Server中的事务日志管理(8/9):优化日志吞吐量

SQL Server中的事务日志管理(8/9):优化日志吞吐量

发布时间:2016-01-11 09:00:34
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的。你只要确保每个数据库都有正确的备份。当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时。这系列文章会告诉你每个DBA应该知道的具体细节。对于日志文件的最大日志吞吐量,我们从存储架构 ...

SQL Server中的事务日志管理(8/9):优化日志吞吐量

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的。你只要确保每个数据库都有正确的备份。当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时。这系列文章会告诉你每个DBA应该知道的具体细节。


对于日志文件的最大日志吞吐量,我们从存储架构思路的简单回顾开始,然后进一步看下日志碎片如何影响需要日志读取操作的性能,例如日志备份,或者故障恢复过程。

最后,我们会谈下在日志大小和增长管理的最佳实践,还有对过渡日志增长和碎片的正确处理。

物理架构

正确的物理硬件和架构会帮你保证日志吞吐量的最大可能,还有一些“黄金法则”。在这之前,已经有人谈过了,尤其是Kimberly Tripp在她的《8步走向更好的事务日志吞吐》里,因此在这里不会更深入的探讨这个话题。

要注意的是,对于日志文件,在设计内在物理结构时,我们的首要目标是最优日志写吞吐量。对于每个添加、删除或修改数据的事务,SQL Server写入日志,这也包括数据库维护操作,例如索引重建或重组,统计信息更新等等。

你只需要一个日志文件

从多个日志文件,在日志吞吐量方面,不会获得性能。SQL Server不会并行写入多个日志文件。只有一个情况SQL Server会写入所有日志文件,那是当在每个日志文件里更新文件头时,SQL Server写入它来更新不同的LSN,例如最后检查点,最早打开的事务,最后一次日志备份等等。当只更新文件头时,很多人会误认为SQL Server会写入所有日志文件。

如果一个数据库有4个日志文件,SQL Server会写入日志到日志文件1,直到满了,然后日志文件2,日志文件3和日志文件4,然后尝试绕回重新写入日志文件1。我们可以通过创建有多个日志文件(或通过对现存数据库增加更多文件)的数据库来验证下。代码8.1创建一个Person数据库,有1个主数据文件和2个日志文件,每个在不同的硬盘上。

数据和备份文件位置

这篇文章里的例子都假设数据和日志文件位于D:\SQLData,所有备份位于:D:\SQLBackups,各自不同的位置。当运行这些例子时,直接修改这些位置到你系统合适的位置(并且注意,在实际的系统中,我们不会在同个硬盘上存储数据和日志文件)。

注意对于这些数据和日志文件的大小和文件增长率设置,我们是基于AdventureWorks2008的:

 1 USE master 2 GO 3 IF DB_ID('Persons') IS NOT NULL  4   DROP DATABASE Persons; 5 GO 6  7 CREATE DATABASE [Persons] ON PRIMARY  8 (  NAME = N'Persons' 9  , FILENAME = N'D:\SQLData\Persons.mdf'10  , SIZE = 199680KB11  , FILEGROWTH = 16384KB12  )13 LOG ON14 (  NAME = N'Persons_log'15  , FILENAME = N'D:\SQLData\Persons_log.ldf'16  , SIZE = 2048KB17  , FILEGROWTH = 16384KB18  ),19 (  NAME = N'Persons_log2'20  , FILENAME = N'C:\SQLData\Persons_log2.ldf'21  , SIZE = 2048KB22  , FILEGROWTH = 16384KB23  )24 GO25 26 ALTER DATABASE Persons SET RECOVERY FULL;27 28 USE master29 GO30 BACKUP DATABASE Persons31 TO DISK ='D:\SQLBackups\Persons_full.bak'32 WITH INIT;33 GO

原标题:SQL Server中的事务日志管理(8/9):优化日志吞吐量

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。