Risoluzione dei problemi di connessione in Amazon Redshift - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

Risoluzione dei problemi di connessione in Amazon Redshift

Se riscontri anomalie nella connessione al cluster da uno strumento client SQL, è possibile circoscrivere il problema verificando diversi elementi. Se stai utilizzando certificati di server o SSL, prima rimuovi questa complessità mentre risolvi il problema relativo alla connessione. Quando trovi una soluzione, aggiungila nuovamente. Per ulteriori informazioni, consulta Configurazione delle opzioni di sicurezza per le connessioni.

Per informazioni sui cambiamenti di comportamento nelle funzionalità di Amazon Redshift che possono influire sull’applicazione, consulta Modifiche del comportamento in Amazon Redshift.

Importante

Amazon Redshift ha modificato la modalità di gestione dei certificati SSL. In caso di problemi di connessione tramite SSL, potrebbe essere necessario aggiornare i tuoi certificati CA radice attendibili correnti. Per ulteriori informazioni, consulta Passaggio ai certificati ACM per connessioni SSL.

La seguente sezione include alcuni messaggi di errore di esempio e le possibili soluzioni per problemi di connessione. Dal momento che diversi strumenti client SQL forniscono messaggi di errore differenti, questo elenco non è completo ma rappresenta un buon punto di partenza per la risoluzione dei problemi.

Connessione al di fuori di Amazon EC2 e problema di timeout del firewall

Al momento dell'esecuzione di query lunghe, come il comando COPY, la connessione del tuo client al database sembra scadere o interrompersi. In questo caso, è possibile che la console Amazon Redshift mostri che la query è stata completata, ma lo strumento del client stesso sembra che la stia ancora eseguendo. I risultati della query potrebbero essere mancanti o incompleti, a seconda del momento in cui la connessione si è interrotta.

Possibili soluzioni

Questo problema si verifica quando ci si connette ad Amazon Redshift da un computer diverso da un'istanza Amazon EC2. In questo caso, le connessioni inattive vengono terminate da un componente di rete intermedio, ad esempio un firewall, dopo un periodo di inattività. Questo comportamento è tipico quando ci si connette da una rete privata virtuale (VPN) o dalla rete locale.

Per evitare questi timeout, ti consigliamo di apportare le seguenti modifiche:

  • Aumenta i valori del sistema client che gestiscono i timeout TCP/IP. Esegui queste modifiche sul computer che stai utilizzando per connetterti al cluster. Il periodo di timeout deve essere regolato per il tuo client e la tua rete. Per ulteriori informazioni, consulta Modifica delle impostazioni del timeout TCP/IP.

  • A scelta, puoi configurare il comportamento keepalive a livello DSN. Per ulteriori informazioni, consulta Modifica delle impostazioni del timeout DSN.

Modifica delle impostazioni del timeout TCP/IP

Per modificare le impostazioni del timeout TCP/IP, configurale in base al sistema operativo che utilizzi per connetterti al cluster.

  • Linux: se il client è in esecuzione su Linux, emettere il comando seguente come utente root per cambiare le impostazioni di timeout per la sessione corrente:

    /sbin/sysctl -w net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5

    Per mantenere le impostazioni, crea o modifica il file /etc/sysctl.conf con i seguenti valori, quindi riavvia il sistema.

    net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5
  • Windows: se il client è in esecuzione su Windows, modificare i valori per le seguenti impostazioni di registro in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\:

    • KeepAliveTime: 30000

    • KeepAliveInterval: 1000

    • TcpMaxDataRetransmissions: 10

    Queste impostazioni utilizzano il tipo di dati DWORD. Se non esistono nel percorso di registro, è possibile creare le impostazioni e specificare questi valori raccomandati. Per ulteriori informazioni sulla modifica del registro di Windows, consultare la documentazione di Windows.

    Dopo aver impostato questi valori, riavvia il computer per rendere effettive le modifiche.

  • Mac: se il client è in esecuzione su un Mac, emettere i comandi seguenti per cambiare le impostazioni di timeout per la sessione corrente:

    sudo sysctl net.inet.tcp.keepintvl=200000 sudo sysctl net.inet.tcp.keepidle=200000 sudo sysctl net.inet.tcp.keepinit=200000 sudo sysctl net.inet.tcp.always_keepalive=1

    Per mantenere le impostazioni, crea o modifica il file /etc/sysctl.conf con i seguenti valori:

    net.inet.tcp.keepidle=200000 net.inet.tcp.keepintvl=200000 net.inet.tcp.keepinit=200000 net.inet.tcp.always_keepalive=1

    Riavvia il computer, quindi esegui i comandi seguenti per verificare che i valori siano stati impostati.

    sysctl net.inet.tcp.keepidle sysctl net.inet.tcp.keepintvl sysctl net.inet.tcp.keepinit sysctl net.inet.tcp.always_keepalive

