Abfragen scheinen zu hängen und erreichen manchmal den Cluster nicht - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Abfragen scheinen zu hängen und erreichen manchmal den Cluster nicht

Beispiel für ein Problem

Sie haben ein Problem mit dem Abschluss von Abfragen. Die Abfragen werden anscheinend ausgeführt, hängen jedoch im SQL-Client-Tool. Manchmal erreichen die Abfragen den Cluster anscheinend nicht, beispielsweise in Systemtabellen oder in der Amazon-Redshift-Konsole.

Mögliche Lösung

Dieses Problem kann aufgrund von Paketverlusten auftreten. In diesem Fall gibt es einen Unterschied in der maximalen Größe der Übertragungseinheit (MTU) im Netzwerkpfad zwischen zwei Internet Protocol (IP) Hosts. Der MTU-Wert legt die maximale Größe für die Übertragung eines Pakets in einem Ethernet-Frame über eine Netzwerkverbindung in Bytes fest. In AWS unterstützen einige Amazon EC2 EC2-Instance-Typen eine MTU von 1500 (Ethernet v2-Frames) und andere Instance-Typen unterstützen eine MTU von 9001 (TCP/IP-Jumbo-Frames).

Um Probleme im Zusammenhang mit unterschiedlichen MTU-Größen zu vermeiden, wird eine der folgenden Aktionen empfohlen:

  • Wenn Ihr Cluster die EC2-VPC-Plattform verwendet, konfigurieren Sie die Amazon-VPC-Sicherheitsgruppe mit einer ICMP-Regel (Inbound Custom Internet Control Message Protocol), die zurückgibt Destination Unreachable. Die Regel weist also den Ursprungshost an, die niedrigste MTU-Größe entlang des Netzwerkpfades zu verwenden. Details zu diesem Ansatz finden Sie unter Konfigurieren von Sicherheitsgruppen, um ICMP „Ziel kann nicht erreicht werden“ zuzulassen.

  • Wenn Ihr Cluster die EC2-Classic-Plattform verwendet oder Sie die ICMP-Eingangsregel nicht zulassen können, deaktivieren Sie TCP/IP-Jumbo-Frames, so dass Ethernet v2-Frames verwendet werden. Details zu diesem Ansatz finden Sie unter Konfigurieren der MTU einer Instance.

Konfigurieren von Sicherheitsgruppen, um ICMP „Ziel kann nicht erreicht werden“ zuzulassen

Wenn es im Netzwerk zwischen zwei Hosts unterschiedliche MTU-Größen gibt, stellen Sie zunächst sicher, dass Ihre Netzwerkeinstellungen die Pfad-MTU-Erkennung (Path MTU Discovery, PMTUD) nicht blockieren. PMTUD ermöglicht dem empfangenden Host, dem sendenden Host mit der folgenden ICMP-Meldung zu antworten: Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4). Diese Meldung weist den sendenden Host an, die kleinste MTU-Größe zu verwenden, die auf dem Netzwerkpfad zulässig ist, und die Anforderung neu zu senden. Ohne diese Verhandlung können Paketverluste auftreten, da die Anforderung für den empfangenden Host zu groß ist, um sie akzeptieren zu können. Weitere Informationen zu dieser ICMP-Meldung finden Sie unter RFC792 auf der Website Internet Engineering Task Force (IETF).

Wenn Sie diese ICMP-Eingangsregel nicht ausdrücklich für Ihre Amazon-VPC-Sicherheitsgruppe konfigurieren, wird PMTUD blockiert. Bei Sicherheitsgruppen handelt es sich um virtuelle Firewalls AWS, die Regeln für eingehenden und ausgehenden Datenverkehr zu einer Instance festlegen. Informationen zu Amazon-Redshift-Cluster-Sicherheitsgruppen finden Sie unter Amazon-Redshift-Cluster-Sicherheitsgruppen. Im Fall von Clustern, die die EC2-VPC-Plattform verwenden, verwendet Amazon Redshift VPC-Sicherheitsgruppen, um Datenverkehr zum Cluster zuzulassen oder abzulehnen. Standardmäßig sind die Sicherheitsgruppen restriktiv und lehnen jeden eingehenden Datenverkehr ab. Informationen zum Festlegen von Regeln für eingehende und ausgehende Nachrichten für EC2-Classic- oder EC2-VPC-Instances finden Sie unter Unterschiede zwischen Instances in EC2-Classic und einer VPC im Amazon EC2 EC2-Benutzerhandbuch.

Weitere Informationen zum Hinzufügen von Regeln zu VPC-Sicherheitsgruppen finden Sie unter Verwalten von VPC-Sicherheitsgruppen für einen Cluster. Weitere Informationen zu bestimmten PMTUD-Einstellungen, die in dieser Regel erforderlich sind, finden Sie unter Path MTU Discovery im Amazon EC2 EC2-Benutzerhandbuch.

Konfigurieren der MTU einer Instance

In einigen Fällen verwendet Ihr Cluster möglicherweise die EC2-Classic-Plattform, oder Sie können die benutzerdefinierte ICMP-Regel für eingehenden Datenverkehr nicht zulassen. In diesen Fällen wird empfohlen, die MTU auf der Netzwerkschnittstelle (NIC) der EC2-Instances, von denen Sie eine Verbindung mit dem Amazon-Redshift-Cluster herstellen, auf 1500 zu setzen. Durch diese Einstellung werden TCP/IP-Jumbo-Frames deaktiviert, um sicherzustellen, dass Verbindungen stets dieselbe Paketgröße verwenden. Diese Option reduziert den maximalen Netzwerkdurchsatz für die Instance insgesamt und nicht nur für Verbindungen mit Amazon Redshift. Weitere Informationen finden Sie in den folgenden Verfahren.

So legen Sie die MTU in einem Microsoft Windows-Betriebssystem fest

Wenn Ihr Client in einem Microsoft Windows-Betriebssystem ausgeführt wird, können Sie den MTU-Wert für den Ethernet-Adapter anzeigen und festlegen, indem Sie den Befehl netsh verwenden.

  1. Führen Sie den folgenden Befehl aus, um den aktuellen MTU-Wert zu ermitteln:

    netsh interface ipv4 show subinterfaces
  2. Überprüfen Sie den MTU-Wert für den Ethernet-Adapter in der Ausgabe.

  3. Wenn der Wert nicht 1500 ist, führen Sie den folgenden Befehl aus, um ihn festzulegen:

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

    Nachdem Sie diesen Wert festgelegt haben, starten Sie Ihren Computer neu, damit die Änderungen wirksam werden.

So legen Sie die MTU in einem Linux-Betriebssystem fest

Wenn Ihr Client in einem Linux-Betriebssystem ausgeführt wird, können Sie den MTU-Wert für den Ethernet-Adapter anzeigen und festlegen, indem Sie den Befehl ip verwenden.

  1. Führen Sie den folgenden Befehl aus, um den aktuellen MTU-Wert zu ermitteln:

    $ ip link show eth0
  2. Überprüfen Sie den Wert nach mtu in der Ausgabe.

  3. Wenn der Wert nicht 1500 ist, führen Sie den folgenden Befehl aus, um ihn festzulegen:

    $ sudo ip link set dev eth0 mtu 1500
So legen Sie die MTU in einem Mac-Betriebssystem fest
  • Folgen Sie den Anweisungen auf der Supportwebsite von MacOS zu How to change the MTU for troubleshooting purposes. Weitere Informationen finden Sie auf der Supportwebsite.