メニュー
Amazon Redshift
管理ガイド (API Version 2012-12-01)

クエリがハングして、クラスターに達しない場合がある

問題の例

クエリが完了しないという問題に直面します。クエリは実行されますが、SQL クライアント ツールでハングします。クエリは、システムテーブルや Amazon Redshift console などでクラスターに表示されない場合があります。

考えられる解決策

この問題は、2 つのインターネットプロトコル (IP) ホスト間のネットワークパスで、最大送信単位 (MTU) のサイズに違いがある場合、パケットドロップの関係で生じる可能性があります。MTU サイズにより、ネットワーク接続を介して 1 つのイーサネットフレームで転送できるパケットの最大サイズ (バイト単位) が決まります。AWS では、一部の Amazon EC2 インスタンスタイプは 1500 MTU (Ethernet v2 フレーム) をサポートし、他のインスタンスタイプは 9001 MTU (TCP/IP ジャンボフレーム) をサポートします。

MTU サイズの違いで発生する問題を防ぐために、次のいずれかを行うことをお勧めします:

  • ご使用のクラスターが EC2-VPC プラットフォームを使用している場合、Destination Unreachable を返すインバウンドのカスタム Internet Control Message Protocol (ICMP) ルールによって Amazon VPC セキュリティグループを設定して、ネットワークパスで最低の MTU サイズを使用するよう送信側ホストに指示します。この方法の詳細については、「セキュリティグループを設定して ICMP の "Destination Unreachable" を許可する」を参照してください。

  • ご使用のクラスターが EC2-Classic プラットフォームを使用しているか、ICMP インバウンドルールを許可できない場合、TCP/IP ジャンボフレームを無効にして、Ethernet v2 フレームを使用します。この方法の詳細については、「インスタンスの MTU の設定」を参照してください。

セキュリティグループを設定して ICMP の "Destination Unreachable" を許可する

2 つのホスト間のネットワークで MTU サイズに違いがある場合、ネットワーク設定がパス MTU 検出 (PMTUD) をブロックしないことをまず確認します。PMTUD は、受信側ホストが次の ICMP メッセージで送信側ホストに応答するのを可能にします: Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4)。このメッセージは、送信側ホストがネットワークパスに沿って最低の MTU サイズを使用してリクエストを再送信するように指示します。このネゴシエーションがないと、リクエストが大きすぎて受信側ホストが受け取れないため、パケットドロップが発生する可能性があります。この ICMP メッセージの詳細については、Internet Engineering Task Force (IETF) ウェブサイトの「RFC792」を参照してください。

この ICMP インバウンドルールを Amazon VPC セキュリティグループのために明示的に設定しない場合、PMTUD はブロックされます。AWS では、セキュリティグループは、インバウンドおよびアウトバウンドトラフィックのルールをインスタンスに指定する仮想ファイアウォールです。EC2-VPC プラットフォームを使用するクラスターでは、Amazon Redshift はクラスターへのトラフィックを許可または拒否するために VPC セキュリティグループを使用します。デフォルトでは、セキュリティグループはロックされており、すべてのインバウンドトラフィックを拒否します。

VPC セキュリティグループにルールを追加する方法については、「クラスターの VPC セキュリティグループの管理」を参照してください。このルールで必要な特定の PMTUD 設定の詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「パス MTU 検出」を参照してください。

インスタンスの MTU の設定

クラスターが EC2-Classic プラットフォームを使用する場合、またはインバウンドトラフィックでカスタム ICMP ルールを許可できない場合は、Amazon Redshift クラスターに接続する Amazon EC2 インスタンスのネットワークインターフェイス (NIC) で MTU を 1500 に調整することをお勧めします。この調整によって TCP/IP ジャンボフレームが無効になるため、同じパケットサイズが一貫して接続に使用されるようになります。ただし、このオプションでは、Amazon Redshift への接続だけでなく、インスタンス全体の最大ネットワークスループットを減らすことに注意してください。詳細については、次の手順を参照してください。

To set MTU on a Microsoft Windows operating system

If your client runs in a Microsoft Windows operating system, you can review and set the MTU value for the Ethernet adapter by using the netsh command.

  1. Run the following command to determine the current MTU value:

    Copy
    netsh interface ipv4 show subinterfaces
  2. Review the MTU value for the Ethernet adapter in the output.

  3. If the value is not 1500, run the following command to set it:

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

    After you set this value, restart your computer for the changes to take effect.

To set MTU on a Linux operating system

If your client runs in a Linux operating system, you can review and set the MTU value by using the ip command.

  1. Run the following command to determine the current MTU value:

    Copy
    $ ip link show eth0
  2. Review the value following mtu in the output.

  3. If the value is not 1500, run the following command to set it:

    Copy
    $ sudo ip link set dev eth0 mtu 1500

To set MTU on a Mac operating system