Modifica delle impostazioni del timeout DSN

A scelta, è possibile configurare il comportamento keepalive a livello DSN. Puoi farlo aggiungendo o modificando i parametri seguenti nel file odbc.ini:

KeepAlivesCount

Il numero di pacchetti keepalive TCP che possono essere persi prima che la connessione sia considerata interrotta.

KeepAlivesIdle

Il numero di secondi di inattività prima che il driver invii un pacchetto keepalive TCP.

KeepAlivesInterval

Il numero di secondi tra ciascuna ritrasmissione di keepalive TCP.

Se questi parametri non esistono o se hanno un valore pari a 0, il sistema utilizza i parametri keepalive specificati per TCP/IP per determinare il comportamento keepalive DSN. In Windows, puoi trovare i parametri TCP/IP nel Registro di sistema in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\. In Linux e macOS, i parametri TCP/IP sono disponibili nel file sysctl.conf.

Connessione rifiutata o non riuscita

Se la connessione viene rifiutata o non riesce, potresti ricevere un errore simile a uno dei seguenti.

  • "Failed to establish a connection to <endpoint>" ("Impossibile stabilire una connessione con <endpoint>").

  • "Could not connect to server: Connection timed out. Is the server running on host '<endpoint>' and accepting TCP/IP connections on port '<port>'?" ("Il server è in esecuzione sull'<endpoint> dell'host e accetta le connessioni TCP/IP sulla porta <port>?").

  • "Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections." ("Connessione rifiutata. Controlla che il nome host e la porta siano corretti e che il postmaster accetti le connessioni TCP/IP.")

Possibili soluzioni

Generalmente, quando ricevi un messaggio di errore che indica l'impossibilità di stabilire una connessione, ciò significa che c'è un problema con l'autorizzazione per l'accesso al cluster o con il traffico di rete che raggiunge il cluster.

Per connetterti al cluster da uno strumento client esterno alla rete in cui si trova il cluster stesso, aggiungi una regola di ingresso al gruppo di sicurezza del cluster. La configurazione delle regole dipende dal fatto che il cluster Amazon Redshift sia creato in un cloud privato virtuale (VPC):

  • Se il un cluster Amazon Redshift è stato creato in un cloud privato virtuale (VPC) basato su Amazon VPC, aggiungi l'indirizzo CIDR/IP del client al gruppo di sicurezza VPC che specifica il CIDR client/indirizzo IP in Amazon VPC. Per ulteriori informazioni sulla configurazione dei gruppi di sicurezza VPC per il cluster, consulta Risorse Redshift in un VPC.

  • Se è stato creato un cluster Amazon Redshift all'esterno di un VPC, è necessario aggiungere l'indirizzo CIDR/IP del client al gruppo di sicurezza del cluster in Amazon Redshift. Per ulteriori informazioni sulla configurazione di gruppi di sicurezza dei cluster, consulta Gruppo di sicurezza Amazon Redshift.

Se provi a connetterti al cluster da uno strumento client in un'istanza Amazon EC2, viene aggiunta anche una regola di entrata. In questo caso, aggiungi una regola al gruppo di sicurezza del cluster. La regola deve specificare il gruppo di sicurezza Amazon EC2 associato all'istanza Amazon EC2 dello strumento client.

In alcuni casi, potrebbe essere presente un layer tra il client e il server, ad esempio un firewall. In questi casi, assicurarti che il firewall accetti le connessioni in ingresso sulla porta configurata per il cluster.

Incompatibilità tra client e driver

