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

时间:2010-11-24 19:06:57

标签: sql-server performance transaction-log drives

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

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

在说完之后,我意识到我并不完全确定。事务日志驱动器的速度是否会在性能上产生显着差异...如果带有数据库的驱动器速度很快?

4 个答案:

答案 0 :(得分:5)

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

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

因此,您认为日志吞吐量至关重要。

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

但所有这些都伴随着一些重大警告:

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

答案 1 :(得分:2)

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

这是对交易日志内部的一种非常简单的看法,整本书都是专用的,但基本要点仍然存在。

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

为了向您提供特定的推荐操作,我需要了解有关数据库工作负载以及数据库服务器要求的性能的更多信息。

获取标题SQL Server 2008 Internals以全面了解SQL Server事务日志的内部,它是最好的SQL Server标题之一,它将在几分钟内从价值中收回成本你从阅读中获益。

答案 2 :(得分:0)

嗯,事务日志是提供ACID的主要结构,可能是性能的一大瓶颈,如果你经常备份它所需的空间有一个上限,所以我会把它安装在一个安全,快速的驱动器中只是足够的空间+一点保证金。

答案 3 :(得分:0)

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