Gestire un RDS Proxy - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestire un RDS Proxy

Questa sezione fornisce informazioni su come gestire il funzionamento e la configurazione del proxy RDS. Queste procedure consentono all'applicazione di utilizzare in modo più efficiente le connessioni al database e di ottenere il massimo riutilizzo della connessione. Più sfrutti il riutilizzo della connessione, maggiore sarà il risparmio in termini di sovraccarico di CPU e memoria. Questo a sua volta riduce la latenza per l'applicazione e consente al database di dedicare più risorse all'elaborazione delle richieste dell'applicazione.

Modifica di un RDS Proxy

Puoi modificare specifiche impostazioni associate a un proxy dopo aver creato il proxy. Esegui questa operazione modificando il proxy stesso, il suo gruppo di destinazione associato o entrambi. Ogni proxy ha un gruppo di destinazione associato.

Importante

I valori nei campi Client authentication type (Tipo di autenticazione client) e IAM authentication (autenticazione IAM) si applicano a tutti i segreti di Secrets Manager associati al proxy. Per specificare valori diversi per ogni segreto, modifica il proxy utilizzando invece l'API AWS CLI o.

Per modificare le impostazioni di un proxy
  1. Accedi AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel riquadro di navigazione scegli Proxies (Proxy).

  3. Nell'elenco dei proxy, scegli il proxy di cui desideri modificare le impostazioni o passa alla relativa pagina dei dettagli.

  4. Per Actions (Operazioni), scegliere Modify (Modifica).

  5. Inserisci o scegli le proprietà da modificare. È possibile modificare le seguenti:

    • L'identificatore Proxy: rinominare il proxy immettendo un nuovo identificatore.

    • Timeout della connessione client per inattività: immettere un periodo di tempo per il timeout della connessione client inattiva.

    • Ruolo IAM: modificare il ruolo IAM utilizzato per recuperare i segreti da Secrets Manager.

    • Segreti di Secrets Manager: aggiungere o rimuovere segreti di Secrets Manager. Questi segreti corrispondono a nomi utente e password del database.

    • Tipo di autenticazione client: (solo PostgreSQL) cambia il tipo di autenticazione per le connessioni client al proxy.

    • Autenticazione IAM: richiedi o disabilita l'autenticazione IAM per le connessioni al proxy.

    • Richiedi Transport Layer Security: attivare o disattivare il requisito per Transport Layer Security (TLS).

    • Gruppo di sicurezza VPC: aggiungere o rimuovere gruppi di sicurezza VPC da utilizzare per il proxy.

    • Abilitazione della registrazione avanzata: abilitare o disabilitare la registrazione avanzata.

  6. Scegliere Modify (Modifica).

Se non sono state trovate le impostazioni elencate che si desidera modificare, attenersi alla procedura seguente per aggiornare il gruppo di destinazione per il proxy. Il gruppo di destinazione associato a un proxy controlla le impostazioni relative alle connessioni del database fisico. Ogni proxy ha un gruppo di destinazione associato denominato default, che viene creato automaticamente insieme al proxy.

Puoi modificare il gruppo di destinazione solo dalla pagina dei dettagli del proxy, non dall'elenco nella pagina Proxies (Proxy) .

