事务日志驱动器是不是需要与数据库驱动器一样快?

Posted

技术标签:

【中文标题】事务日志驱动器是不是需要与数据库驱动器一样快?【英文标题】:Does the transaction log drive need to be as fast as the database drive?事务日志驱动器是否需要与数据库驱动器一样快? 【发布时间】:2011-05-15 07:22:57 【问题描述】:

我们告诉客户将 SQL Server 数据库文件 (mdf) 放在与事务日志文件 (ldf) 不同的物理驱动器上。科技公司(由我们的客户雇用)希望将事务日志放在比数据库驱动器更慢(例如更便宜)的驱动器上,因为使用事务日志,您只是按顺序写入日志文件。

我告诉他们,我认为驱动器(实际上是 RAID 配置)也需要位于快速驱动器上,因为对数据库的每个数据更改调用都需要保存在那里,以及数据库本身。

说了这么多之后,我意识到我对此并不完全确定。事务日志驱动器的速度是否会对性能产生显着影响...如果带数据库的驱动器速度快?

【问题讨论】:

【参考方案1】:

简单来说,如果您谈论的是 OLTP 数据库,您的吞吐量取决于您写入事务日志的速度。一旦达到此性能上限,所有其他相关操作都必须等待提交以记录完成。

这是对事务日志内部的非常简单的理解,整本书都专门介绍了该日志,但基本要点仍然存在。

现在,如果您使用的存储系统可以提供同时支持事务日志和数据库数据文件所需的 IOPS,那么共享驱动器/LUN 将足以满足您的需求。

为了向您提供具体的推荐行动方案,我需要更多地了解您的数据库工作负载以及您需要数据库服务器提供的性能。

获取标题SQL Server 2008 Internals 以全面了解 SQL Server 事务日志的内部结构,它是目前最好的 SQL Server 标题之一,它会在几分钟内从您获得的价值中收回成本来自阅读。

【讨论】:

+1:Kalen Delaney 的书是了解所有细节的来源。【参考方案2】:

日志驱动器的速度是写入密集型数据库的最关键因素。任何更新都不会比写入日志的速度更快,因此您的驱动器必须支持您在峰值时经历的最大更新率。并且所有更新都会生成日志。由于两个因素,数据库文件 (MDF/NDF) 更新可以提供较慢的写入速率

数据更新被延迟写入并在检查点刷新。这意味着更新峰值可以摊销到平均驱动器吞吐量 多个更新可以累积在一个页面上,因此需要一次写入

所以你说得对,日志吞吐量很关键。

但同时,日志写入具有特定的顺序写入模式:日志始终附加在末尾。对于顺序操作,所有机械驱动器对于读取和写入都具有更高的吞吐量,因为它们涉及磁盘磁头的较少物理移动。你的运维人员所说的也是如此,较慢的驱动器实际上可以提供足够的吞吐量。

但所有这些都带有一些重大警告:

较慢的驱动器(或 RAID 组合)必须真正提供高连续吞吐量 驱动器必须看到来自一个且只有一个数据库的日志写入,不能看到其他任何内容。任何其他可能干扰当前磁盘磁头位置的操作都会损害您的写入吞吐量并导致数据库性能下降 日志必须只能写,不能读。请记住,某些组件需要从日志中读取,因此它们会将磁盘机制移动到其他位置,以便它们可以读回先前写入的日志: 事务复制 数据库镜像 日志备份

【讨论】:

+1:关于“读取”事务日志的 SQL 组件很重要,因为这经常被忽略。 谢谢,您的信息(连同其他回复)可以解决问题。我们将在此驱动器上拥有多个日志 - 尽管到目前为止,其中一个具有最多的事务流量。还会有定期的事务日志备份。我认为快速驾驶是最安全的选择。 部署前可以随时使用SQLiosIM.EXE测试各种配置:support.microsoft.com/kb/231619【参考方案3】:

事务日志应该在最快的驱动器上,如果它可以完成对日志的写入,它可以在内存中执行其余事务,然后让它稍后进入磁盘。

【讨论】:

【参考方案4】:

好吧,事务日志是提供 ACID 的主要结构,可能是性能的一大瓶颈,如果你定期进行备份,它所需的空间有上限,所以我会把它放在一个安全、快速的驱动器中只是足够的空间+一点边距。

【讨论】:

以上是关于事务日志驱动器是不是需要与数据库驱动器一样快?的主要内容,如果未能解决你的问题,请参考以下文章

引擎 索引 日志查询 权限管理

消息队列价值思考

Spring注解驱动开发-----aop声明式事务

戏说领域驱动设计(廿六)——再谈事务

JDBC事务

JDBC事务