Soluciona problemas de consultas de grupos de lectura

En esta página, se describen las técnicas para investigar y depurar las consultas que AlloyDB para PostgreSQL envía a una instancia de grupo de lectura:

  • Ver una lista detallada de los nodos constituyentes de un grupo de lectura, incluidas sus direcciones IP
  • Conectarse directamente a un nodo para depurar
  • Examinar los registros de AlloyDB para determinar qué nodo en particular está administrando una consulta enviada a un grupo de lectura
  • Consulta los registros para ver toda la actividad reciente de un nodo de grupo de lectura determinado.
  • Visualizar las métricas de Google Cloud asociadas con un nodo del grupo de lectura

Cuando se usan juntas, estas técnicas te brindan acceso de diagnóstico y depuración a tus grupos de lectura. Por ejemplo, si uno de los grupos de lectura de tu clúster usa una cantidad inusual de CPU mientras procesa una consulta de larga duración, estas técnicas te permiten determinar qué nodo controla esa consulta y, luego, conectarte directamente a ese nodo para examinarla o finalizarla.

Muestra los detalles de los nodos de un grupo de lectura

En el uso normal de AlloyDB, no necesitas conocer las identidades ni las direcciones de los nodos que conforman tus grupos de lectura. Sin embargo, cuando sea necesario, puedes ver una lista de los nodos de una instancia del grupo de lectura. Cada nodo de la lista incluye la siguiente información útil para el diagnóstico y la depuración posteriores:

Para ver las cadenas de ID internas y las direcciones IP de los nodos de un grupo de lectura, sigue las instrucciones específicas de gcloud en Cómo ver los detalles de una instancia, pero agrega un argumento de línea de comandos --view=FULL adicional:

gcloud

gcloud alloydb instances describe READ_POOL_ID \
 --region=REGION_ID \
 --cluster=CLUSTER_ID \
 --project=PROJECT_ID \
 --view=FULL

Reemplaza lo siguiente:

  • READ_POOL_ID: Es el ID del grupo de lectura.
  • REGION_ID: El ID de región de la instancia.
  • CLUSTER_ID: Es el ID del clúster de la instancia.
  • PROJECT_ID: El ID del proyecto de la instancia.

El resultado incluye una sección etiquetada como nodes, que se parece a la siguiente:

nodes:
- id: READ_POOL_INSTANCE_ID-edd4f6ed-hcfh
  ip: 10.90.80.57
  state: HEALTHY
  zoneId: us-central1-b
- id: READ_POOL_INSTANCE_ID-edd4f6ed-ldbm
  ip: 10.90.80.56
  state: HEALTHY
  zoneId: us-central1-c

Los campos id y ip de cada entrada son especialmente relevantes para las otras técnicas que se describen en esta página:

  • El campo ip muestra la dirección IP del nodo dentro de la VPC del clúster.

  • El campo id contiene la cadena de ID completa de Google Cloud del nodo. Solo los cuatro últimos caracteres de esta cadena aparecen en las entradas registradas de un nodo.

    Por ejemplo, para encontrar entradas de registro que involucren el primero de los dos nudos en el resultado de muestra anterior, consulta los registros con la cadena de ID hcfh.

Cómo conectarse directamente a un nodo

Una vez que conozcas la dirección IP de un nodo, podrás conectarte directamente a su servidor PostgreSQL. Por ejemplo, para usar psql y conectarte a una VM en la VPC de tu clúster, sigue las instrucciones que se indican en Ejecuta el cliente psql. Cuando lo hagas, proporciona la dirección IP del nodo en lugar de la de su instancia de grupo de lectura:

psql -h NODE_IP_ADDRESS -U USERNAME

Cómo encontrar la actividad del nodo en los registros

AlloyDB incluye IDs de nodos en las entradas de registro sobre las consultas que manejan los grupos de lectura. En general, puedes usar estos IDs detectados de dos maneras:

  • Determina la IP de ese nodo para poder conectarte a él.
  • Realiza más consultas de registro para obtener más información sobre la actividad reciente del nodo.

Determina qué nodo controla una consulta conocida

Si sabes que un grupo de lectura determinado está procesando una consulta de larga duración, el Explorador de registros puede ayudarte a determinar el ID del nodo específico que controla esa consulta.