Per modificare le impostazioni di un gruppo di destinazione proxy
  1. Dalla pagina Proxy, passa alla pagina dei dettagli di un proxy.

  2. Per Target groups (Gruppi di destinazione), scegli il collegamento di default. Attualmente, tutti i proxy hanno un singolo gruppo di destinazione denominato default.

  3. Nella pagina dei dettagli del gruppo di destinazione di default, scegli Modify (Modifica).

  4. Scegli nuove impostazioni per le proprietà che è possibile modificare:

    • Database: puoi scegliere un diverso cluster o una diversa istanza database RDS.

    • Connessioni massime del pool di connessioni: puoi modificare la percentuale delle connessioni massime disponibili che il proxy può utilizzare.

    • Filtri di pinning della sessione: (opzionale) scegliere un filtro di pinning della sessione. Ciò elude le misure di sicurezza predefinite per il multiplexing delle connessioni al database tra connessioni client. Attualmente, l'impostazione non è supportata per PostgreSQL. L'unica scelta è. EXCLUDE_VARIABLE_SETS

      L'attivazione di questa impostazione può far sì che le variabili di sessione di una connessione influiscano sulle altre connessioni. Ciò può causare errori o problemi di correttezza se le query dipendono dai valori delle variabili di sessione impostati al di fuori della transazione corrente. Valuta l'utilizzo di questa opzione dopo aver verificato che sia sicuro per le applicazioni condividere le connessioni al database tra connessioni client.

      I seguenti modelli possono essere considerati sicuri:

      • Istruzioni SET in cui non viene apportata alcuna modifica al valore della variabile di sessione effettiva, ovvero non viene apportata alcuna modifica alla variabile di sessione.

      • Modifichi il valore della variabile di sessione ed esegui un'istruzione nella stessa transazione.

      Per ulteriori informazioni, consulta Evitare il pinning.

    • Timeout del prestito di connessione: puoi regolare l'intervallo di timeout del prestito di connessione. Questa impostazione si applica quando il numero massimo di connessioni è già in uso per il proxy. In questi casi, è possibile specificare per quanto tempo il proxy attende che una connessione diventi disponibile prima di restituire un errore di timeout.

    • Query di inizializzazione: (opzionale) aggiungere una query di inizializzazione o modificare quella corrente. Puoi specificare una o più istruzioni SQL per l'esecuzione del proxy all'apertura di ogni nuova connessione al database. L'impostazione è in genere utilizzata con le istruzioni SET per assicurarsi che ogni connessione abbia impostazioni identiche, ad esempio fuso orario e set di caratteri. Per più istruzioni, utilizzare il punto e virgola come separatore. È inoltre possibile includere più variabili in una singola istruzione SET, ad esempio SET x=1, y=2.

    Alcune proprietà, ad esempio l'identificatore del gruppo di destinazione e il motore del database, sono fisse.

  5. Scegli Modify target group (Modifica gruppo di destinazione).

Per modificare un proxy utilizzando, usa i comandi modify-db-proxy AWS CLI, modify-db-proxy-target-group, deregister-db-proxy-targets e register-db-proxy-targets.

Con il comando modify-db-proxy, è possibile modificare proprietà come le seguenti:

  • L'insieme di segreti Secrets Manager usati dal proxy.

  • Indica se TLS è necessario.

  • Il timeout del client inattivo.

  • Indica se registrare ulteriori informazioni dalle istruzioni SQL per il debug.

  • Il ruolo IAM utilizzato per recuperare i segreti Secrets Manager.

  • I gruppi di sicurezza utilizzati dal proxy.

Nell'esempio seguente viene illustrato come rinominare un proxy esistente.

aws rds modify-db-proxy --db-proxy-name the-proxy --new-db-proxy-name the_new_name

Con il comando modify-db-proxy-target-group, puoi modificare le impostazioni relative alla connessione o rinominare il gruppo di destinazione. Attualmente, tutti i proxy hanno un singolo gruppo di destinazione denominato default. Quando lavori con questo gruppo di destinazione, devi specificare il nome del proxy e default per il nome del gruppo di destinazione.

Nell'esempio seguente viene illustrato come controllare prima l'impostazione MaxIdleConnectionsPercent per un proxy e quindi modificarla utilizzando il gruppo di destinazione.

aws rds describe-db-proxy-target-groups --db-proxy-name the-proxy { "TargetGroups": [ { "Status": "available", "UpdatedDate": "2019-11-30T16:49:30.342Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 50, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } ] } aws rds modify-db-proxy-target-group --db-proxy-name the-proxy --target-group-name default --connection-pool-config ' { "MaxIdleConnectionsPercent": 75 }' { "DBProxyTargetGroup": { "Status": "available", "UpdatedDate": "2019-12-02T04:09:50.420Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 75, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } }

Con i comandi deregister-db-proxy-targets e register-db-proxy-targets, puoi modificare le istanze database RDS a cui il proxy è associato tramite il relativo gruppo di destinazione. Attualmente, ogni proxy può connettersi a un cluster DB di istanze RDS DB. Il gruppo target tiene traccia dei dettagli di connessione per tutte le istanze DB RDS in una configurazione Multi-AZ, cluster Aurora.

L'esempio seguente inizia con un proxy associato a un cluster Aurora MySQL denominato cluster-56-2020-02-25-1399. Nell'esempio viene illustrato come modificare il proxy in modo che possa connettersi a un cluster diverso denominato provisioned-cluster.

Quando lavori con un'istanza database RDS, puoi specificare l'opzione --db-instance-identifier.

L'esempio seguente modifica un proxy Aurora MySQL. Un proxy Aurora PostgreSQL ha la porta 5432.

aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [ { "Endpoint": "instance-9814.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-9814" }, { "Endpoint": "instance-8898.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-8898" }, { "Endpoint": "instance-1018.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-1018" }, { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "cluster-56-2020-02-25-1399" }, { "Endpoint": "instance-4330.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-4330" } ] } aws rds deregister-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier cluster-56-2020-02-25-1399 aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [] } aws rds register-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier provisioned-cluster { "DBProxyTargets": [ { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "provisioned-cluster" }, { "Endpoint": "gkldje.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "gkldje" }, { "Endpoint": "provisioned-1.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "provisioned-1" } ] }

