Come posso risolvere i problemi di pinning delle connessioni del Server proxy per Amazon RDS?
Desidero risolvere i problemi di pinning delle connessioni quando utilizzo il proxy Amazon Relational Database Services (Amazon RDS) per accedere al database di destinazione.
Risoluzione
Esamina le metriche di CloudWatch
Completa i seguenti passaggi:
- Apri la console Amazon CloudWatch.
- Nel pannello di navigazione, scegli Metriche, quindi seleziona Tutte le metriche.
- Nella scheda Sfoglia, scegli RDS e Metriche per proxy.
- Cerca la metrica DatabaseConnectionsCurrentlySessionPinned.
La metrica DatabaseConnectionsCurrentlySessionPinned mostra il numero di connessioni al database vincolate dal proxy RDS ogni 60 secondi. Quando le operazioni nella richiesta del client modificano lo stato della sessione, il Server proxy RDS vincola le connessioni.
Nota: la metrica DatabaseConnectionsCurrentlySessionPinned inizia a registrare quando il Server proxy RDS rileva la prima connessione vincolata e si interrompe quando la connessione vincolata ha valori NULL.
Rivedi gli eventi del log del Server proxy RDS
Per ottenere informazioni dettagliate sulle istruzioni SQL e sulle operazioni interne del Server proxy RDS, modifica il proxy in modo da attivare la registrazione avanzata.
Nota: la registrazione avanzata si disattiva automaticamente dopo 24 ore.
Per risolvere i problemi di pinning delle connessioni, consulta gli eventi del log del Server proxy RDS.
Completa i seguenti passaggi:
- Apri la console CloudWatch.
- Nel pannello di navigazione, scegli Log, quindi scegli Gruppi di log.
- Seleziona il gruppo di log per il proxy, ad esempio /aws/rds/proxy/name of your proxy.
- Nella scheda Flussi di log, seleziona il flusso di log per visualizzare gli eventi del log.
Esegui query in CloudWatch Log Insights per rilevare le anomalie
Per accedere all'editor di query in CloudWatch Logs Insights, completa i seguenti passaggi:
- Apri la console CloudWatch.
- Nel pannello di navigazione, scegli Log, quindi seleziona Log Insights.
Utilizza l'editor di query per eseguire queste query. In ogni query, sostituisci **proxy-name ** con il nome del tuo proxy.
Per determinare il motivo per cui una determinata connessione è stata vincolata, esegui questa query:
fields @message | sort @timestamp asc | filter @logStream like '{proxy-name}' | filter @message like /The client session was pinned to the database connection/
Per ottenere l’elenco (basato sul numero) delle connessioni più vincolate, esegui questa query:
fields @message | sort @timestamp asc | filter @logStream like '{proxy-name}' | filter @message like /The client session was pinned to the database connection/ | parse 'Reason: \\\*' as reason | stats count() as reasonCount by reason | sort by reasonCount desc | limit 20
Risolvi i problemi derivanti da modifiche apportate alle impostazioni della sessione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Quando la connessione client modifica le impostazioni delle variabili a livello di sessione, il Server proxy RDS vincola la connessione perché non può riutilizzarla.
Quindi ricevi il seguente errore:
"The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: SQL changed session settings that the proxy doesn't track. Consider moving session configuration to the proxy's initialization query."
Tutte le connessioni al database devono avere impostazioni identiche. Per risolvere il problema, aggiungi l'impostazione Query di inizializzazione quando crei un proxy. Specifica le istruzioni SQL per il proxy da eseguire quando il proxy apre ogni nuova connessione al database. Per modificare un proxy esistente, puoi utilizzare la console Amazon RDS o eseguire il comando AWS CLI modify-db-proxy-target-group.
Importante: non aggiungere dati sensibili, come password o chiavi di crittografia di lunga durata, alla query di inizializzazione. I metodi di autenticazione o crittografia non lo proteggono perché chiunque abbia accesso alla configurazione del gruppo di destinazione del proxy può visualizzare la query di inizializzazione.
In genere, viene utilizzata l'impostazione Query di inizializzazione con istruzioni SET in modo che ogni connessione abbia impostazioni identiche. Per includere più variabili in una sola istruzione SET, utilizza la virgola come separatore.
Ad esempio, puoi eseguire questo comando per impostare una variabile di fuso orario nella query di inizializzazione:
aws rds modify-db-proxy-target-group --target-group-name default --db-proxy-name proxy --connection-pool-config '{ > "InitQuery": "SET time_zone = \"+00:00\";" > }'
Nota: sostituisci proxy con il nome del tuo proxy.
Risolvi gli errori di analisi dei messaggi e delle istruzioni preparate a livello di protocollo
Quando librerie specifiche, come asyncpg/mysql.connector, utilizzano internamente istruzioni preparate a livello di protocollo, ricevi uno dei seguenti messaggi di errore:
- "The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A parse message was detected."
- "The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A protocol-level prepared statement was detected."
Se il client utilizza le istruzioni preparate, il Server proxy RDS vincola la connessione.
Per risolvere il problema, chiudi tutte le connessioni che utilizzano istruzioni preparate dopo che il proxy ha utilizzato esplicitamente le connessioni.
Risolvi i problemi derivanti da query SQL di grandi dimensioni
Potresti ricevere il seguente messaggio di errore:
"The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: The connection ran a SQL query which exceeded the 16384 byte limit."
Per tutti i motori di database supportati dal proxy RDS, il Server proxy RDS vincola una sessione quando incontra istruzioni SQL più grandi di 16 KB. È consigliabile ridurre le dimensioni delle istruzioni SQL. Ad esempio, puoi rimuovere i commenti o limitare l'utilizzo degli alias.
Riduci il pinning delle connessioni
Per evitare richieste di database non necessarie che possono causare il pinning di una connessione da parte del proxy, intraprendi le seguenti azioni:
- Rimuovi le operazioni del database che avviano il pinning della connessione.
- Utilizza operazioni batch per combinare le richieste correlate in un'unica query.
Per standardizzare le impostazioni di connessione, intraprendi le seguenti azioni:
- Mantieni impostazioni variabili e di configurazione coerenti tra le connessioni per gestire il riutilizzo a livello di transazione.
- Per Amazon RDS per PostgreSQL, imposta le variabili sul lato database. Quando imposti le variabili sul lato client, il Server proxy RDS vincola la connessione al database.
- Per i database Amazon RDS per MySQL, utilizza i filtri di pinning della sessione per specificare le operazioni del database che possono non sottostare in sicurezza ai requisiti di pinning della sessione.
È consigliabile spostare le istruzioni SET comuni nella query di inizializzazione del proxy per un'inizializzazione identica su tutte le connessioni e mantenere il riutilizzo a livello di transazione.
Informazioni correlate
Concetti e terminologia RDS Proxy
Monitoraggio dei parametri del Server proxy RDS con Amazon CloudWatch
- Lingua
- Italiano
