有许多博客文章和最佳实践文章颂扬将 SQL Server 数据文件放在一个硬盘驱动器上并将事务日志放在另一个硬盘驱动器上的优点。给出的原因是数据库文件将经历随机读取和写入,而事务日志将只有顺序写入。
但是,如果您有数百个数据库怎么办?将数百个事务日志文件放在单独的磁盘上是否真的有性能优势?如果要写入多个事务日志,那么我认为事务日志的写入将与数据库的写入一样随机。
有许多博客文章和最佳实践文章颂扬将 SQL Server 数据文件放在一个硬盘驱动器上并将事务日志放在另一个硬盘驱动器上的优点。给出的原因是数据库文件将经历随机读取和写入,而事务日志将只有顺序写入。
但是,如果您有数百个数据库怎么办?将数百个事务日志文件放在单独的磁盘上是否真的有性能优势?如果要写入多个事务日志,那么我认为事务日志的写入将与数据库的写入一样随机。
正确的。理论上,如果您有 100 个 DB,则需要 100 个驱动器,每个日志一个。实际上,尽管人们并不关心这种情况,但因为当您拥有 100 多个 DB 时,您显然不会期望每个DB都具有一流的 TPC 性能。您可能会拥有一些具有高吞吐量和严格 SLA 的数据库,并且您可以将它们分别放在单独的主轴上,而许多较低级别的 SLA 则挤在几个共享磁盘上。
事务日志正是……所有事务的运行日志。因此,它在一个方向上连续填充,直到设置检查点并覆盖,或截断并覆盖。覆盖是顺序的。
考虑您的数据文件。客户记录可能包含 5 年前的订单和 10 年前的订单。如果您删除这些订单(例如,您正在其他地方存档数据),则在当前 tlog 中,您将按顺序删除 1 和删除 2。但是,在您的数据文件中,您触及了 5 和 10 年前编写的块。
所以它确实很重要:)
将事务日志单独放在单独的磁盘上会比将它与其他数据/日志文件放在一起提供更好的性能。如果将所有日志放在同一个磁盘上,实际上并不是在进行顺序 IO,而是在这些日志文件之间进行随机 IO。