Per modificare un proxy utilizzando l'API RDS, si utilizzano le operazioni ModifyDBProxy, ModifyDB Group, deregisterDB e ProxyTarget RegisterDB. ProxyTargets ProxyTargets

Con ModifyDBProxy, è possibile modificare proprietà come le seguenti:

  • L'insieme di segreti Secrets Manager usati dal proxy.

  • Indica se TLS è necessario.

  • Il timeout del client inattivo.

  • Indica se registrare ulteriori informazioni dalle istruzioni SQL per il debug.

  • Il ruolo IAM utilizzato per recuperare i segreti Secrets Manager.

  • I gruppi di sicurezza utilizzati dal proxy.

Con ModifyDBProxyTargetGroup, puoi modificare le impostazioni relative alla connessione o rinominare il gruppo di destinazione. Attualmente, tutti i proxy hanno un singolo gruppo di destinazione denominato default. Quando lavori con questo gruppo di destinazione, devi specificare il nome del proxy e default per il nome del gruppo di destinazione.

Con DeregisterDBProxyTargets eRegisterDBProxyTargets, si modifica l'istanza RDS DB a cui il cluster è associato il proxy tramite il relativo gruppo di destinazione. Attualmente, ogni proxy può connettersi a un'istanza database RDS . Il gruppo di destinazione tiene traccia dei dettagli di connessione per le istanze database RDS in una configurazione Multi-AZ .

Aggiunta di un nuovo utente di database

In alcuni casi, puoi aggiungere un nuovo utente di database a un cluster o un'istanza database RDS associato a un proxy. In tal caso, aggiungi o riutilizza un segreto Secrets Manager per archiviare le credenziali per tale utente. Per fare ciò, scegli una delle seguenti opzioni:

  1. Crea un nuovo segreto Secrets Manager, utilizzando la procedura descritta in Configurazione delle credenziali del database in AWS Secrets Manager.

  2. Aggiornare il ruolo IAM per consentire a RDS Proxy l'accesso al nuovo segreto Secrets Manager. A tale scopo, aggiornare la sezione Risorse della policy di ruolo IAM.

  3. Modifica il proxy RDS per aggiungere il nuovo segreto di Secrets Manager nell'area Segreti Secrets Manager.

  4. Se il nuovo utente sostituisce un utente esistente, aggiorna le credenziali memorizzate nel segreto Secrets Manager del proxy per l'utente esistente.

Aggiungere un nuovo utente del database a un database PostgreSQL

Quando aggiungi un nuovo utente al tuo database PostgreSQL, se hai eseguito il seguente comando:

REVOKE CONNECT ON DATABASE postgres FROM PUBLIC;

All'utente rdsproxyadmin concedere il privilegio CONNECT in modo che possa monitorare le connessioni sul database di destinazione.

GRANT CONNECT ON DATABASE postgres TO rdsproxyadmin;

È anche possibile consentire ad altri utenti del database di destinazione di eseguire controlli dell'integrità passando rdsproxyadmin all'utente del database nel comando precedente.

Modifica della password per un utente di database

In alcuni casi, puoi modificare la password per un utente di database in un'istanza database RDS associata a un proxy. In tal caso, aggiorna il segreto Secrets Manager corrispondente con la nuova password.

Connessioni client e database

Le connessioni dall'applicazione a Server proxy per RDS sono note come connessioni client. Le connessioni da un proxy al database sono le connessioni database. Quando si utilizza Server proxy per RDS, le connessioni client terminano sul proxy mentre le connessioni database vengono gestite all'interno di Server proxy per RDS.

Il pool di connessioni lato applicazione può offrire il vantaggio di ridurre la creazione di connessioni ricorrenti tra l'applicazione e il proxy RDS.

