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

标签 sql-server performance transaction-log drives

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

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

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

最佳答案

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

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

  • 所以你说日志吞吐量很关键是对的。

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

    但所有这些都伴随着一些重大警告:
  • 较慢的驱动器(或 RAID 组合)必须真正提供高连续吞吐量
  • 驱动器必须看到来自一个且只有一个数据库的日志写入,而没有其他任何内容。任何其他可能干扰当前磁盘磁头位置的操作都会损害您的写入吞吐量并导致数据库性能变慢
  • 日志必须只能写,不能读。请记住,某些组件需要从日志中读取,因此它们会将磁盘机制移动到其他位置,以便它们可以读回先前写入的日志:
  • 事务复制
  • 数据库镜像
  • 日志备份
  • 关于sql-server - 事务日志驱动器是否需要与数据库驱动器一样快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4270543/

    相关文章:

    SQL Server : compare dates by only matching month and day

    SQL Server 2005 - 如何找出哪些事务日志文件已恢复

    sql-server - SSIS - 有没有办法从平面表中过滤数据?

    c# - 无法使用 C# visual studio 2008 将数据插入表中

    java - JDBC,将从查询中获得的多个记录插入到其他表中

    linux - neo4j 事务日志删除

    sql - RBAR 与具有不同事务大小的基于集的处理的性能比较

    c# - 在 Web 应用程序中支持大约 400 多个并发用户的设计考虑

    c# - 如何在 C# 中使用性能计数器获取进程的内存使用百分比

    c# vb : Should we use System. 懒惰的资源密集型任务? (不需要线程时)