事务日志驱动器是否需要与数据库驱动器一样快?
-
28-09-2019 - |
题
我们告诉客户将SQL Server数据库文件(mdf)放在与事务日志文件(ldf)不同的物理驱动器上。该技术公司(由我们的客户聘请)希望将事务日志放在比数据库驱动器更慢的驱动器(例如,更便宜的驱动器)上,因为有了事务日志,您就可以顺次写入日志文件。
我告诉他们,该驱动器(实际上是RAID配置)也需要位于快速驱动器上,因为对数据库的每个数据更改调用都需要保存在该数据库以及数据库本身中。
尽管如此,我意识到我对此并不完全确定。如果数据库驱动器速度很快,事务日志驱动器的速度是否会对性能产生重大影响?
解决方案
对于写入密集型数据库,日志驱动器的速度是最关键的因素。没有任何更新会比写入日志快,因此驱动器必须支持您的最大更新速度。并且所有更新都会生成日志。由于两个因素,数据库文件(MDF / NDF)更新可以降低写入速度
-
懒惰地写出
- 数据更新,并在检查点上刷新。这意味着可以在平均驱动器吞吐量上摊销更新峰值
- 多个更新可以累积在单个页面上,因此将需要一次写入
所以您认为日志吞吐量至关重要是正确的。
但同时,日志写入具有特定的顺序写入模式:日志始终附加在末尾。所有机械驱动器的读写操作和顺序操作都具有更高的吞吐量,因为它们涉及的磁盘头物理移动较少。您的运营商所说的话也是如此,事实上,速度较慢的驱动器可以提供足够的吞吐量。
但是所有这些都带有一些重大警告:
- 速度较慢的驱动器(或RAID组合)必须真正提供较高的顺序吞吐量
- 驱动器必须看到仅来自一个数据库的日志写入,而不能看到其他任何内容。任何可能干扰当前磁盘磁头位置的其他操作都会损坏您的写吞吐量,并导致数据库性能降低
- 日志只能是写的,不能是读的。请记住,某些组件需要从日志中读取,因此它们会将磁盘机制移动到其他位置,以便它们可以读取先前写入的日志:
- 交易复制
- 数据库镜像
- 日志备份
其他提示
用简单的话来说,如果您正在谈论OLTP数据库,则吞吐量取决于对事务日志的写入速度。一旦达到性能上限,所有其他相关操作都必须等待提交才能完成记录。
这是对事务日志内部的非常简单的描述,整个书籍都专用于此,但基本要点仍然存在。
现在,如果正在使用的存储系统可以提供同时支持事务日志和数据库数据文件所需的IOPS,则共享驱动器/ LUN将足以满足您的需求。
要为您提供建议的特定操作方法,我需要更多地了解您的数据库工作负载以及您需要数据库服务器提供的性能。
获取标题 SQL Server 2008内部结构可以深入了解SQL Server事务日志的内部结构,它是目前最好的SQL Server标题之一,它将支付只需几分钟即可从阅读中获得的价值。
好吧,事务日志是提供ACID的主要结构,可能成为性能的大瓶颈,如果定期进行备份,则其所需空间有上限,因此我将其放入一个安全,快速的驱动器中,足够的空间+一点空白。
事务日志应该位于最快的驱动器上,如果它可以完成对日志的写入,则可以完成内存中的其余事务,并在以后将其放入磁盘。