メニュー
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 への接続だけでなく、インスタンス全体の最大ネットワークスループットを減らすことに注意してください。詳細については、次の手順を参照してください。

Microsoft Windows のオペレーティング システムで MTU を設定する

クライアントが Microsoft Windows オペレーティングシステムで動作している場合、netsh コマンドを使用してイーサネットアダプターの MTU 値を確認し、設定できます。

  1. 現在の MTU 値を調べるには、次のコマンドを実行します。

    Copy
    netsh interface ipv4 show subinterfaces
  2. 出力で Ethernet アダプタの MTU の値を確認します。

  3. 値が 1500 ではない場合、次のコマンドを実行して設定します。

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

    この値を設定したら、コンピュータを再起動して変更を有効にします。

Linux オペレーティング システムで MTU を設定する

クライアントが Linux オペレーティング システムで動作している場合、ip コマンドを使用して MTU 値を確認し、設定できます。

  1. 現在の MTU 値を調べるには、次のコマンドを実行します。

    Copy
    $ ip link show eth0
  2. 出力で次の mtu の値を確認します。

  3. 値が 1500 ではない場合、次のコマンドを実行して設定します。

    Copy
    $ sudo ip link set dev eth0 mtu 1500

Mac オペレーティング システムで MTU を設定する