

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Neptune 字典垃圾回收
<a name="storage-gc"></a>

 Neptune 支持字典垃圾回收（GC），您可以通过属性图形数据的 `neptune_lab_mode` [参数](parameters.md)启用该功能。如果未启用 `neptune_streams`，则您可以为仅包含属性图形数据的集群启用该功能。如果已启用 `neptune_streams` 或存在任何未过期的 `neptune_streams` 数据，则该功能将自动禁用。要启用该功能，需要重启写入器实例。该功能从引擎发行版本 [1.4.3.0](https://docs.aws.amazon.com/releases/release-1.4.3.0.xml) 开始推出。

 启用后，后台作业会清理未使用的字典条目。它不会减少`VolumeBytesUsed`，而是为新的插入腾出索引中的空间。与未启用字典 GC 时相比，启用字典 GC 时的 `VolumeBytesUsed` 增长率可能会降低。

 字典垃圾回收在后台运行，并扫描所有图形和字典数据以查找未使用的词语。一旦大约 6% 的数据发生变化，则会在启动时触发新的运行。GC 与查询线程争夺服务器资源，例如 CPU、缓冲区缓存、撤消日志生成和写入 I/O 操作，这可能会降低查询吞吐量。由于 GC 会扫描未被查询主动触及的数据，因此可能会影响写入器节点上的缓冲区缓存。当 GC 执行新的删除 I/O 操作时，集群可能会看到额外的写入操作并有更多撤消日志需要清除，这也可能导致`UndoLogListSize`指标值更高。

 GC 可以在两种模式下运行，`soft_delete`和`enabled`。在该`soft_delete`模式下运行时，未使用的字典条目将被标记为已删除（soft\$1delete），但不会被显式删除。此模式还可用于了解后台操作开启后的性能功能。使用该`enabled`模式时，条目会被显式删除（“硬” 删除）。建议在切换到 `enabled` 模式之前，在 `soft_delete` 模式下运行 GC 一段时间。

 字典 GC 支持的最大并发度为 16（在具有 16 个或更多内核的计算机上）。默认情况下，它以单线程运行，但首次启用时可以更高的并发度运行。字典 GC 线程的运行优先级与查询线程相同，它们平等地争夺写入器上的资源。

 您可以通过设置 `DictionaryGCMode` 键通过 `neptune_lab_mode` [参数](parameters.md)启用字典 GC。它接受三个可能的值：`disabled`（默认）、`soft_delete` 或 `enabled`。例如，以下代码示例会将 `DictionaryGCMode` 设置为 `soft_delete`：

```
neptune_lab_mode = 'DictionaryGCMode=soft_delete'
```

 并发度[参数](parameters.md) `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 万。