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
eSHOWPLAN_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
oFLUSH 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
eLAST_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 di
PREPARE
,DISCARD
DEALLOCATE
, oEXECUTE
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 come
auto_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 particolare
pg_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
comandiSET
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.