文档菜单
文档首页
/
MongoDB 手册
/ / /

写入操作性能

本页面

  • 索引
  • 日志记录

集合中的每个索引都会在写入操作的性能上增加一些开销。

对于每个insertdelete 写操作在集合上,MongoDB 会将相应的文档键插入或从目标集合的每个索引中删除。更新操作可能只更新受影响的键的集合上的索引子集。

注意

MongoDB 仅在写入操作涉及的文档包含在索引中时,才会更新稀疏索引或部分索引。

一般来说,索引为“读取操作”提供的性能提升值得写入时的惩罚。然而,为了尽可能优化写入性能,在创建新索引时请谨慎,并评估现有索引以确保您的查询确实使用了这些索引。

有关索引和查询,请参阅查询优化。有关索引的更多信息,请参阅索引索引策略

为了在发生崩溃时提供持久性,MongoDB会先将内存中的更改写入磁盘上的日志,从而使用预写日志。MongoDB首先将内存中的更改写入磁盘日志文件。如果在将更改提交到数据文件之前,MongoDB意外终止或遇到错误,MongoDB可以使用日志文件将写操作应用到数据文件。

尽管日志提供的持久性保证通常超过了额外写操作的性能成本,但请考虑日志和性能之间的以下交互

  • 如果日志和数据文件位于同一块设备上,数据文件和日志可能需要争夺有限的I/O资源。将日志移动到单独的设备上可能会增加写操作的能力。

  • 如果应用程序指定的写关注包括j 选项mongod将减少日志写入之间的时间间隔,这可能会增加整体写负载。

  • 日志写入之间的时间间隔可以通过commitIntervalMs运行时选项进行配置。减少日志提交之间的时间间隔会增加写操作的数量,这可能会限制MongoDB的写操作能力。增加日志提交之间的时间可能会减少写操作的总数,但同时也增加了在发生故障时日志可能无法记录写操作的风险。

有关日志记录的更多信息,请参阅日志记录。

返回

优化性能