Se il client e il driver non sono compatibili, è possibile che venga visualizzato un errore del tipo “The specified DSN contains an architecture mismatch between the Driver and Application”.

Possibili soluzioni

Quando tenti di connetterti e ricevi un errore relativo a una mancata corrispondenza dell'architettura, ciò significa che lo strumento client e il driver non sono compatibili. Ciò si verifica perché la loro architettura di sistema non corrisponde. Ad esempio, ciò può accadere se disponi di uno strumento client a 32 bit ma hai installato una versione a 64 bit del driver. Talvolta gli strumenti client a 64 bit possono utilizzare driver a 32 bit, ma non è possibile usare applicazioni a 32 bit con driver a 64 bit. Assicurati che il driver e lo strumento client utilizzino la stessa versione dell'architettura di sistema.

Query bloccate e talvolta impossibilitate a raggiungere il cluster

Riscontri un problema con il completamento delle query, che sembrano in esecuzione ma che si bloccano nello strumento client SQL. Talvolta le query non vengono visualizzate nel cluster, come nelle tabelle di sistema o nella console Amazon Redshift.

Possibili soluzioni

Questo problema può verificarsi a causa della perdita dei pacchetti. In questo caso, vi è una differenza nella dimensione massima unità di trasmissione (MTU) nel percorso di rete tra due host Internet Protocol (IP). La dimensione della MTU determina la dimensione massima, espressa in byte, di un pacchetto che può essere trasferito in un frame Ethernet su una connessione di rete. In AWS, alcuni tipi di istanza Amazon EC2 supportano una MTU di 1500 (frame Ethernet v2) e altri tipi di istanza supportano una MTU di 9001 (frame jumbo TCP/IP).

Per evitare problemi associati alle differenze di dimensione della MTU, ti consigliamo di procedere in uno dei modi seguenti:

  • Se il cluster utilizza la piattaforma EC2-VPC, configurare il gruppo di sicurezza Amazon VPC con una regola ICMP (Internet Control Message Protocol) personalizzata in entrata che restituisce Destination Unreachable. Questa regola indica all'host di origine di utilizzare la dimensione della MTU minima sul percorso di rete. Per i dettagli su questo approccio, consulta Configurazione dei gruppi di sicurezza per autorizzare il messaggio ICMP "Destination Unreachable".

  • Se il tuo cluster utilizza la piattaforma EC2-Classic, o non puoi autorizzare la regola in entrata ICMP, disabilita i jumbo frame TCP/IP in modo che vengano utilizzati i frame Ethernet v2. Per i dettagli su questo approccio, consulta Configurazione della MTU di un'istanza.

Configurazione dei gruppi di sicurezza per autorizzare il messaggio ICMP "Destination Unreachable"

In presenza di una differenza della dimensione della MTU nella rete tra due host, verifica innanzitutto che le impostazioni della tua rete non blocchino l'individuazione della MTU del percorso (PMTUD). La PMTUD consente all'host ricevente di rispondere all'host di origine con il seguente messaggio ICMP: Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4). Questo messaggio indica all'host di origine di utilizzare la dimensione della MTU più piccola sul percorso di rete per inviare nuovamente la richiesta. Senza questa negoziazione, può verificarsi la perdita del pacchetto perché la richiesta è troppo grande per l'host ricevente. Per ulteriori informazioni sul messaggio ICMP, consultare RFC792 sul sito Web Internet Engineering Task Force (IETF).

Se non si configura in modo esplicito questa regola in entrata ICMP per il gruppo di sicurezza Amazon VPC, la PMTUD viene bloccata. In AWS, i gruppi di sicurezza sono firewall virtuali che specificano le regole per il traffico in entrata e quello in uscita verso un'istanza. Per informazioni sui gruppi di sicurezza dei cluster Amazon Redshift, consultare Gruppo di sicurezza Amazon Redshift. Per i cluster che utilizzano la piattaforma EC2-VPC, Amazon Redshift usa i gruppi di sicurezza VPC che consentono o rifiutano il traffico al cluster. Per impostazione predefinita, i gruppi di sicurezza sono bloccati e rifiutano tutto il traffico in entrata. Per informazioni su come impostare le regole in entrata e in uscita per le istanze di EC2-Classic o EC2-VPC, consulta Differenze tra istanze in EC2-Classic e un VPC nella Guida per l’utente di Amazon EC2.

