YugaByte DB 中的内存是如何管理的?我知道有两组流程yb-tserver
& yb-master
,但找不到太多其他细节。
具体问题:
默认情况下,每个进程使用多少 RAM?
有没有办法明确控制这个?
据推测,内存用于缓存、memtables 等。这些组件的大小如何?
可以将特定表固定在内存中(或者说在缓存中给予更高的优先级)吗?
提前致谢。
YugaByte DB 中的内存是如何管理的?我知道有两组流程yb-tserver
& yb-master
,但找不到太多其他细节。
具体问题:
默认情况下,每个进程使用多少 RAM?
有没有办法明确控制这个?
据推测,内存用于缓存、memtables 等。这些组件的大小如何?
可以将特定表固定在内存中(或者说在缓存中给予更高的优先级)吗?
提前致谢。
默认:
这些由 gflag 的默认设置确定
--default_memory_limit_to_ram_ratio
(yb-tserver/yb-master 分别为 0.85 和 0.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 上。
是的,内存的主要消费者是请求/RPC 所需的块缓存、内存存储和内存。
块缓存:
--db_block_cache_size_percentage=50 (default)
Total memstore 是这两个旋钮中的最小值:
--global_memstore_size_mb_max=2048
--global_memstore_size_percentage=10
我们目前(从 1.1 开始)还没有按表固定的提示。但是,默认情况下,块缓存在将热块保存在缓存中方面确实做得很好。我们增强了 RocksDB 的块缓存以防扫描。其动机是防止诸如长时间运行的扫描(例如,由于偶尔的大型查询或后台 Spark 作业)等操作用低质量数据污染整个缓存并清除有用/热数据。