Solucionar problemas con las consultas de grupos de lectura

En esta página se describen 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 que componen un grupo de lectura, incluidas sus direcciones IP.
  • Conectarse directamente a un nodo para depurar.
  • Examinar los registros de AlloyDB para determinar qué nodo concreto está gestionando una consulta enviada a un grupo de lectura.
  • Consultar los registros de toda la actividad reciente de un nodo de grupo de lectura determinado.
  • Ver las Google Cloud métricas asociadas a un nodo de grupo de lectura.

Si se usan juntas, estas técnicas te permiten acceder a los diagnósticos y a la depuración de tus pools de lectura. Por ejemplo, si uno de los grupos de lectura de tu clúster está usando una cantidad inusual de CPU mientras procesa una consulta de larga duración, estas técnicas te permiten determinar qué nodo está gestionando esa consulta y, a continuación, conectarte directamente a ese nodo para examinar o finalizar la consulta.

Mostrar los detalles de los nodos de un grupo de lectura

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

Para ver las cadenas de ID interno y las direcciones IP de los nodos de un grupo de lectura, sigue las instrucciones específicas de gcloud en el artículo Ver detalles de la instancia, pero añade 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

Haz los cambios siguientes:

  • READ_POOL_ID: ID del grupo de lectura.
  • REGION_ID: el ID de la región de la instancia.
  • CLUSTER_ID: 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, similar a esta:

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 descritas en esta página:

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

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

    Por ejemplo, para buscar entradas de registro que incluyan el primero de los dos nodos de la salida de ejemplo anterior, consulta los registros con la cadena de ID hcfh.

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 de la VPC de tu clúster, sigue las instrucciones que se indican en Ejecutar 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

Buscar actividad de nodos en los registros

AlloyDB incluye IDs de nodo en las entradas de registro sobre las consultas gestionadas por los grupos de lectura. Por lo general, puedes usar estos IDs descubiertos de dos formas:

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

Determinar qué nodo está gestionando una consulta conocida

Si sabes que un determinado grupo de lectura está procesando una consulta de larga duración, Log Explorer puede ayudarte a determinar el ID del nodo concreto que gestiona esa consulta.

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

  1. Ve al Explorador de registros:

    Ir al Explorador de registros

  2. En el generador de consultas, añade resource.labels.instance_id="READ_POOL_ID" al campo del editor de consultas y sustituye READ_POOL_ID por el nombre de tu instancia de grupo de lectura.

  3. Añade la instrucción SQL que estés investigando, completa o parcialmente, al campo del editor de consultas. Por ejemplo: select id from MyTable. En esta entrada no se distingue entre mayúsculas y minúsculas.

  4. Haz clic en Realizar una consulta.

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

  6. Haz clic en una entrada de registro de la lista de resultados para ampliarla.

  7. Haz clic en el campo labels de la vista ampliada de la entrada.

  8. Anota el valor de NODE_ID en labels.

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

Conectarse a un nodo mencionado en una entrada de registro

Si quieres conectarte directamente al servidor PostgreSQL de un nodo concreto en función de su actividad registrada, sigue estos pasos:

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

  2. Lista los nodos del grupo de lectura.

  3. En esa lista, busca un nodo con la cadena de ID que termine con los cuatro caracteres que has anotado en el primer paso. Es posible que no coincida ninguno de los nodos de la lista.

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

    De lo contrario, si ninguno de los nodos del grupo de lectura que se han indicado en el paso anterior tiene IDs que coincidan con el nodo registrado, el grupo de lectura habrá retirado ese nodo en el tiempo transcurrido desde la entrada de registro original. Este es el comportamiento normal de los grupos de lectura de AlloyDB, tal como se describe en la nota sobre la efimeridad de los nodos. En este caso, no puedes establecer una conexión directa con ese nodo.

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

Ver más entradas de registro sobre un nodo

Para ver la actividad registrada más reciente de un nodo con un ID específico, sigue estos pasos:

  1. Ve al Explorador de registros:

    Ir al Explorador de registros

  2. Añade labels.NODE_ID=NODE_ID al generador de consultas de Explorador de registros y sustituye 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 en el periodo seleccionado o ajusta la consulta para filtrar aún más los resultados.

  4. Repite el paso anterior según sea necesario para acotar la búsqueda.

Monitorizar métricas de nodos

Puede ver las métricas asociadas a nodos concretos en el panel de control 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 saber qué IDs de nodo están asociados a una instancia de grupo de lectura concreta, consulta Listar los detalles de los nodos de un grupo de lectura.

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

Nota sobre la efimeridad de los nodos

Aunque puedes conectarte de forma segura a un nodo para hacer investigaciones temporales o depuraciones, las aplicaciones que usan grupos de lectura siempre deben conectarse a esos grupos a nivel de instancia, usando la dirección IP que su clúster muestra 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 la instancia del grupo de lectura con la carga equilibrada y con capacidad de respuesta. Una aplicación que se conecta directamente a un nodo de un pool de lectura, en lugar de a una instancia de un pool de lectura, corre el riesgo de desconectarse bruscamente de tu base de datos cada vez que AlloyDB actualice la lista de nodos de la instancia.

Permite siempre que tus aplicaciones se conecten a tus grupos de lectura a nivel de instancia y deja que AlloyDB se encargue de enrutar de forma eficiente tus consultas a los nodos adecuados.

Siguientes pasos