如何在YugaByte DB中管理内存?我了解到yb-tserver
和yb-master
有两组流程,但是找不到太多其他细节。
具体问题:
默认情况下,每个进程使用多少RAM?
是否有一种方法可以对此进行明确控制?
大概,该内存用于缓存,内存表等。这些组件的大小如何?
可以将特定的表固定在内存中(或说在缓存中赋予更高的优先级)吗?
谢谢。
答案 0 :(得分:1)
默认情况下:
这些由gflag的默认设置确定
--default_memory_limit_to_ram_ratio
(分别为0.85和0.1
yb-tserver / yb-master)。
是的,有两个不同的选项可以控制为进程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)
总内存存储是这两个旋钮中的最小值:
--global_memstore_size_mb_max=2048
--global_memstore_size_percentage=10
我们目前(自1.1版起)还没有按表固定的提示。 但是,默认情况下,块缓存确实做得很好 将热块保留在缓存中。我们已将RocksDB的块缓存增强为 耐扫描。动机是防止诸如 长时间运行的扫描(例如,由于偶尔的大型查询或 后台Spark作业) 质量数据并清除有用/热门数据。