查詢似乎沒有回應且有時無法觸達叢集 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

查詢似乎沒有回應且有時無法觸達叢集

問題範例

您在查詢完成時遇到問題,查詢似乎正在執行,但在SQL用戶端工具中停止運作。有時,查詢無法出現在叢集,例如系統資料表或 Amazon Redshift 主控台。

可能的解決方案

由於封包捨棄,可能發生此問題。在這種情況下,兩個網際網路通訊協定 (IPMTU) 主機之間的網路路徑中的最大傳輸單位 () 大小會有所差異。大MTU小決定了可透過網路連線在一個乙太網路框架中傳輸的封包大小上限 (位元組)。In (入) AWS部分 Amazon EC2 執行個體類型支援 1500 MTU 個 (乙太網路 v2 框架),而其他執行個MTU體類型則支援 9001 (TCP/IP 巨型框架)。

若要避免因MTU大小差異而發生的問題,建議您執行下列其中一項作業:

  • 如果您的叢集使用 EC2-VPC 平台,請使用傳回的輸入自訂網際網路控制訊息通訊協定 (ICMP) 規則來設定 Amazon VPC 安全群組Destination Unreachable。因此,規則會指示原始主機沿著網路路徑使用最MTU小的大小。如需此方法的詳細資訊,請參閱設定安全群組以允許 ICMP「無法連線目的地」

  • 如果您的叢集使用 EC2-Classic 平台,或者您無法允許ICMP輸入規則,請停用 TCP /IP 巨型框架,以便使用乙太網路 v2 框架。如需此方法的詳細資訊,請參閱設定執MTU行個體

設定安全群組以允許 ICMP「無法連線目的地」

當兩台主機之間的網路MTU大小有所差異時,請先確定您的網路設定不會封鎖路徑MTU探索 (PMTUD)。PMTUD可讓接收主機以下列ICMP訊息回應來源主Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4)機:此訊息會指示原始主機沿著網路路徑使用最MTU小的大小來重新傳送要求。如果不這樣協議,可能會因為請求太大,使得接收端主機無法接受,而發生封包捨棄。如需有關此訊ICMP息的詳細資訊,請移至RFC792際網路工程工作小組 (IETF) 網站。

如果您沒有為 Amazon VPC 安全群組明確設定此ICMP輸入規則,則會PMTUD遭到封鎖。In (入) AWS,安全群組是指定執行個體輸入和輸出流量規則的虛擬防火牆。如需 Amazon Redshift 叢集安全群組的相關資訊,請參閱 Amazon Redshift 安全組。對於使用 EC2-VPC 平台的叢集,Amazon Redshift 會使用VPC安全群組允許或拒絕傳送到叢集的流量。根據預設,安全群組會鎖定並拒絕所有傳入流量。有關如何為-C EC2 lassic 或 EC2-VPC 執行個體設定傳入和輸出規則的詳細資訊,請參閱-Clas EC2sic 中的執行個體之間的差異和 Amazon EC2 使用者指南VPC中的 a

如需如何將規則新增至VPC安全性群組的詳細資訊,請參閱VPC安全性群組。如需有關此規則所需特定PMTUD設定的詳細資訊,請參閱 Amazon EC2 使用者指南中的路徑MTU探索

設定執MTU行個體

在某些情況下,您的叢集可能會使用 EC2-Classic 平台,或者您無法允許輸入流量的自訂ICMP規則。在這些情況下,我們建議您在連接MTU到 Amazon Redshift 叢集的EC2執行個體的網路界面 (NIC) 上將其調整為 1500。此調整會停用 TCP /IP Jumbo 框架,以確保連線始終使用相同的封包大小。不過,此選項會完全地降低執行個體的最大網路輸送量,而不只是 Amazon Redshift 的連線而已。如需詳細資訊,請參閱下列程序。

若要MTU在 Microsoft 視窗作業系統上設定

如果您的用戶端是在 Microsoft Windows 作業系統中執行,您可以使用netsh指令來檢閱並設定乙太網路介面卡的MTU值。

  1. 執行下列命令以判斷目前的MTU值:

    netsh interface ipv4 show subinterfaces
  2. 在輸出中檢閱 MTU 界面卡的 Ethernet 值。

  3. 如果值不是 1500,請執行下列命令來設定此值:

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

    設定此值之後,請重新啟動電腦以讓變更生效。

若要MTU在 Linux 作業系統上設定

如果您的用戶端在 Linux 作業系統中執行,您可以使用ip指令來檢閱和設定MTU值。

  1. 執行下列命令以判斷目前的MTU值:

    $ ip link show eth0
  2. 在輸出中檢閱 mtu 後面的值。

  3. 如果值不是 1500,請執行下列命令來設定此值:

    $ sudo ip link set dev eth0 mtu 1500
在 Mac 作業系統MTU上設定
  • 遵循 MacOS 支援網站上有關 How to change the MTU for troubleshooting purposes 的指示進行操作。如需詳細資訊,請搜尋支援網站