對查詢進行故障診斷 - Amazon Redshift

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

對查詢進行故障診斷

此小節提供快速的參考,方便識別和解決一些最常見和最嚴重的問題那個您可能會遇到 Amazon Redshift 查詢。

這些建議可做為進行故障排除的起點。您也可以參閱下列資源以取得更詳細的資訊。

連線失敗

您的查詢連線可能因下列原因而失敗;建議您使用下列故障排除方法。

用戶端無法連線至伺服器

如果您使用 SSL 或伺服器憑證,對連線問題進行故障排除時,請先移除此複雜度。然後在您找到解決方案時,將 SSL 或伺服器憑證新增回去。如需詳細資訊,請前往設定連線的安全性選項中的Amazon Redshift 叢集管理指南。

連線遭拒

一般來說,收到錯誤訊息指出無法建立連線時,它表示存取叢集的許可發生問題。如需詳細資訊,請前往連線遭拒或失敗中的Amazon Redshift 叢集管理指南。

查詢懸置

您的查詢可能因下列原因而懸置或停止回應;建議您使用下列故障排除方法。

對資料庫的連線已丟棄

減少最大傳輸單位 (MTU) 的大小。MTU 大小決定可以透過您的網路連線在一個乙太網路訊框中傳輸的封包最大大小 (位元組)。如需詳細資訊,請前往與資料庫的連線已丟棄中的Amazon Redshift 叢集管理指南。

對資料庫的連線逾時

執行長時間查詢 (例如 COPY 命令) 時,對資料庫的用戶端連線似乎懸置或逾時。在此情況下,您可能會發現 Amazon Redshift 主控台顯示查詢已完成,但用户端工具本身仍似乎在執行查詢。取決於連線停止的時間,查詢的結果可能遺漏或不完整。當中繼網路元件終止閒置的連線時,會發生此影響。如需詳細資訊,請前往防火牆超時問題中的Amazon Redshift 叢集管理指南。

用户端out-of-memory使用 ODBC 時發生錯誤

若您的用戶端應用程式使用 ODBC 連線,且您的查詢建立的結果集太大,無法納入記憶體中,則您可以使用資料指標將結果集串流到用戶端應用程式。如需詳細資訊,請參閱 DECLARE使用游標時的效能考量

用户端out-of-memory使用 JDBC 時發生錯誤

嘗試透過 JDBC 連線檢索大型結果集時,您可能會遇到用户端out-of-memory錯誤。如需詳細資訊,請參閱 設定 JDBC 擷取大小參數

可能有死鎖

如果有可能的死鎖,請嘗試下列:

  • 檢視 STV_LOCKSSTL_TR_CONFLICT 系統資料表來尋找牽涉到對超過一個資料表進行更新的衝突。

  • 使用 PG_CANCEL_BACKEND 函數來取消一或多個有衝突的查詢。

  • 使用 PG_TERMINATE_BACKEND 函數來終止工作階段,它可強制終止的工作階段中任何目前執行中的交易釋出所有鎖定和復原交易。

  • 排程並行寫入操作時務必謹慎。如需詳細資訊,請參閱 管理並行寫入操作

查詢耗費太長時間

您的查詢連線可能因下列原因而耗費太長時間;建議您使用下列故障排除方法。

資料表未進行優化

設定資料表的排序索引鍵、配送樣式和壓縮編碼,以善加利用平行處理。如需詳細資訊,請參閱「」使用自動工作台優化

查詢正在寫入磁碟

您的查詢可能會在查詢執行的至少一部分寫入至磁碟。如需詳細資訊,請參閱 改善 查詢效能

查詢必須等候其他查詢完成

您可以透過建立查詢佇列和指派不同類型的查詢至適當的佇列,來改善整體系統效能。如需詳細資訊,請參閱 實作工作負載管理

查詢未進行優化

