首页 > 解决方案 > YugaByte DB 中的内存是如何管理的?

问题描述

YugaByte DB 中的内存是如何管理的?我知道有两组流程yb-tserver& yb-master,但找不到太多其他细节。

具体问题:

  1. 默认情况下,每个进程使用多少 RAM?

  2. 有没有办法明确控制这个?

  3. 据推测,内存用于缓存、memtables 等。这些组件的大小如何?

  4. 可以将特定表固定在内存中(或者说在缓存中给予更高的优先级)吗?

提前致谢。

标签: databasedistributed-databaseyugabyte-db

解决方案


  1. 默认情况下,每个进程使用多少 RAM?

默认:

  • yb-tserver 进程假定节点的 85% 的 RAM 可供其使用。和
  • yb-master 进程假定节点的 10% 的 RAM 可供其使用。

这些由 gflag 的默认设置确定 --default_memory_limit_to_ram_ratio(yb-tserver/yb-master 分别为 0.85 和 0.1)。

  1. 有没有办法明确控制这个?

是的,有 2 个不同的选项可用于控制分配给进程 yb-master 和 yb-tserver 的内存量:

选项 A)您可以设置--default_memory_limit_to_ram_ratio控制进程应使用的节点 RAM 的百分比。

选项 B) 您也可以使用 指定绝对值 --memory_limit_hard_bytes。例如,要为 yb-tserver 提供 32GB 的 RAM,请使用:

--memory_limit_hard_bytes 34359738368

由于您独立启动这两个进程,因此您可以使用 yb-master 或 yb-tserver 的任一选项。只需确保您没有超额订阅总机器内存,因为 yb-master 和 yb-tserver 进程可以存在于单个 VM 上。

  1. 据推测,内存用于缓存、memtables 等。这些组件的大小如何?

是的,内存的主要消费者是请求/RPC 所需的块缓存、内存存储和内存。

块缓存: --db_block_cache_size_percentage=50 (default)

Total memstore 是这两个旋钮中的最小值: --global_memstore_size_mb_max=2048 --global_memstore_size_percentage=10

  1. 可以将特定表固定在内存中(或者说在缓存中给予更高的优先级)吗?

我们目前(从 1.1 开始)还没有按表固定的提示。但是,默认情况下,块缓存在将热块保存在缓存中方面确实做得很好。我们增强了 RocksDB 的块缓存以防扫描。其动机是防止诸如长时间运行的扫描(例如,由于偶尔的大型查询或后台 Spark 作业)等操作用低质量数据污染整个缓存并清除有用/热数据。


推荐阅读