En Couchbase, la gestión de memoria en el servicio de consultas es clave para mantener el servicio eficiente y sensible, especialmente cuando el servicio maneja un número creciente de consultas simultáneamente. Sin una gestión adecuada de la memoria, las cosas pueden ir mal - consultas codiciosos pueden acaparar la memoria, y el uso combinado de memoria de múltiples consultas simultáneas puede abrumar el servicio, lo que lleva a un rendimiento degradado.
Afortunadamente, el servicio de consultas dispone de varias funciones que permiten a los usuarios gestionar el uso de memoria de las consultas y del servicio en general.
Este blog explorará estas características en detalle:
-
- Cuota de memoria por solicitud
- Límite de memoria blanda
- Cuota de memoria de documentos en todo el nodo
Cuota de memoria por petición
Una parte significativa del uso de memoria del servicio de consulta proviene de valores transitorios, que pueden incluir documentos o valores calculados. La memoria utilizada por estos valores transitorios se denominará memoria de documentos en el blog.
El servicio de Consulta recibe documentos del servicio de Datos como un flujo de bytes codificado. Sin embargo, la memoria utilizada por el valor asociado al documento puede ser mucho mayor que el flujo original. Esto se debe a que el servicio de consulta decodifica el flujo en una estructura que puede ser grande, ya que debe almacenar todos los campos, valores y objetos anidados. El servicio de consulta está optimizado para el rendimiento y no para la compacidad.
¿Qué ocurre si aparece una consulta que consume muchos recursos y empieza a consumir una gran cantidad de memoria del documento? Puede acabar acaparando memoria y provocar que otras consultas se paralicen. ¿Cómo podemos evitar que codicioso que no afecte a la ejecución de otras consultas activas?
Aquí es exactamente donde el cuota de memoria por solicitud ¡la función entra en escena!
Desde Couchbase 7.0, el servicio Query proporciona un ajuste llamado cuota de memoria para limitar la cantidad máxima de memoria de documentos que una petición de consulta puede utilizar en un momento dado durante su ejecución.
Esta cuota de memoria por petición funciona poniendo fin a una consulta si supera su cuota, al tiempo que permite que el resto de consultas activas continúen ejecutándose. Esto garantiza que sólo se detiene la consulta codiciosa, evitando que afecte al rendimiento de las demás consultas.
La cuota de memoria no se corresponde con el uso de memoria del sistema operativo. Es sólo tiene en cuenta el uso de memoria del documento y no la memoria utilizada en el montón, la pila, los operadores de ejecución, etc.
¿Cómo funciona la cuota de memoria?
La cuota de memoria por petición se puede considerar como la configuración de una reserva de memoria de documentos para una petición de consulta. El tamaño de la reserva viene determinado por el valor de la cuota de memoria de la consulta.
Cuando la consulta requiere un documento/valor, asigna el tamaño del documento/valor de este pool. Cuando el valor/documento ya no es necesario, el tamaño asignado se devuelve al pool para que pueda ser reutilizado por la consulta.
En un momento dado, la cantidad total de memoria de documentos utilizada por la solicitud de consulta no puede superar el tamaño de su reserva, es decir, su cuota de memoria. Si la consulta intenta utilizar más memoria de documentos de la que está disponible en su pool, la petición finalizará y se devolverá un error.
Es importante tener en cuenta que el servicio de consultas está altamente paralelizado y que los operadores pueden ejecutarse simultáneamente. Esto significa que el hecho de que una consulta supere su cuota de memoria puede variar de una ejecución a otra. Esto se debe a que, dependiendo de las características específicas de cada ejecución, la cantidad de memoria del documento que se está utilizando ( y por lo tanto asignada de su conjunto de peticiones) puede variar, incluso en la misma fase de ejecución.
Cómo configurar la cuota de memoria
La cuota de memoria por solicitud puede establecerse a nivel de clúster, nodo y solicitud.
-
- Unidad: MiB
- Por defecto: 0, es decir, no hay límite en la cantidad de memoria del documento que puede utilizar una solicitud.
Nivel de grupo
Establezca la cuota de memoria para cada nodo de consulta del clúster con la opción queryMemoryQuota configuración a nivel de cluster. El valor a nivel de clúster se mantiene y, cuando se establece, sobrescribe la configuración a nivel de nodo para cada nodo de consulta.
-
- Aprenda a establecer una configuración a nivel de clúster aquí
Nivel de nodo
Establezca la cuota de memoria para un nodo de consulta concreto con la opción cuota de memoria configuración a nivel de nodo. El valor establecido a nivel de nodo es la cuota de memoria por defecto para todas las peticiones de consulta ejecutadas en el nodo. El valor de nivel de nodo no se mantiene y se sobrescribe cuando se modifica la configuración de nivel de clúster.
-
- Aprende a establecer un ajuste a nivel de nodo aquí
Nivel de solicitud
Establezca la cuota de memoria para una solicitud de consulta concreta con la opción cuota_memoria parámetro. El parámetro de nivel de petición anula el valor del ajuste de nivel de nodo. Sin embargo, si el ajuste de nivel de nodo es mayor que cero, el valor de nivel de solicitud está limitado por el valor de nivel de nodo.
-
- Aprenda a establecer un parámetro de nivel de solicitud aquí
Límite de memoria blanda del servicio de consulta
Ahora que hemos explorado cómo limitar el uso de memoria de documento de una consulta, puede que te estés preguntando, ¿hay alguna forma de limitar el uso de memoria del servicio de Consulta?
El servicio de Consulta no tiene ninguna configuración para imponer un límite duro en el uso de memoria del servicio. Esto se debe a que el lenguaje de programación utilizado para desarrollar SQL++ no proporciona un mecanismo para imponer un límite duro en su uso de memoria en tiempo de ejecución. Pero sí proporciona un mecanismo para ajustar el límite suave de memoria...
Por lo tanto, en Couchbase 7.6.0 la función cuota de nodos para ajustar el límite de memoria blanda del servicio de consulta.
Como se trata de un límite blando, no hay garantía de que el uso de memoria del servicio de Consulta se mantenga siempre estrictamente por debajo de él o de que no se produzcan situaciones de falta de memoria. Sin embargo, se hace un esfuerzo para mantener el uso de memoria del servicio de Consulta por debajo de este límite ejecutando el recolector de basura (GC) con más frecuencia cuando este límite se cruza o se acerca mucho.
Nota importante:
Si el uso de memoria se mantiene cerca del límite suave, la GC se ejecuta agresivamente, lo que puede causar una alta utilización de la CPU.
Cómo configurar la cuota de nodos
La cuota de nodo puede establecerse a nivel de clúster, nodo y solicitud.
-
- Unidad: MiB
- Por defecto: 0
- Mínimo: 1
Aunque el valor mínimo de la cuota de nodo es de 1 MiB, por favor, ajusta la cuota de nodo a valores prácticos dependiendo de las cargas de trabajo y de las capacidades del sistema.
Nivel de grupo
Establezca la cuota de nodo para cada nodo de consulta en el clúster con la opción queryNodeQuota configuración a nivel de cluster. El valor a nivel de clúster se mantiene y, cuando se establece, sobrescribe la configuración a nivel de nodo para cada nodo de consulta.
-
- Aprenda a establecer una configuración a nivel de clúster aquí
Nota importante:
Una forma de configurar este ajuste en todo el cluster es usando la Consola Web de Couchbase. En la Consola Web, esto puede ser configurado bajo la opción Cuota de memoria por nodo servidor en la página de Configuración.
Esta sección es específica para configurar la cuota de nodos a nivel de cluster del servicio de consultas y no debe confundirse con la configuración de la cuota de memoria a nivel de cluster.
Nivel de nodo
Establezca la cuota de nodos para un nodo de consulta concreto con la opción nodo-cuota configuración a nivel de nodo. El valor establecido a nivel de nodo es la cuota de memoria por defecto para todas las peticiones de consulta ejecutadas en el nodo. El valor de nivel de nodo no se mantiene y se sobrescribe cuando se modifica la configuración de nivel de clúster.
-
- Aprende a establecer un ajuste a nivel de nodo aquí
Cómo configurar el límite de memoria blanda
El límite de memoria blanda del servicio de Consulta se establece utilizando el valor de la cuota del nodo. Si no se establece, se calcula un valor por defecto.
Cuota de nodos
Si se establece la cuota de nodo para un nodo, este es el límite de memoria blanda. El límite de memoria blanda se limitará a un valor máximo permitido que se calcula siguiendo estos pasos:
a) Se calcula la diferencia entre la RAM total del sistema y 90% de la RAM total del sistema.
RAM total del sistema - (0,9 * RAM total del sistema)
b) Si la diferencia es superior a 8 GiB, el límite máximo de memoria blanda será:
RAM total del sistema - 8 GiB
c) Si la diferencia es de 8 GiB o menos, el límite máximo de memoria blanda se fijará en 90% de la RAM total del sistema.
Si la cuota del nodo supera el máximo calculado, el límite de memoria blanda se establece silenciosamente en el máximo.
Por defecto
Si el ajuste de cuota de nodo no está configurado para un nodo, se calcula un valor por defecto para el límite suave utilizando los siguientes pasos:
a) Se calcula la diferencia entre la RAM total del sistema y 90% de la RAM total del sistema.
RAM total del sistema - (0,9 * RAM total del sistema)
b) Si la diferencia es superior a 8 GiB, el límite de memoria blanda por defecto será:
RAM total del sistema - 8 GiB
c) Si la diferencia es de 8 GiB o menos, el límite de memoria blanda por defecto se fijará en 90% de la RAM total del sistema.
Cuota de memoria de documentos en todo el nodo
¿Qué ocurre si una carga de trabajo tiene una consulta que requiere una gran cantidad de memoria para ejecutarse? Imponer una cuota de memoria por petición podría no ser lo ideal, ya que esta consulta podría finalizar con frecuencia por exceder su cuota. ¿Cómo puede ejecutarse con éxito esta consulta y, al mismo tiempo, proteger el servicio de consultas de un uso excesivo de memoria?
Consideremos otro escenario con múltiples consultas ejecutándose concurrentemente, cada una con una cuota de memoria por solicitud establecida. En este caso, el uso de memoria del servicio es muy elevado. Pero el uso de memoria del documento de las consultas permanece por debajo de sus cuotas respectivas. Por tanto, no se finaliza ninguna consulta. Como resultado, el uso global de memoria del servicio de consultas sigue siendo elevado, lo que causa problemas. ¿Cómo se puede solucionar este problema?
A partir de Couchbase 7.6.0, el servicio de consultas tiene un mecanismo para limitar la cantidad acumulada de memoria de documentos que las consultas activas pueden utilizar. La introducción de una cuota de memoria de documentos en todo el nodo intenta abordar estos retos.
¿Cómo funciona la cuota a nivel de nodo?
La cuota de todo el nodo se puede considerar como la configuración de un pool de memoria de documentos para todo el servicio de consultas de un nodo.
Cuando se establece la cuota de nodos, se crea un sesión de memoria para cada solicitud. Por defecto, esta sesión comienza con un tamaño inicial de 1 MiB. Cuando se configura la cuota de todo el nodo, se asigna 1 MiB a cada servidor y se resta de la reserva de todo el nodo. Esta asignación por defecto garantiza que cada servidor tenga al menos una cantidad mínima de espacio reservado, asegurando que las peticiones entrantes siempre puedan ser atendidas.
Cuando una petición requiere un valor/documento, el tamaño del valor/documento se asigna a partir de su sesión. Si la sesión no dispone de memoria suficiente para esta asignación, se crecer en incrementos mínimos de 1 MiB para acomodar la solicitud de asignación. La memoria adicional necesaria para este crecimiento se asigna desde el pool de todo el nodo.
Si la sesión de memoria de una petición activa intenta crecer más allá de la memoria restante disponible en el pool de todo el nodo, la petición se detendrá y se devolverá un error.
Una vez que la petición ya no necesita el valor/documento, devuelve el tamaño asignado de nuevo a su sesión.
La memoria de la sesión (excluyendo los 1 MiB de la reserva inicial del servidor) sólo se devuelve al pool del nodo una vez finalizada la ejecución de la petición.
En cualquier momento, el tamaño total de todas las sesiones de memoria no puede exceder el tamaño de la cuota de todo el nodo.
Es importante entender que esta sesión de memoria no debe confundirse con la reserva por petición que se configura cuando se establece la cuota de memoria para una petición. Se puede configurar tanto una cuota para todo el nodo como una cuota de memoria por petición. Leer Configuración de la cuota de documentos por nodo y de la cuota de memoria por petición para saber más.
De este modo, la cuota de todo el nodo pone un límite a la cantidad de memoria del documento que está siendo utilizada por todas las peticiones activas.
La cuota de documentos para todo el nodo sólo puede configurarse cuando el ajuste de cuota del nodo es explícitamente establecido para un nodo. El tamaño de esta cuota se calcula utilizando dos configuraciones de Consulta, cuota de nodos (analizado en una sección anterior) y nodo cuota valor por ciento.
¿Cómo configurar el porcentaje de cuota de nodo?
El valor porcentual de la cuota de nodo es el porcentaje de la cuota de nodo dedicado a la memoria de contenido de valor rastreado / "memoria de documento" en todas las solicitudes activas.
El porcentaje del valor de la cuota de nodo puede establecerse a nivel de clúster y de nodo.
-
- Unidad: MiB
- Por defecto: 67
- Mínimo: 0
- Máximo: 100
Nivel de grupo
Establezca el porcentaje del valor de cuota de nodo para cada nodo de consulta en el clúster con la opción queryNodeQuotaValPercent configuración a nivel de cluster. El valor a nivel de clúster se mantiene y, cuando se establece, sobrescribe la configuración a nivel de nodo para cada nodo de consulta.
-
- Aprenda a establecer una configuración a nivel de clúster aquí
Nivel de nodo
Establezca el porcentaje del valor de cuota de nodo para un nodo de consulta concreto con la opción node-quota-val-percent configuración a nivel de nodo. El valor establecido a nivel de nodo es la cuota de memoria por defecto para todas las peticiones de consulta ejecutadas en el nodo. El valor de nivel de nodo no se mantiene y se sobrescribe cuando se modifica la configuración de nivel de clúster.
-
- Aprende a establecer un ajuste a nivel de nodo aquí
Cómo configurar la cuota de memoria de documentos en todo el nodo
El tamaño de la cuota de memoria de documentos de todo el nodo se calcula en relación con la cuota del nodo. La cuota de nodo debe para configurar la cuota de memoria de documentos en todo el nodo.
El tamaño de la reserva del nodo se calcula siguiendo estos pasos:
1. Calcule el porcentaje de la cuota de nodos dedicado al seguimiento de la memoria de documentos en todas las consultas activas mediante la siguiente fórmula:
nodo-cuota * nodo-cuota-val-porcentaje / 100
2. Calcule el valor mínimo permitido para la cuota de memoria de documentos en todo el nodo.
La ejecución de las sentencias SQL++ es gestionada por servicers. Cuando se va a ejecutar una consulta, se asigna a un hilo servicer que se encarga de su ejecución. El servicio de consultas está configurado con una serie de servidores para gestionar las peticiones entrantes. Existen dos tipos de servidores, servidores sin límites y y administradores.
El motor de consultas reserva 1 MiB de memoria de documentos para cada servidor. Por lo tanto, el valor inicial por defecto de la sesión de memoria de cada petición es de 1 MiB. Esto significa que el uso de memoria de documento de referencia será el número total de servidores no limitados y más, medido en MiB.
Por lo tanto, el tamaño de la cuota de memoria de documentos en todo el nodo debe ser como mínimo igual al número de administradores, medido en MiB.
Fórmula 1
Cuota reservada a los administradores =
(número de administradores no limitados + número de administradores plus) MiB
3. El tamaño de la cuota de memoria de documentos para todo el nodo se calcula mediante la siguiente fórmula:
Fórmula 2
Tamaño de la cuota de memoria de documentos de todo el nodo
=
MAX( node-quota * node-quota-val-percent / 100, Cuota reservada a los administradores)
-
- La cuota reservada a los administradores se calcula mediante Fórmula 1
Este es el tamaño máximo permitido de todas las sesiones de memoria a través de solicitudes activas y incluye la reserva inicial para cada administrador.
Cálculo de la cuota disponible en el pool para el crecimiento de la memoria de documentos
La reserva inicial para los servidores se deduce de la cuota de memoria de documentos del nodo. Cualquier espacio restante en la reserva de memoria de todo el nodo puede ser utilizado por cada solicitud activa para aumentar su uso de memoria de documentos más allá de su reserva inicial de 1 MiB.
Esta cuota restante disponible para el crecimiento de la memoria del documento se calcula utilizando la siguiente fórmula:
Fórmula 3
Tamaño de la cuota de memoria de documentos de todo el nodo disponible para sesiones de memoria de solicitudes activas para crecer =
Tamaño de la cuota de memoria de documentos de todo el nodo - Cuota reservada a los administradores
-
- El tamaño de la cuota de memoria de documentos para todo el nodo se calcula en Fórmula 2
- La cuota reservada a los administradores se calcula mediante Fórmula 1
Es importante establecer valores adecuados de cuota de nodos y porcentaje de valor de cuota de nodos que sean prácticos y adecuados para las cargas de trabajo. Un ejemplo para ilustrar la importancia de esto:
Ejemplo
Consideremos un nodo de Consulta con 32 servidores sin límite y 128 servidores plus. El Administrador establece la cuota del nodo en 10 MiB. El nodo-quota-val-percent es el valor por defecto de 67.
Utilizando Fórmula 2 para calcular el tamaño de la cuota de memoria de documentos de todo el nodo:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Talla de nodo-ancho documento memoria cuota = MAX( nodo-cuota * nodo-cuota-val-por ciento / 100, Cuota reservado para servicers) = MAX( nodo-cuota * nodo-cuota-val-por ciento / 100, (número de sin límites servicers + número de y servicers) MiB ) = MAX ( 10 * 67 / 100 MiB, (32+128) MiB ) = MAX ( 6.7 MiB, 160 MiB) = 160 MiB |
Utilizando Fórmula 3 para calcular la cantidad de memoria de documento disponible en el pool de todo el nodo disponible para el crecimiento de memoria de las peticiones:
|
1 2 3 4 5 6 |
= Talla de nodo-ancho documento memoria cuota - (número de sin límites servicers + número de y servicers) MiB = 160 MiB - (32+128) MiB = 160 MiB - 160 MiB = 0 MiB |
Esto significa que no hay espacio para el crecimiento de la memoria documental de las peticiones más allá de su reserva inicial de 1 MiB. En otras palabras, cada petición es limitado a utilizar un máximo de 1 MiB de memoria de documento.
Además, la cuota de nodo de 10 MiB es muy pequeña, la recolección de basura probablemente se verá obligada a ejecutarse con frecuencia causando una alta utilización de la CPU.
Cifras de la memoria de documentos
Si la cuota de memoria fue establecida para una petición o se configuró un pool de memoria de documentos para todo el nodo, la información sobre la misma será reportada en varias características de SQL++ que serán exploradas más adelante. Esta información es útil para la depuración.
Salida de respuesta
a) Métricas:
En memoriautilizada en el campo métricas de la respuesta de la consulta informa del marca de pleamar (HWM) documentar el uso de memoria de la consulta en bytes.
El servicio de consulta está altamente paralelizado, y los operadores pueden ejecutarse simultáneamente. Como resultado, el memoriautilizada pueden variar de una ejecución a otra para la misma consulta. Esto se debe a que, dependiendo de las características específicas de cada ejecución, el uso de memoria del documento HWM puede ser diferente.
|
1 2 3 4 5 6 7 8 |
"métricas": { "tiempo transcurrido": "19.07875ms", "executionTime": "18.909916ms", "resultCount": 10000, "resultSize": 248890, "serviceLoad": 2, "memoriautilizada": 341420 } |
b) Sección de controles:
Si el controla La configuración de consulta está activada y el cuota de memoria configurado para la solicitud, el memoryQuota en el campo controla de la respuesta de la consulta informa del valor de la cuota de memoria establecida.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
"controles": { "scan_consistency": "ilimitado", "use_cbo": "true", "memoryQuota": "25", "n1ql_feat_ctrl": "0x4c", "disabledFeatures":[ "(Reservado para uso futuro) (0x40)", "Planes codificados (0x4)", "Golang UDFs (0x8)" ], "stmtType": "SELECCIONAR" } |
-
- Más información sobre la configuración de los controles aquí
Espacios de claves del sistema
sistema:solicitudes_realizadas, sistema:solicitudes_activas
En la entrada de una solicitud en estos espacios de claves del sistema:
En memoriautilizada es el campo HWM documentar el uso de memoria de la consulta en bytes. El servicio de consulta está altamente paralelizado, y los operadores pueden ejecutarse simultáneamente. Como resultado, el memoriautilizada pueden variar de una ejecución a otra para la misma consulta. Esto se debe a que, dependiendo de las características específicas de cada ejecución, el uso de memoria del documento HWM puede ser diferente.
En memoryQuota es el valor de la cuota de memoria fijada para la solicitud
Configuración de la cuota de memoria por solicitud y de la cuota de documentos en todo el nodo
Como se describe en el Cuota de memoria por solicitud si una petición tiene configurada una cuota de memoria, la cantidad máxima de memoria del documento que puede utilizar en un momento dado durante su ejecución está limitada por la cuota de memoria.
Además, como se explica en el Cuota de memoria de documentos en todo el nodo cuando se configura la cuota del nodo y una cuota de memoria de documentos para todo el nodo, cada petición obtiene su propia "sesión de memoria". Cualquier crecimiento en el tamaño de estas sesiones se asigna desde la cuota de memoria de documentos de todo el nodo.
Si se configura una cuota de memoria de documentos para todo el nodo y una solicitud tiene una cuota de memoria establecida, el uso de memoria de documentos de la solicitud de consulta se limita mediante ambos cuotas.
¿Cómo se realizaría una asignación de documentos/valores?
Cuando la solicitud requiere un documento/valor, se realizan los siguientes pasos durante el proceso de asignación:
- Asignación de sesiones de memoria:
-
- La petición intenta primero asignar memoria para el documento desde su sesión de memoria.
- Si hay espacio suficiente en la sesión, la asignación se realiza correctamente.
- Si no hay espacio suficiente en la sesión, ésta intenta aumentar su tamaño asignando espacio de la cuota de memoria de documentos de todo el nodo. (es decir, del "pool de memoria de documentos de todo el nodo" ).
- Si no hay espacio suficiente para el crecimiento de la sesión en el pool de todo el nodo, la petición se detendrá y se devolverá un error.
- Solicitar asignación de cuota de memoria:
-
- Si la asignación de la sesión tiene éxito, la petición intentará asignar memoria para el documento a partir de su cuota de memoria. ( es decir, de su "pool de memoria de petición").
- Si queda espacio suficiente en su cuota de memoria, la asignación se realiza con éxito y la solicitud continúa.
- Si no queda espacio suficiente en la cuota de memoria, la solicitud fallará y se devolverá un error.
Supervisión con sistema:vitales
El espacio de claves del sistema sistema:vitales contiene información importante sobre cada nodo Query en el cluster, incluyendo información relacionada con el uso de memoria y CPU, recolección de basura y mucho más. Los usuarios pueden utilizar este espacio clave del sistema para supervisar la salud y las constantes vitales de los nodos Query.
Hay dos formas de acceder a esta información:
1. Consultar el espacio de claves system:vitals utilizando SQL++.
SELECT * FROM sistema:vitales;
-
- Acceso a los datos vitales por nodo mediante el servicio de consulta /admin/vitales punto final.
curl -u $USER:$PASSWORD $QUERY_NODE_URL/admin/vitals
A continuación se muestra un ejemplo de registro en sistema:vitales para un nodo de consulta.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
{ "bucket.IO.stats": { "viaje-muestra": { "lee": 52090 } }, "núcleos": 12, "cpu.sys.percent": 0.005, "cpu.user.percent": 0.0056, "ffdc.total": 0, "gc.num": 64352224, "gc.pause.percent": 0, "gc.pausa.tiempo": "4.479336ms", "saludable": verdadero, "host.memoria.libre": 321028096, "host.memory.quota": 10485760000, "host.memoria.total": 38654705664, "host.memoria.valor_cuota": 7025459200, "carga": 0, "factor de carga": 6, "hora.local": "2024-12-05T17:21:25.609+05:30", "memoria.sistema": 584662408, "memoria.total": 3884613696, "uso.memoria": 25302328, "nodo": "127.0.0.1:8091", "nodo.asignado.valores": 613916, "nodo.memoria.uso": 251658240, "uso.memoria.proceso": 0, "process.percore.cpupercent": 0, "proceso.rss": 629309440, "proceso.servicio.uso": 0, "request.active.count": 1, "request.completed.count": 41, "solicitud.por.seg.15min": 0.0221, "solicitud.por.seg.1min": 0.0136, "solicitud.por.seg.5min": 0.017, "request.prepared.percent": 0, "request.queued.count": 0, "request_time.80percentile": "63.969209ms", "tiempo_solicitud.95percentil": "74.865437ms", "tiempo_solicitud.99percentil": "150.904625ms", "request_time.mean": "37.019323ms", "request_time.median": "39.115791ms", "servicers.paused.count": 0, "servicers.paused.total": 0, "temp.hwm": 0, "temp.usage": 0, "total.hilos": 411, "tiempo de actividad": "12m48.431007375s", "version": "7.6.0-N1QL" } |
¿Cómo activa el servicio de consultas el recolector de basura?
A partir de la versión 7.6.0, el servicio de consultas comprueba de forma rutinaria si el recolector de basura (GC) se ha ejecutado en los últimos 30 segundos. Si no lo ha hecho, se activa el GC para que se ejecute. Durante esta comprobación, también se monitoriza la cantidad de memoria libre del sistema. Si la cantidad de memoria libre es inferior a 25%, se intenta devolver al sistema operativo tanta memoria como sea posible.
Ejecutar el recolector de basura bajo demanda
A partir de 7.6.0, el servicio Query proporciona un punto final REST /admin/gc que puede ser invocado para ejecutar el recolector de basura. Este punto final puede invocarse para activar una ejecución del GC en un intento de reducir la utilización de la memoria.
Para forzar la ejecución de una GC, envíe una solicitud GET a la API:
curl -u $USER:$PASSWORD $QUERY_NODE_URL/admin/gc
Para forzar una ejecución de GC e intentar devolver tanta memoria al SO como sea posible emita una petición POST a la API
curl -X POST -u $USER:$PASSWORD $QUERY_NODE_URL/admin/gc
-
- Más información sobre este punto final aquí.
Nota importante:
La ejecución agresiva del recolector de basura puede causar una alta utilización de la CPU.