Considerate i seguenti aspetti di configurazione prima di implementare un pool di connessioni lato applicazione:

  • Durata massima della connessione client: RDS Proxy impone una durata massima delle connessioni client di 24 ore. Questo valore non è configurabile. Configura il pool con una durata massima della connessione inferiore a 24 ore per evitare interruzioni impreviste della connessione del client.

  • Timeout di inattività della connessione client: RDS Proxy impone un tempo di inattività massimo per le connessioni client. Configura il pool con un valore di timeout di inattività della connessione inferiore all'impostazione di timeout di inattività della connessione client per Server proxy per RDS per evitare interruzioni impreviste della connessione.

Il numero massimo di connessioni client configurate nel pool di connessioni lato applicazione non deve essere limitato all'impostazione max_connections per RDS Proxy.

Il pooling delle connessioni dei client comporta una maggiore durata della connessione del client. Se si verifica il pinning delle connessioni, il pool delle connessioni client può ridurre l'efficienza del multiplexing. Le connessioni client bloccate ma inattive nel pool di connessioni lato applicazione continuano a mantenere una connessione al database e impediscono che la connessione al database venga riutilizzata da altre connessioni client. Esamina i log del proxy per verificare se le connessioni presentano problemi di blocco.

Nota

RDS Proxy chiude le connessioni al database all'incirca dopo 24 ore quando non sono più in uso. Il proxy esegue questa operazione indipendentemente dal valore dell'impostazione massima delle connessioni inattive.

Configurazione delle impostazioni di connessione

Per regolare il pooling di connessioni del proxy RDS, è possibile modificare le seguenti impostazioni:

IdleClientTimeout

È possibile specificare per quanto tempo una connessione client può rimanere inattiva prima che il proxy la chiuda. Il valore predefinito è 1.800 secondi (30 minuti).

Una connessione client è considerata inattiva quando l'applicazione non invia una nuova richiesta entro il tempo specificato dopo il completamento della richiesta precedente. La connessione al database sottostante rimane aperta e viene restituita al pool di connessioni. Pertanto, è disponibile per essere riutilizzata per nuove connessioni client. Se desideri che il proxy rimuova in modo proattivo le connessioni obsolete, riduci il timeout della connessione del client inattivo. Se il carico di lavoro stabilisce connessioni frequenti con il proxy, aumenta il timeout di connessione del client inattivo per risparmiare sui costi di creazione delle connessioni.

Questa impostazione è rappresentata dal campo di timeout della connessione del client Idle nella console RDS e dall'impostazione in and nell'IdleClientTimeoutAPI. AWS CLI Per informazioni su come modificare il valore del campo Idle client connection timeout (Timeout di connessione client inattivo) nella console RDS, consulta AWS Management Console. Per informazioni su come modificare il valore dell'impostazione IdleClientTimeout, consulta il comando della CLI modify-db-proxy o l'operazione API ModifyDBProxy.

MaxConnectionsPercentuale

Puoi limitare il numero di connessioni che un proxy RDS può stabilire con il database di destinazione. Puoi specificare il limite come percentuale delle connessioni massime disponibili per il tuo database. Questa impostazione è rappresentata dal campo Numero massimo di connessioni del pool di connessioni nella console RDS e dall'MaxConnectionsPercentimpostazione in AWS CLI e nell'API.

Il valore MaxConnectionsPercent viene espresso come percentuale dell'impostazione max_connections per l'istanza database RDS usata dal gruppo di destinazione. Il proxy non crea tutte queste connessioni in anticipo. Questa impostazione consente al proxy di stabilire queste connessioni quando il carico di lavoro le richiede.

Ad esempio, per una destinazione di database registrata con il parametro max_connections impostato su 1000 e il parametro MaxConnectionsPercent impostato su 95, RDS Proxy imposta 950 connessioni come limite massimo per le connessioni simultanee al database di destinazione specificato.

Un effetto collaterale comune del raggiungimento del numero massimo di connessioni al database consentite dal carico di lavoro è un aumento della latenza complessiva delle query e un incremento del valore della metrica DatabaseConnectionsBorrowLatency. È possibile monitorare le connessioni al database attualmente utilizzate e il totale consentito confrontando le metriche DatabaseConnections e MaxDatabaseConnectionsAllowed.

