事务 NTFS(TxF)经过精心设计,性能通常优于类似方案中的常规用途事务替代项。 但是,与非事务处理 I/O 相比,文件系统事务的开销比非事务处理作多,并且与非事务处理 I/O 相比,I/O 性能会有所减少。 性能关键型应用程序应执行技术采用资格周期,评估事务处理文件系统作的性能影响。
TxF作概述
TxF 使用 撤消 日志记录来记录将文件系统重新置于一致状态(也称为回滚)所需的更改(也称为回滚),如果发生事务中止。 与非事务文件系统作相比,此撤消日志记录会生成额外的 I/O,并且是 TxF 性能开销的来源。
TxF作方式的高级摘要如下:
- 随着事务的进行,TxF 将 撤消 记录写入其日志文件,以便对文件系统所做的每次修改。 如果发生中止,则会分析这些撤消记录,以将文件系统重新置于事务开始前的状态。
- 元数据更改 撤消记录仅描述对文件系统元数据的更改。 其中一些示例包括移动、重命名、追加和属性更改。 对于元数据更改撤消记录,撤消更改所需的所有信息都存储在记录中,并存储在日志文件中。
- 覆盖 撤消记录描述文件的一部分覆盖。 发生文件覆盖时,文件的原始内容存储在隐藏目录中的特殊撤消文件中,覆盖撤消记录指向此文件。 当文件更新最终从缓存刷新到磁盘时,还必须刷新撤消文件的内容,因此事务处理的文件覆盖最多可以生成两个额外的随机 I/O作:一个用于读取旧数据,另一个用于将其写入撤消文件。 这些额外的 I/O作是 TxF 的性能成本。
- 发生提交时,TxF 首先刷新所有撤消信息,然后刷新实际文件更改,然后写入并刷新提交记录。 如果没有要刷新的撤消文件,则与非事务处理 I/O 相关的唯一额外的 TxF 开销是日志刷新本身。 但是,日志刷新会导致高效的大型顺序写入,因此性能成本最低。
- TxF 已针对提交进行优化。 预计大多数事务都会成功,不需要回滚,因此事务的所有撤消记录都预期不会使用。 从性能的角度来看,TxF 提交作速度很快,回滚是资源密集型的。
- 回滚比提交资源更密集。 在回滚期间,事务中所做的所有更改都必须未完成。 一般情况下,回滚持续时间大致相同,最初进行更改。 例如,如果进行所有更改需要 1 秒,则可能需要大约 1 秒才能撤消这些更改。 对于很长的事务,回滚可能会产生额外的性能影响。 例如,如果系统必须在系统停止响应并且必须执行计划外重启时自动回滚事务,则系统启动时间可能会延迟。
有关可从上一个列表绘制的性能的摘要结论如下:
- 涉及文件覆盖的事务的 TxF 的性能成本可能很大。
- 对于仅涉及元数据作的事务,TxF 的性能成本可能相对较低,前提是使用大型事务。 大型事务是每个提交记录有许多撤消记录时。
针对最佳性能的建议
在较大的事务上摊销 TxF 开销。 例如,如果你有 N 组更改,其中每个更改都有 M 步骤,并且可以选择将每个 M 事务 N 事务作为单个事务执行,M*N 步骤, 后一个选项将更高效。
考虑对启动非常大的事务可能产生的影响。 如前所述,如果系统需要执行自动回滚作为启动时间,回滚速度可能会变慢,并且会延迟启动时间。 事务越大,延迟越长。
将事务保留为大部分元数据作。 这是 TxF 针对的优化,通常性能与大型元数据事务的非事务处理文件 I/O 相同。 有效元数据 TxF 函数的示例包括 MoveFileTransacted、SetFileAttributesTransacted、CopyFileTransacted、deleteFileTransacted、CreateHardLinkTransacted和追加写入(当文件指针位于文件末尾时对 WriteFile 函数的调用) 或 EOF)。 资源密集型非元数据作的示例是在文件指针不在 EOF 时调用 WriteFile 函数。
TxF 性能预期摘要
对于就地更新,对文件的覆盖比非事务处理的文件 I/O 慢得多,而文件系统元数据作(例如,创建、移动和追加)的 TxF 性能与大型事务的非事务处理文件 I/O 相当。