Evitare di bloccare un proxy RDS - 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à.

Evitare di bloccare un proxy RDS

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 al termine 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. SQLper impostazione predefinita, le transazioni su una connessione client possono moltiplicarsi tra le connessioni al database sottostante.

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.

RDSIl proxy collega automaticamente una connessione client a una connessione DB specifica 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, collega 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. RDSProxy tiene traccia di determinate istruzioni e variabili. Pertanto, RDS Proxy non blocca la sessione quando la modifichi. In questo caso, RDS Proxy riutilizza la connessione solo per altre sessioni che hanno gli stessi valori per tali impostazioni. Per informazioni dettagliate su ciò che RDS Proxy tiene traccia per un motore di database, consulta quanto segue: , vedi. A cosa serve RDS Proxy RDS per MariadB RDS e per i miei database SQL

A cosa serve RDS Proxy RDS per i database Server SQL

Di seguito sono riportate le istruzioni SQL del server che RDS Proxy 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

A cosa serve RDS Proxy RDS per MariadB RDS e per i miei database SQL

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

  • DROP DATABASE

  • DROP SCHEMA

  • USE

Di seguito sono riportate le variabili RDS My SQL e MariaDB che Proxy 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 per RDS Proxy implica il tentativo di massimizzare il riutilizzo delle connessioni 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 Postgre l'impostazione di una variabile porta al blocco della sessione. SQL

  • Per un database della famiglia My SQL engine, applica un filtro di blocco 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ù SQL istruzioni, 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 configura una nuova connessione per quel 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 il blocco RDS per Microsoft Server SQL

Per RDS for SQL Server, anche le seguenti interazioni causano il blocco:

  • Utilizzo di più set di risultati attivi (MARS). Per informazioni suMARS, consultate la documentazione SQLdel server.

  • Utilizzo della comunicazione distribuita del coordinatore delle transazioni (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 il pinning RDS per RDS MariadB e per My SQL

Per MariadB e SQL My, 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 di SET eseguire operazioni che non causino il blocco. 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 del proxy RDS.

  • 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 indipendentemente dal fatto che l'istruzione preparata utilizzi SQL testo o il protocollo binario.

  • RDSIl proxy non blocca le connessioni quando si utilizza SETLOCAL.

  • Le chiamate di stored procedure e di funzioni archiviate non causano il pinning. RDSIl 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 il blocco di Postgre RDS SQL

Per PostgreSQL, anche le seguenti interazioni causano il blocco:

  • Utilizzo dei comandi. SET

  • 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 i blocchi utilizzando funzioni come e. pg_advisory_lock pg_try_advisory_lock

    Nota

    RDSIl 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. RDSIl 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.