交易日志驱动器需要和数据库驱动器一样快吗?

8
我们建议客户将SQL Server数据库文件(mdf)放在与事务日志文件(ldf)不同的物理驱动器上。由我们的客户雇用的技术公司想要将事务日志放在比数据库驱动器更慢(例如更便宜)的驱动器上,因为对于事务日志,您只需按顺序写入日志文件。
我告诉他们,我认为驱动器(实际上是RAID配置)也需要放在快速驱动器上,因为每个对数据库进行数据更改的调用都需要保存在那里,以及保存到数据库本身。
但说完之后,我意识到我并不完全确定。如果具有数据库的驱动器很快,那么事务日志驱动器的速度是否会对性能产生重大影响呢?
4个回答

8
日志驱动的速度是对于写入密集型数据库最为关键的因素。日志写入速度决定了更新速度的极限,因此您的驱动器必须支持在峰值时经历的最大更新速率。所有更新操作都会生成日志。由于以下两个因素,数据库文件(MDF / NDF)更新可以承受较慢的写入速率:
- 数据更新懒惰地写出并在检查点上刷新。这意味着更新峰值可以分摊到平均驱动吞吐量上。 - 多个更新可以累积在单个页面上,因此只需要一次写入。
因此,您说的日志吞吐量至关重要是正确的。
但与此同时,日志写入具有特定的连续写模式:始终在末尾追加日志。所有机械驱动器对于连续操作(包括读取和写入)都具有更高的吞吐量,因为它们涉及磁盘头的物理移动较少。因此,您的运维人员说一个较慢的驱动器实际上可以提供足够的吞吐量也是正确的。
但是所有这些都需要注意以下几点:
- 较慢的驱动器(或RAID组合)必须真正提供高的连续吞吐量。 - 驱动器必须只看到来自一个且仅一个数据库的日志写入,而没有其他任何操作干扰当前磁盘头位置,否则会损害您的写入吞吐量并导致较慢的数据库性能。 - 日志必须仅写入,而不是读取。请记住,某些组件需要从日志中读取,因此它们将移动磁盘机械以便可以读回先前写入的日志: - 事务复制 - 数据库镜像 - 日志备份

SQL 组件中一个很棒的点是可以“读取”事务日志,但这经常被忽视了。+1 - John Sansom
谢谢,您的信息(以及其他回复)澄清了事情。我们将在此驱动器上拥有不止一个日志 - 尽管其中一个将远远具有最多的交易流量。还将进行定期的交易日志备份。我认为快速驱动器是最安全的选择。 - Clinemi
您始终可以使用SQLIOSIM.EXE在部署之前测试不同的配置:http://support.microsoft.com/kb/231619 - Remus Rusanu

2
简单来说,如果你正在谈论一个OLTP数据库,你的吞吐量由写入事务日志的速度决定。一旦达到了这个性能瓶颈,所有其他依赖操作都必须等待提交日志完成。
这是对事务日志内部的非常简单的解释,整本书都是关于此主题的,但基本观点仍然存在。
现在,如果您正在使用的存储系统可以提供所需的IOPS来支持您的事务日志和数据库数据文件,则共享驱动器/LUN将足以满足您的需求。
要为您提供具体的建议行动方案,我需要更多了解您的数据库工作负载和您要求数据库服务器提供的性能。
获取标题SQL Server 2008 Internals,深入了解SQL Server事务日志的内部情况,它是最好的SQL Server标题之一,从阅读中获得的价值将在几分钟内为自己带来回报。

+1:Kalen Delaney的书籍是获取所有细节的最佳来源 - Remus Rusanu

0

事实上,事务日志是提供 ACID 的主要结构,但在性能方面可能会成为一个巨大的瓶颈。如果您经常备份,则其所需空间具有上限,因此我建议将其放置在安全、快速的驱动器中,仅具有足够的空间和一些余量。


0

事务日志应该存储在最快的驱动器上,如果它只是能够完成对日志的写入,那么它可以在内存中完成其余的事务,并稍后将其写入磁盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接