Se imposti questo parametri, segui le best practice riportate di seguito:

  • Consenti un margine sufficiente per le connessioni per la modifica dello schema del carico di lavoro. Si consiglia di impostare il parametro su un valore superiore di almeno il 30% rispetto all'utilizzo massimo monitorato. Poiché RDS Proxy ridistribuisce le quote di connessione del database su più nodi, le modifiche alla capacità interna potrebbero richiedere un margine di almeno il 30% per connessioni aggiuntive per evitare l'incremento delle latenze di prestito.

  • RDS Proxy riserva un certo numero di connessioni per il monitoraggio attivo per supportare il failover rapido, l'instradamento del traffico e le operazioni interne. Il parametro MaxDatabaseConnectionsAllowed non include queste connessioni riservate. Rappresenta il numero di connessioni disponibili per servire il carico di lavoro e può essere inferiore al valore derivato dall'impostazione MaxConnectionsPercent.

    Valori MaxConnectionsPercent minimi consigliati

    • db.t3.small: 30

    • db.t3.medium o superiore: 20

Per informazioni su come modificare il valore del campo Connection pool maximum connections (Numero massimo di connessioni del pool di connessioni) nella console RDS, consulta AWS Management Console. Per informazioni su come modificare il valore dell'MaxConnectionsPercentimpostazione, consulta il comando CLI modify-db-proxy-target-group o l'operazione API ModifyDB Group. ProxyTarget

Per informazioni sui limiti di connessione al database, consulta Numero massimo di connessioni di database.

MaxIdleConnectionsPercent

Puoi controllare il numero di connessioni al database inattive che RDS Proxy può mantenere nel pool di connessione. Per impostazione predefinita, RDS Proxy considera inattiva una connessione al database nel relativo pool quando non vi è stata alcuna attività sulla connessione per cinque minuti.

Il MaxIdleConnectionsPercent valore è espresso come percentuale dell'max_connectionsimpostazione per il gruppo target di istanze DB RDS. Il valore predefinito è 50% di MaxConnectionsPercent e il limite superiore è il valore di MaxConnectionsPercent. Ad esempio, seMaxConnectionsPercent, è 80, il valore predefinito di MaxIdleConnectionsPercent è 40. Se il valore di MaxConnectionsPercent non è specificato, per RDS per SQL Server MaxIdleConnectionsPercent è 5 e per tutti gli altri motori, il valore predefinito è 50.

Con un valore elevato, il proxy lascia aperta un'alta percentuale di connessioni al database inattive. Con un valore basso, il proxy chiude un'alta percentuale di connessioni al database inattive. Se i carichi di lavoro sono imprevedibili, valuta la possibilità di impostare un valore elevato per MaxIdleConnectionsPercent. In tal modo Server proxy per RDS può soddisfare i picchi di attività senza aprire molte nuove connessioni al database.

Questa impostazione è rappresentata dall'MaxIdleConnectionsPercentimpostazione di DBProxyTargetGroup in AWS CLI e nell'API. Per informazioni su come modificare il valore dell'MaxIdleConnectionsPercentimpostazione, consulta il comando CLI modify-db-proxy-target-group o l'operazione API ModifyDB Group. ProxyTarget

Per informazioni sui limiti di connessione al database, consulta Numero massimo di connessioni di database.

ConnectionBorrowTimeout

Puoi specificare per quanto tempo RDS Proxy attende che una connessione di database nel pool di connessione diventi disponibile per l'uso prima di restituire un errore di timeout. Il valore predefinito è 120 secondi. Questa impostazione si applica quando il numero di connessioni è pari al massimo e quindi non sono disponibili connessioni nel pool di connessioni. Si applica anche quando non è disponibile un'istanza di database appropriata per gestire la richiesta, ad esempio quando è in corso un'operazione di failover. Utilizzando questa impostazione, è possibile impostare il periodo di attesa migliore per l'applicazione senza modificare il timeout della query nel codice dell'applicazione.

Questa impostazione è rappresentata dal campo Connection borrow timeout nella console RDS o dall'ConnectionBorrowTimeoutimpostazione di DBProxyTargetGroup nell'API o. AWS CLI Per informazioni su come modificare il valore del campo Connection borrow timeout (Timeout del prestito della connessione) nella console RDS, consulta AWS Management Console. Per informazioni su come modificare il valore dell'ConnectionBorrowTimeoutimpostazione, consulta il comando CLI modify-db-proxy-target-group o l'operazione API ModifyDB Group. ProxyTarget

Evitare il pinning

