本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Neptune 字典垃圾回收
Neptune 支持字典垃圾回收(GC),您可以通过属性图形数据的 neptune_lab_mode 参数启用该功能。如果未启用 neptune_streams,则您可以为仅包含属性图形数据的集群启用该功能。如果已启用 neptune_streams 或存在任何未过期的 neptune_streams 数据,则该功能将自动禁用。要启用该功能,需要重启写入器实例。该功能从引擎发行版本 1.4.3.0 开始推出。
启用后,后台作业会清理未使用的字典条目。它不会减少 VolumeBytesUsed,而是会为新的插入腾出索引中的空间。与未启用字典 GC 时相比,启用字典 GC 时的 VolumeBytesUsed 增长率可能会降低。
字典垃圾回收在后台运行,并扫描所有图形和字典数据以查找未使用的词语。一旦大约 6% 的数据发生变化,则会在启动时触发新的运行。它与查询线程争夺头节点资源,例如 CPU、缓冲区缓存、撤消日志生成和写入 I/O 操作,这可能会对查询吞吐量产生负面影响。由于 GC 会扫描未被查询主动触及的数据,因此可能会影响写入器节点上的缓冲区缓存。当 GC 执行新的删除 I/O 操作时,集群可能会看到额外的写入操作并有更多撤消日志需要清除,这也可能导致UndoLogListSize指标值更高。
GC 可以在两种模式下运行:soft_delete 和 enabled。在 soft_delete 模式下运行时,未使用的字典条目将被标记为已删除(soft_delete),但不会被显式删除。此模式还可用于了解后台操作开启后的性能功能。使用 enabled 模式时,条目会被显式删除(“硬”删除)。建议在切换到 enabled 模式之前,在 soft_delete 模式下运行 GC 一段时间。
字典 GC 支持的最大并发度为 16(在具有 16 个或更多内核的计算机上)。默认情况下,它以单线程运行,但首次启用时可以更高的并发度运行。字典 GC 线程的运行优先级与查询线程相同,它们平等地争夺写入器上的资源。
您可以通过设置 DictionaryGCMode 键通过 neptune_lab_mode 参数启用字典 GC。它接受三个可能的值:disabled(默认)、soft_delete 或 enabled。例如,以下代码示例会将 DictionaryGCMode 设置为 soft_delete:
neptune_lab_mode = 'DictionaryGCMode=soft_delete'
并发度参数 DictionaryGCConcurrency 是可选的,其值可以介于 1 到 16 之间。如果设置为高于最小值 16 和内核数的值,则并发度上限为该值。
neptune_lab_mode = 'DictionaryGCMode=soft_delete,DictionaryGCConcurrency=2'
服务器启动后,一旦有一些可用数据,字典 GC 作业将在后台启用。引擎状态显示字典 GC 的当前状态。下面显示的示例输出显示字典 GC 处于 soft_delete 模式并以 2 的并发度运行。如果后台作业正在运行,则它可能正在主动扫描未使用的字典条目并将其删除,或者正在等待新的删除集触发新一轮的 GC。
{"status":"healthy",...,"labMode":{"ObjectIndex":"disabled","DictionaryGC":"{Mode=enabled,Concurrency=2}"},...}
当满足以下任一条件时,字典 GC 会暂停:
-
主动批量加载。
-
可用内存小于 15 Gb。
-
UndoLogListSize高于 100 万。