YugaByte数据库中的内存是如何管理的?我理解存在两组过程CCD_ 1&yb-master
,但找不到太多其他详细信息。
具体问题:
-
这些进程默认使用多少RAM?
-
有没有办法明确控制这一点?
-
据推测,内存用于缓存、内存表等。这些组件的大小是多少?
-
特定的表是否可以固定在内存中(或者说在缓存中给予更高的优先级)?
提前感谢。
- 这些进程默认使用多少RAM
默认情况下:
- yb服务器进程假定85%的节点RAM可供使用。以及
- yb主进程假定10%的节点RAM可供其使用
这些由gflag的默认设置确定--default_memory_limit_to_ram_ratio
(分别为0.85和0.1yb服务器/yb主机)。
- 是否有明确控制的方法
是的,有两个不同的选项用于控制分配给进程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主机和yb服务器进程可以存在于单个VM上。
- 据推测,内存用于缓存、内存表等这些组件的大小
是的,内存的主要消耗者是块缓存、内存存储&飞行中的请求/RPC所需的内存。
块缓存:--db_block_cache_size_percentage=50 (default)
总内存是这两个旋钮中的最小值:--global_memstore_size_mb_max=2048
--global_memstore_size_percentage=10
- 特定的表是否可以固定在内存中(或者说给定更高的值缓存中的优先级)
我们目前(截至1.1)还没有每个表的钉扎提示。然而,默认情况下,块缓存已经做得很好了将热块保持在缓存中。我们已将RocksDB的块缓存增强为具有抗扫描性。其动机是阻止诸如长时间扫描(例如,由于偶尔的大型查询或background Spark作业),而不会污染整个缓存高质量数据和擦除有用/热门数据。