Il multiplexing è più efficiente quando le richieste del database non si basano su informazioni di stato provenienti da richieste precedenti. In tal caso, RDS Proxy può riutilizzare una connessione alla conclusione di ogni transazione. Esempi di tali informazioni sullo stato includono la maggior parte delle variabili e dei parametri di configurazione che puoi modificare attraverso le istruzioni SET o SELECT. Le transazioni SQL su una connessione client possono eseguire il multiplex tra le connessioni di database sottostanti per impostazione predefinita.

Le connessioni al proxy possono entrare in uno stato noto come pinning. Quando una connessione viene bloccata, ogni transazione successiva utilizza la stessa connessione al database sottostante fino al termine della sessione. Altre connessioni client, inoltre, non possono riutilizzare tale connessione al database fino al termine della sessione. La sessione termina quando viene interrotta la connessione client.

RDS Proxy collega automaticamente una connessione client a una specifica connessione DB quando rileva una modifica dello stato della sessione che non è appropriata per altre sessioni. Il pinning riduce l'efficacia del riutilizzo della connessione. Se tutte o quasi tutte le connessioni riscontrano il pinning, potresti modificare il codice dell'applicazione o il carico di lavoro per ridurre le condizioni che causano il blocco.

Ad esempio, l'applicazione modifica una variabile di sessione o un parametro di configurazione. In questo caso, le istruzioni successive possono basarsi sulla nuova variabile o sul nuovo parametro per essere effettive. Pertanto, quando RDS Proxy elabora le richieste di modifica delle variabili di sessione o delle impostazioni di configurazione, il medesimo effettua il pinning di tale sessione alla connessione DB. In questo modo, lo stato della sessione rimane attivo per tutte le transazioni successive nella stessa sessione.

Per alcuni motori di database, questa regola non si applica a tutti i parametri che puoi impostare. RDS Proxy tiene traccia di determinate istruzioni e variabili. Pertanto, RDS Proxy non blocca la sessione quando la modificate. In tal caso, RDS Proxy riutilizza la connessione solo per altre sessioni con gli stessi valori per tali impostazioni. Per dettagli sulle istruzioni che Server proxy per RDS può tracciare per un motore di database, consulta quanto segue:

Istruzioni tracciate da Server proxy per RDS per database RDS per SQL Server

Di seguito sono riportate le istruzioni SQL Server di cui Server proxy per RDS tiene traccia:

  • USE

  • SET ANSI_NULLS

  • SET ANSI_PADDING

  • SET ANSI_WARNINGS

  • SET ARITHABORT

  • SET CONCAT_NULL_YIELDS_NULL

  • SET CURSOR_CLOSE_ON_COMMIT

  • SET DATEFIRST

  • SET DATEFORMAT

  • SET LANGUAGE

  • SET LOCK_TIMEOUT

  • SET NUMERIC_ROUNDABORT

  • SET QUOTED_IDENTIFIER

  • SET TEXTSIZE

  • SET TRANSACTION ISOLATION LEVEL

Istruzioni tracciate da Server proxy per RDS per database RDS per MariaDB e RDS per MySQL

Di seguito sono riportate le istruzioni MariadB e MySQL che RDS Proxy tiene traccia:

  • DROP DATABASE

  • DROP SCHEMA

  • USE

Di seguito sono riportate le variabili MySQL e MariaDB di cui il proxy RDS tiene traccia:

  • AUTOCOMMIT

  • AUTO_INCREMENT_INCREMENT

  • CHARACTER SET (or CHAR SET)

  • CHARACTER_SET_CLIENT

  • CHARACTER_SET_DATABASE

  • CHARACTER_SET_FILESYSTEM

  • CHARACTER_SET_CONNECTION

  • CHARACTER_SET_RESULTS

  • CHARACTER_SET_SERVER

  • COLLATION_CONNECTION

  • COLLATION_DATABASE

  • COLLATION_SERVER

  • INTERACTIVE_TIMEOUT

  • NAMES

  • NET_WRITE_TIMEOUT

  • QUERY_CACHE_TYPE

  • SESSION_TRACK_SCHEMA

  • SQL_MODE

  • TIME_ZONE

  • TRANSACTION_ISOLATION (or TX_ISOLATION)

  • TRANSACTION_READ_ONLY (or TX_READ_ONLY)

  • WAIT_TIMEOUT

Riduzione dell'associazione

L'ottimizzazione delle prestazioni di RDS Proxy comporta il tentativo di massimizzare il riutilizzo della connessione a livello di transazione (multiplexing) riducendo al minimo il pinning.

