【问题标题】:Memtable type and size allocationMemtable 类型和大小分配
【发布时间】:2018-09-27 05:34:45
【问题描述】:

在 Cassandra 3.11.2 中,Memtable 分配的类型有 3 种选择,根据我的理解,如果我想将 Memtables 保留在 JVM 堆上,我可以使用 heap_buffers,如果我想要将 Memtables 存储在 JVM 堆之外,那么我有 2 个选项 offheap_buffersoffheap_objects

堆外分配的两种选择之间究竟有什么区别?

此外,可以在 YAML 文件中的两个位置设置允许用于 Memtables 的内存空间,即 memtable_heap_space_in_mbmemtable_offheap_space_in_mb

无论 Memtable 分配类型如何,我是否需要在堆和堆外配置一些空间,或者我是否需要根据我的 Memtable 分配类型仅设置其中一个空间,即 memtable_heap_space_in_mb 时仅在使用其他 2 个堆外选项中的任何一个时才使用 heap buffersmemtable_offheap_space_in_mb

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:
    • heap_buffers(这是默认设置)使用 Java NIO 在堆上分配内存表。

    • offheap_buffers 使用同一个 Java NIO 在堆上和堆外分配每个内存表的一部分。

    • offheap_objects 直接使用本机内存,因此 Cassandra 将自行管理 memtable 内存(分配和垃圾回收)。这个功能没有很好的文档记录,所以最好不要使用它。

    对于 memtable_heap_space_in_mbmemtable_offheap_space_in_mb 我认为最好坚持使用默认值。对于每个,默认值是总堆大小的 1/4。但是,如果您打算更改某些内容,最好进行非常小的更改,因为这会减少 Cassandra 可以使用的内存量。

    【讨论】:

    • 那么,如果我们使用 memtable 分配类型作为 'offheap_objects','memtable_heap_space_in_mb' 没有用吗?那么在这种情况下可以从 YAML 中注释掉吗?
    • 无论您使用哪种堆外设置变体,@VishalSharma 您仍将使用 memtable 堆空间。根据表中的列类型,您可能需要更多或更少的堆外和堆端。检查您的服务器日志,了解哪个 memtable 区域通常是触发刷新的限制因素,并考虑平衡两者,以使两者触发刷新的可能性大致相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2017-12-06
    • 2012-07-19
    • 1970-01-01
    • 2013-01-20
    • 2014-03-27
    相关资源
    最近更新 更多