分析解釋計畫以尋找重新寫入查詢或最佳化資料庫的機會。如需詳細資訊,請參閱 查詢計劃

查詢需要更多記憶體來執行

如果特定查詢需要更多記憶體,您可以透過增加wlm_query_slot_count來增加可用記憶體。

資料庫要求執行 VACUUM 命令

每當您新增、刪除或修改大量資料列時執行 VACUUM 命令,除非您以排序索引鍵順序載入您的資料。VACUUM 命令會重新組織您的資料以保有排序順序和還原效能。如需詳細資訊,請參閱 清空資料表

載入失敗

您的資料載入可能因下列原因而失敗;建議您使用下列故障排除方法。

資料源位於不同的AWSRegion (區域)

依預設,COPY 命令中指定的 Amazon S3 存放區或 Amazon DynamoDB 資料表必須位在相同的AWS區域作為集羣。如果您的資料和您的叢集位於不同的區域,您會收到類似以下的錯誤:

The bucket you are attempting to access must be addressed using the specified endpoint.

如果有可能,請確定您的叢集和您的資料來源位於在同一區域。您可以使用 REGION 選項搭配 COPY 命令來指定不同的區域。

注意

如果您的叢集和您的資料來源位於不同的 AWS 區域,這時將衍生資料傳輸成本。您也會遇到較高的延遲。

複製c奧曼德f病

查詢 STL_LOAD_ERRORS 以探索特定載入期間發生的錯誤。如需詳細資訊,請參閱 STL_LOAD_ERRORS

載入耗費太長時間

您的載入操作可能因下列原因而耗費太長時間;建議您使用下列故障排除方法。

從單一檔案 COPY 載入資料

將您的載入資料分割至多個檔案。當您從單個檔案載入所有資料時,Amazon Redshift 將被迫執行序列化載入,其速度非常慢。檔案的數量應該是您的叢集中配量數量的倍數,而檔案應該是大約相等的大小,壓縮後介於 1 MB 與 1 GB 之間。如需詳細資訊,請參閱 Amazon Redshift 設計查詢的最佳實務

載入操作使用多個 COPY 命令

如果您同時使用多個 COPY 命令從多個檔案載入一個資料表,Amazon Redshift 將被迫執行序列化載入,其速度非常慢。在此情況下,請使用單一 COPY 命令。

載入資料不正確

您的 COPY 操作可能以下列方式載入不正確的資料;建議您使用下列故障排除方法。

載入錯誤的檔案

使用物件字首來指定資料檔案可能導致讀取不需要的檔案。相反地,請使用資訊清單檔案來指定要載入的確切檔案。如需詳細資訊,請參閱 COPY 命令的 copy_from_s3_manifest_file 選項和 COPY 範例中的 Example: COPY from Amazon S3 using a manifest

設定 JDBC 擷取大小參數

依預設,JDBC 驅動程式會一次收集查詢的所有結果。因此,嘗試透過 JDBC 連線檢索大型結果集時,您可能會遇到用户端out-of-memory錯誤。若要讓您的用户端批次 (而非以單一的方式)all-or-nothing提取時,在您的用户端應用程式中設定 JDBC 摘取大小參數。

注意

ODBC 不支援擷取大小。

為求最佳效能,請將擷取大小設定為不會導致記憶體不足錯誤的最高值。較低的擷取大小值會造成更多伺服器來回行程,進而延長執行時間。伺服器會預留資源,包括 WLM 查詢位置和關聯的記憶體,直到用戶端擷取整個結果集或查詢取消為止。適當地調校擷取大小時,那些資源會更快速釋出,使得它們可供其他查詢使用。

注意

如果您必須抽取大型資料集,建議使用UNLOAD語句將數據傳輸到 Amazon S3。使用 UNLOAD 時,運算節點會平行運作,以加速資料的傳輸。

如需設定 JDBC 擷取大小參數的詳細資訊,請前往 PostgreSQL 文件中的根據游標取得結果