È possibile ridurre l'associazione effettuando le seguenti operazioni:

  • Evitare richieste di database non necessarie che potrebbero causare il pinning.

  • Impostare le variabili e le impostazioni di configurazione in modo coerente su tutte le connessioni. In questo modo, le sessioni successive hanno maggiori probabilità di riutilizzare le connessioni con quelle specifiche impostazioni.

    Tuttavia, per l'impostazione di PostgreSQL una variabile porterà al pinning della sessione.

  • Per un database della famiglia di motori MySQL, applica un filtro di pinning della sessione al proxy. Puoi esentare determinati tipi di operazioni dal pinning della sessione se sai che tale operazione non influisce sul corretto funzionamento dell'applicazione.

  • Scopri con quale frequenza si verifica il pinning monitorando la CloudWatch metrica DatabaseConnectionsCurrentlySessionPinned di Amazon. Per informazioni su questa e altre CloudWatch metriche, consulta. Monitoraggio dei parametri del proxy RDS con Amazon CloudWatch

  • Se utilizzi istruzioni SET per eseguire l'inizializzazione identica per ogni connessione client, puoi farlo pur mantenendo il multiplexing a livello di transazione. In questo caso, sposta le istruzioni che impostano lo stato della sessione iniziale nella query di inizializzazione utilizzata da un proxy. Questa proprietà è una stringa contenente una o più istruzioni SQL, separate da punto e virgola.

    Ad esempio, puoi definire una query di inizializzazione per un proxy che imposta determinati parametri di configurazione. Quindi, RDS Proxy applica tali impostazioni ogni volta che imposta una nuova connessione per tale proxy. Puoi rimuovere le istruzioni SET corrispondenti dal codice dell'applicazione, in modo che non interferiscano con il multiplexing a livello di transazione.

    Per visualizzare i parametri sulla frequenza con cui si verifica il pinning in relazione a un proxy, consulta Monitoraggio dei parametri del proxy RDS con Amazon CloudWatch.

Condizioni che causano il pinning per tutte le famiglie di motori

Il proxy effettua il pinning della sessione alla connessione corrente nelle seguenti situazioni in cui il multiplexing potrebbe causare un comportamento imprevisto:

  • Qualsiasi istruzione con una dimensione del testo maggiore di 16 KB fa sì che il proxy effettui il pinning della sessione.

Condizioni che causano l'associazione per RDS per Microsoft SQL Server

Per RDS per SQL Server, anche le seguenti interazioni causano l'associazione:

  • L'utilizzo di più set di risultati attivi (MARS). Per informazioni su MARS, consulta la documentazione di SQL Server.

  • L'utilizzo della comunicazione con Distributed Transaction Coordinator (DTC).

  • La creazione di tabelle temporanee, transazioni, cursori o istruzioni preparate.

  • L'utilizzo delle seguenti istruzioni SET:

    • SET ANSI_DEFAULTS

    • SET ANSI_NULL_DFLT

    • SET ARITHIGNORE

    • SET DEADLOCK_PRIORITY

    • SET FIPS_FLAGGER

    • SET FMTONLY

    • SET FORCEPLAN

    • SET IDENTITY_INSERT

    • SET NOCOUNT

    • SET NOEXEC

    • SET OFFSETS

    • SET PARSEONLY

    • SET QUERY_GOVERNOR_COST_LIMIT

    • SET REMOTE_PROC_TRANSACTIONS

    • SET ROWCOUNT

    • SET SHOWPLAN_ALL, SHOWPLAN_TEXT e SHOWPLAN_XML

    • SET STATISTICS

    • SET XACT_ABORT

Condizioni che causano l'associazione per RDS per MariaDB e RDS per MySQL

