3.9. IO 队列¶
CouchDB 具有一个内部子系统,可以优先处理与某些操作类别相关的 IO。可以配置此子系统,以根据下面描述的设置限制分配给后台操作(如内部复制和压缩)的资源。
- [ioq]¶
- concurrency¶
指定队列系统将提交的并发进行中的 IO 请求的最大数量
[ioq] concurrency = 10
- ratio¶
当两个队列都不为空时,后台 IO 请求被选中而不是交互式 IO 请求的时间比例
[ioq] ratio = 0.01
- [ioq.bypass]¶
系统管理员可以选择将特定类别的 IO 直接提交到底层文件描述符或操作系统进程,完全绕过队列。安装旁路可以产生更高的吞吐量和更低的延迟,但会放弃对优先级的某些控制。以下类别得到识别
- os_process¶
发送到外部进程(例如,
couchjs
)的消息。
- read¶
满足交互式读取请求的磁盘 IO。
- write¶
更新数据库所需的磁盘 IO。
- view_update¶
更新视图和其他辅助索引所需的磁盘 IO。
- shard_sync¶
由后台复制进程发出的磁盘 IO,用于修复分片副本之间的任何不一致。
- compaction¶
由压缩作业发出的磁盘 IO。
- reshard¶
由重新分片作业发出的磁盘 IO。
在没有任何配置的情况下,CouchDB 将对所有类别的 IO 进行排队。与 CouchDB 一起提供的 default.ini 配置文件为每个交互式 IO 类别激活了旁路,只有后台 IO 会进入队列系统
[ioq.bypass] os_process = true read = true write = true view_update = true shard_sync = false compaction = false reshard = false
3.9.1. 建议¶
默认配置可以防止来自后台操作(如压缩)的过度 IO 扰乱交互式操作的延迟,同时最大限度地提高分配给这些交互式请求的整体 IO 吞吐量。在某些情况下,此配置可能不是最佳的
管理员可能希望将更大的整体 IO 带宽部分分配给压缩,以便领先于传入的写入负载。在这种情况下,可能需要禁用
write
的旁路(以帮助进行数据库压缩)和/或view_update
的旁路(以帮助进行视图索引压缩),然后增加ratio
以赋予压缩更高的优先级。具有大量不需要完全最新的视图的服务器可能会从删除
view_update
上的旁路中获益,以优化常规文档读取和写入操作的延迟,并在较安静的时间段内构建视图。