检查腾讯云数据库 MongoDB 实例 dirty cache 脏页的比例是否大于cache size 的20%,如果超过20%,用户线程将参与刷盘,阻塞业务的请求。
如果cache dirty 持续>20%,说明淘汰压力过大,这个时候用户线程会阻塞参与page 淘汰,请求时延就会增加。
方法一:
1、这个时候可以扩容规格 这个通过扩容内存,来降低由于内存规格太小,cache dirty 过小而导致的频繁触发dirty cache大于20%的可能。
方法二:
建议业务控制并发请求,如果是4.0以上的实例,可以通过下面的参数来优化刷脏能力 1. 将worker线程 刷盘阈值,和 app 线程 刷盘阈值 的间隔调大。尽量避免用户线程参与 2. 调大eviction线程数,利用多核优势,防止刷不过来
建议优化配置:
db.runCommand({"setParameter":1, "wiredTigerEngineRuntimeConfig":"eviction_dirty_target=4,eviction_dirty_trigger=50,eviction_target=60,eviction_trigger=95,eviction_checkpoint_target=5,eviction=(threads_max=16,threads_min=12)"})
配置调整可能会产生数据库连接的闪断,留意变更配置时的提醒,并确保程序侧具备断线重连的机制。
参数调整的时候需要结合业务场景,不能盲目调整。