Per MariadB e MySQL, anche le seguenti interazioni causano il pinning:

  • Le dichiarazioni di blocco esplicito delle tabelle LOCK TABLE, LOCK TABLES o FLUSH TABLES WITH READ LOCK causano il pinning della sessione da parte del proxy.

  • La creazione di blocchi denominati mediante GET_LOCK fa sì che il proxy esegua il pinning della sessione.

  • L'impostazione di una variabile utente o di una variabile di sistema (con alcune eccezioni) fa sì che il proxy effettui il pinning della sessione. Se questa situazione riduce eccessivamente il riutilizzo della connessione, scegli le operazioni che non causino il pinning. SET Per informazioni su come eseguire questa operazione impostando la proprietà Session pinning filters (Filtri per l'aggiunta di sessioni), consulta Creazione di un RDS Proxy e Modifica di un RDS Proxy.

  • La creazione di una tabella temporanea fa sì che il proxy effettui il pinning della sessione. In questo modo, il contenuto della tabella temporanea viene conservato per tutta la sessione indipendentemente dai limiti delle transazioni.

  • Le chiamate delle funzioni MySQL ROW_COUNT, FOUND_ROWS e LAST_INSERT_ID talvolta causano il pinning.

  • Le istruzioni preparate fanno sì che il proxy effettui il pinning della sessione. Questa regola si applica se l'istruzione preparata utilizza il testo SQL o il protocollo binario.

  • RDS Proxy non blocca le connessioni quando si utilizza SET LOCAL.

  • Le chiamate di stored procedure e di funzioni archiviate non causano il pinning. RDS Proxy non rileva alcuna modifica dello stato della sessione derivante da tali chiamate. Assicurati che l'applicazione non modifichi lo stato della sessione all'interno delle routine archiviate se fai affidamento su quello stato della sessione per persistere tra le transazioni. Ad esempio, RDS Proxy non è attualmente compatibile con una stored procedure che crea una tabella temporanea che persiste in tutte le transazioni.

Se disponi di un'approfondita conoscenza del comportamento dell'applicazione, puoi scegliere di ignorare il comportamento del pinning per determinate istruzioni dell'applicazione. A tale scopo, puoi selezionare l'opzione (Filtri di pinning della sessione durante la creazione del proxy. Attualmente, è possibile disattivare l'aggiunta della sessione per l'impostazione delle variabili di sessione e delle impostazioni di configurazione.

Condizioni che causano l'associazione per RDS per PostgreSQL

Per PostgreSQL, le seguenti interazioni causano anche il pinning:

  • Utilizzo dei comandiSET.

  • Utilizzo diPREPARE, DISCARDDEALLOCATE, o EXECUTE comandi per gestire le istruzioni preparate.

  • Creazione di sequenze, tabelle o viste temporanee.

  • Dichiarazione dei cursori.

  • Eliminare lo stato della sessione.

  • Ascolto su un canale di notifica.

  • Caricamento di un modulo di libreria comeauto_explain.

  • Manipolazione di sequenze utilizzando funzioni come e. nextval setval

  • Interazione con le serrature utilizzando funzioni come e. pg_advisory_lock pg_try_advisory_lock

    Nota

    RDS Proxy non prevede blocchi consultivi a livello di transazione, in particolarepg_advisory_xact_lock,, e. pg_advisory_xact_lock_shared pg_try_advisory_xact_lock pg_try_advisory_xact_lock_shared

  • Impostazione di un parametro o ripristino dei valori predefiniti di un parametro. In particolare, utilizzo dei set_config comandi SET and per assegnare valori predefiniti alle variabili di sessione.

  • Le chiamate di stored procedure e di funzioni archiviate non causano il pinning. RDS Proxy non rileva alcuna modifica dello stato della sessione derivante da tali chiamate. Assicurati che l'applicazione non modifichi lo stato della sessione all'interno delle routine archiviate se fai affidamento su quello stato della sessione per persistere tra le transazioni. Ad esempio, RDS Proxy non è attualmente compatibile con una stored procedure che crea una tabella temporanea che persiste in tutte le transazioni.

Eliminazione di un RDS Proxy

È possibile eliminare un proxy quando non è più necessario. In alternativa, puoi eliminare un proxy se metti fuori servizio l'istanza DB o il cluster ad esso associato.

Per eliminare un proxy
  1. Accedi AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel riquadro di navigazione scegli Proxies (Proxy).

  3. Scegli il proxy da eliminare dall'elenco.

  4. Scegli Delete Proxy (Elimina proxy).

Per eliminare un proxy DB, usa il AWS CLI comando delete-db-proxy. Per rimuovere le associazioni correlate, utilizzare anche il comando deregister-db-proxy-targets.

aws rds delete-db-proxy --name proxy_name
aws rds deregister-db-proxy-targets --db-proxy-name proxy_name [--target-group-name target_group_name] [--target-ids comma_separated_list] # or [--db-instance-identifiers instance_id] # or [--db-cluster-identifiers cluster_id]

Per eliminare un proxy DB, chiama la funzione API Amazon RDS DeleteDBProxy. Per eliminare elementi e associazioni correlati, chiamate anche le funzioni ProxyTargetDeleteDB Group e DeregisterDB. ProxyTargets