Recopilación de elementos no utilizados en el diccionario de Neptune
Neptune admite la recopilación de elementos no utilizados (GC) en el diccionario, que se puede habilitar mediante el parámetro neptune_lab_mode para los datos de gráficos de propiedades. Se puede habilitar para clústeres que solo contengan datos de gráficos de propiedades cuando neptune_streams no esté habilitado. La característica se deshabilita automáticamente si neptune_streams está habilitado o si hay datos neptune_streams que no hayan caducado. La característica requiere el reinicio de la instancia del escritor para activarse. Esta característica está disponible a partir de la versión 1.4.3.0 del motor.
Cuando está habilitada, las entradas del diccionario que no se utilizan se limpian mediante un trabajo en segundo plano. No reduce VolumeBytesUsed, sino que libera espacio en el índice para nuevas inserciones. Es probable que la tasa de crecimiento de VolumeBytesUsed sea menor cuando la GC del diccionario está habilitada en comparación con cuando no lo está.
La recopilación de elementos no utilizados en el diccionario se ejecuta en segundo plano y analiza todos los datos del gráfico y del diccionario para encontrar términos que no se utilizan. Una vez que se ha modificado aproximadamente el 6 % de los datos, se activa una nueva ejecución en el arranque. Compite con los subprocesos de consulta por recursos del nodo principal, como la CPU, la caché del búfer, la generación de registros undo y las operaciones de E/S de escritura, lo que podría afectar negativamente al rendimiento de la consulta. Dado que la GC analiza datos que las consultas no modifican activamente, puede afectar a la caché del búfer del nodo de escritura. El clúster podría realizar más operaciones de E/S de escritura y tener más registros undo que purgar a medida que la GC realiza nuevas eliminaciones, lo que también puede generar valores más altos para la métrica UndoLogListSize.
La GC se puede ejecutar en dos modos: soft_delete y enabled. Cuando se ejecuta en el modo soft_delete, las entradas del diccionario que no se utilizan se marcan como eliminadas (soft_delete), pero no se eliminan de forma explícita. Este modo también se puede utilizar para comprender las características de rendimiento una vez activada la operación en segundo plano. Cuando se utiliza el modo habilitado, las entradas se eliminan de forma explícita (eliminación “definitiva”). Se recomienda ejecutar la GC en el modo soft_delete durante un tiempo antes de cambiar al modo enabled.
La GC en el diccionario admite una simultaneidad máxima de 16 (en máquinas con 16 o más núcleos). Se ejecuta de forma predeterminada con un solo subproceso, pero se puede ejecutar con una mayor simultaneidad cuando se habilita por primera vez. Los subprocesos de GC en el diccionario se ejecutan con la misma prioridad que los subprocesos de consulta y compiten por los recursos del escritor de forma equitativa.
La GC en el diccionario se puede habilitar a través del parámetro neptune_lab_modeconfigurando la clave DictionaryGCMode. Acepta tres valores posibles: disabled (predeterminado), soft_delete oenabled. Por ejemplo, el siguiente ejemplo de código establece DictionaryGCMode en soft_delete:
neptune_lab_mode = 'DictionaryGCMode=soft_delete'
El parámetro de simultaneidad, DictionaryGCConcurrency, es opcional y puede tener un valor entre 1 y 16. Si se establece en un valor superior al mínimo de 16 y al número de núcleos, la simultaneidad se limita a ese valor.
neptune_lab_mode = 'DictionaryGCMode=soft_delete,DictionaryGCConcurrency=2'
El trabajo de GC en el diccionario se habilita en segundo plano después de que se inicie el servidor, una vez que hay datos disponibles. El estado del motor muestra el estado actual de GC en el diccionario. El ejemplo de salida que se muestra a continuación indica que la GC en el diccionario está en modo soft_delete y se ejecuta con una simultaneidad de 2. Si el trabajo en segundo plano se está ejecutando, puede que esté buscando activamente entradas del diccionario que no estén en uso y eliminándolas, o esperando a que un nuevo conjunto de eliminaciones active una nueva ronda de GC.
{"status":"healthy",...,"labMode":{"ObjectIndex":"disabled","DictionaryGC":"{Mode=enabled,Concurrency=2}"},...}
La GC en el diccionario se detiene cuando se cumple cualquiera de estas condiciones:
-
Carga masiva activa.
-
La memoria que se puede liberar es inferior a 15 GB.
-
UndoLogListSizees superior a 1 000 000.