【最佳实践】巡检项:云数据库(MongoDB)Cache 脏数据

2022-04-13 18:09:49 浏览数 (1)

问题描述

检查腾讯云数据库 MongoDB 实例 dirty cache 脏页的比例是否大于cache size 的20%,如果超过20%,用户线程将参与刷盘,阻塞业务的请求。

解决方案

如果cache dirty 持续>20%,说明淘汰压力过大,这个时候用户线程会阻塞参与page 淘汰,请求时延就会增加。

方法一:

1、这个时候可以扩容规格 这个通过扩容内存,来降低由于内存规格太小,cache dirty 过小而导致的频繁触发dirty cache大于20%的可能。

  • 登录 MongoDB 控制台。
  • 在左侧导航栏 MongoDB 的下拉列表中,选择副本集实例或者分片实例。 副本集实例与分片实例操作类似。
  • 在右侧实例列表页面上方,选择地域。
  • 在实例列表中,找到目标实例。
  • 在目标实例的操作列,在配置调整的下拉列表中,选择配置调整
  • 配置调整页面,可以重新调整节点内存、节点中容量、Oplog 容量。如下图(以分片实例)所示。
扩容扩容

方法二:

建议业务控制并发请求,如果是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)"})

注意事项

配置调整可能会产生数据库连接的闪断,留意变更配置时的提醒,并确保程序侧具备断线重连的机制。

参数调整的时候需要结合业务场景,不能盲目调整。

0 人点赞