Per ulteriori informazioni su come aggiungere regole ai gruppi di sicurezza VPC, consultare Gruppi di sicurezza VPC. Per ulteriori informazioni sulle impostazioni PMTUD specifiche richieste in questa regola, consulta Rilevamento della MTU del percorso nella Guida per l’utente di Amazon EC2.

Configurazione della MTU di un'istanza

In alcuni casi, il cluster potrebbe utilizzare la piattaforma EC2 Classic o non potresti non consentire la regola ICMP personalizzata per il traffico in ingresso. In questi casi, consigliamo di regolare l'MTU su 1500 sull'interfaccia di rete (NIC) delle istanze EC2 da cui ci si connette al cluster Amazon Redshift. Questo adeguamento disabilita i jumbo frame TCP/IP per garantire che le connessioni utilizzino in modo coerente la stessa dimensione del pacchetto. Tuttavia, questa opzione riduce la velocità effettiva massima della rete per l'intera istanza, non solo per le connessioni ad Amazon Redshift. Per ulteriori informazioni, consultare le procedure seguenti.

Per impostare la MTU su un sistema operativo Microsoft Windows

Se il client viene eseguito in un sistema operativo Microsoft Windows, è possibile rivedere e impostare il valore MTU per la scheda Ethernet tramite il comando netsh.

  1. Eseguire il seguente comando per determinare il valore MTU corrente:

    netsh interface ipv4 show subinterfaces
  2. Rivedere il valore MTU per la scheda Ethernet nell'output.

  3. Se il valore non è 1500, eseguire il seguente comando per impostarlo:

    netsh interface ipv4 set subinterface "Ethernet" mtu=1500 store=persistent

    Dopo aver impostato questo valore, riavviare il computer per rendere effettive le modifiche.

Per impostare la MTU su un sistema operativo Linux

Se il client viene eseguito in un sistema operativo Linux, è possibile rivedere e impostare il valore MTU tramite il comando ip.

  1. Eseguire il seguente comando per determinare il valore MTU corrente:

    $ ip link show eth0
  2. Rivedere il valore successivo a mtu nell'output.

  3. Se il valore non è 1500, eseguire il seguente comando per impostarlo:

    $ sudo ip link set dev eth0 mtu 1500
Per impostare la MTU su un sistema operativo Mac
  • Seguire le istruzioni sul sito di supporto macOS per How to change the MTU for troubleshooting purposes. Per ulteriori informazioni, cercare nel sito del supporto.

Impostazione del parametro delle dimensioni del recupero JDBC

Per impostazione predefinita, il driver JDBC raccoglie tutti i risultati di una query in una sola volta. Di conseguenza, quando provi a recuperare un grande insieme di risultati su una connessione JDBC, potresti riscontrare un errore di memoria insufficiente del client. Per abilitare il client per il recupero degli insiemi dei risultati nei batch, anziché farlo in un singolo recupero del tipo "tutto o niente", imposta il parametro della dimensione del recupero di JDBC nell'applicazione del tuo client.

Nota

La dimensione del recupero non è supportata da ODBC.

Per le migliori prestazioni, imposta la dimensione del recupero sul valore più alto che non porti a errori di esaurimento della memoria. Un valore della dimensione del recupero più basso causa più viaggi del server, quindi tempi di esecuzione prolungati. Il server riserva le risorse, tra cui lo slot della query WLM e la memoria associata, fino al momento in cui il client recupera tutto l'insieme di risultati o la query viene cancellata. Quando ottimizzi in modo appropriato la dimensione del recupero, queste risorse vengono rilasciate più velocemente rendendole disponibili alle altre query.

Nota

Se hai bisogno di estrarre set di dati di grandi dimensioni, consigliamo l’utilizzo di un’istruzione UNLOAD per trasferire i dati in Amazon S3. Quando usi UNLOAD, i nodi di calcolo lavorano in parallelo per velocizzare il trasferimento dei dati.

Per ulteriori informazioni sull'impostazione del parametro della dimensione del recupero di JDBC, consultare Ottenimento di risultati basato su un cursore nella documentazione PostgreSQL.