Ten en cuenta que esta técnica solo funciona en instancias de grupo de lectura que habilitaron la extensión pgAudit.

  1. Visita el Explorador de registros:

    Ir al Explorador de registros.

  2. En el compilador de consultas, agrega resource.labels.instance_id="READ_POOL_ID" al campo del editor de consultas y reemplaza READ_POOL_ID por el nombre de tu instancia del grupo de lectura.

  3. Agrega la instrucción de SQL que estás investigando, de forma total o parcial, al campo del editor de consultas. Por ejemplo: select id from MyTable. Esta entrada no distingue mayúsculas de minúsculas.

  4. Haz clic en Ejecutar consulta.

  5. Usa los controles del Explorador de registros para ajustar y volver a ejecutar la consulta según sea necesario para filtrar los resultados hasta los más relevantes.

  6. Haz clic en una entrada de registro de la lista de resultados para expandir su visualización.

  7. Haz clic en el campo labels en la visualización expandida de la entrada.

  8. Ten en cuenta el valor de NODE_ID en labels.

El resultado es el identificador de cuatro caracteres del nodo que controla la consulta.

Cómo conectarse a un nodo mencionado en una entrada de registro

Si deseas conectarte directamente al servidor PostgreSQL de un nodo en particular según su actividad registrada, sigue estos pasos:

  1. Anota la cadena de ID de cuatro caracteres del nodo registrado. Puedes encontrar este ID en el campo NODE_ID de la entrada de registro.

  2. Enumera los nodos del grupo de lectura.

  3. En esa lista, busca un nodo con la cadena de ID que termina con los cuatro caracteres que anotaste en el primer paso. Es posible que ninguno de los nodos enumerados coincida.

  4. Si encuentras un nodo coincidente, usa su dirección IP coincidente para conectarte al servidor de PostgreSQL de ese nodo.

    De lo contrario, si ninguno de los nodos del grupo de lectura que se enumeran en el paso anterior tiene IDs que coincidan con el nodo registrado, el grupo de lectura desactivó ese nodo en el tiempo transcurrido desde la entrada de registro original. Este es el comportamiento normal de los grupos de lectura de AlloyDB, como se describe en Nota sobre la efímeridad de los nodos. En este caso, no puedes establecer una conexión directa con ese nodo.

Una vez que te conectes al servidor de PostgreSQL de un nodo, puedes usar técnicas de supervisión estándar de PostgreSQL, como pg_stat_activity, para investigar en más detalle los procesos actuales del nodo y ajustarlos según sea necesario.

Cómo ver más entradas de registro sobre un nodo

Para ver la actividad registrada más reciente sobre un nodo con un ID específico, haz lo siguiente:

  1. Visita el Explorador de registros:

    Ir al Explorador de registros.

  2. Agrega labels.NODE_ID=NODE_ID al compilador de consultas del Explorador de registros y reemplaza NODE_ID por la cadena de ID de cuatro caracteres del nodo.

  3. Haz clic en Ejecutar consulta para ver toda la actividad de ese nodo dentro del período seleccionado, o bien ajusta la consulta para filtrar aún más.

  4. Repite el paso anterior según sea necesario para definir mejor tu búsqueda.

Supervisa las métricas del nodo

Puedes ver las métricas asociadas con nodos individuales en el panel de estadísticas del sistema de AlloyDB. Para obtener más información sobre las métricas de nodos disponibles, consulta la referencia de métricas de estadísticas del sistema.

Para obtener información sobre qué IDs de nodos están asociados con una instancia de grupo de lectura en particular, consulta Cómo enumerar los detalles de los nodos de un grupo de lectura.

Para obtener la documentación de referencia completa de estas y otras métricas de AlloyDB, consulta alloydb en "Métricas deGoogle Cloud ".

Nota sobre la efímera del nodo

Si bien puedes conectarte de forma segura a un nodo para realizar investigaciones temporales o debugging, las aplicaciones que usan grupos de lectura siempre deben conectarse a esos grupos a nivel de la instancia, con la dirección IP que muestra el clúster en su lista de instancias.

AlloyDB trata los nodos de sus grupos de lectura como recursos efímeros e intercambiables. El servicio cambia la lista de nodos de un grupo de lectura con la frecuencia necesaria para mantener esa instancia del grupo de lectura equilibrada en la carga y responsiva. Una aplicación que se conecta directamente a un nodo del grupo de lectura, en lugar de a una instancia del grupo de lectura, corre el riesgo de desconectarse abruptamente de tu base de datos cada vez que AlloyDB actualiza la lista de nodos de la instancia.

Permite que tus aplicaciones se conecten a tus grupos de lectura a nivel de la instancia y deja que AlloyDB haga el trabajo de enrutar tus consultas de forma eficiente a los nodos adecuados.

¿Qué sigue?