優化服務使用 - Amazon Athena

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

優化服務使用

服務層級考量包括您每個帳戶執行的工作負載數量、不僅適用於 Athena,還有跨服務的服務配額,以及思考如何減少「資源不足」錯誤。

每個帳戶執行一個工作負載以避免服務配額限制

Athena 會針對查詢執行時間、帳戶中的並行查詢次數和API要求率等指標強制執行配額。如需有關這些配額的詳細資訊,請參閱 Service Quotas。超過這些配額會導致查詢失敗 – 無論是在提交查詢時還是在查詢執行期。

此頁面上的許多效能最佳化秘訣可協助縮短查詢的執行時間。最佳化可釋出容量,以便您可以在並行配額內執行更多查詢,並避免查詢因執行時間過長而被取消。

並行查詢和API要求數目的配額為每 AWS 帳戶 和 AWS 區域。我們建議每個工作負載 AWS 帳戶 (或使用個別佈建的容量保留區) 執行一個工作負載,以防止工作負載競爭相同的配額。

如果您在相同的帳戶中執行兩個工作負載,其中一個工作負載可能要執行突增的查詢。這可能會導致剩餘的工作負載遭受限流或封鎖,而無法執行查詢。若要避免這種情況,您可以將工作負載移至不同的帳戶,以便為每個工作負載提供自己的並行配額。為一個或兩個工作負載建立佈建的容量保留可完成相同的目標。

考量其他服務中的配額

當 Athena 執行查詢時,它可以呼叫其他強制執行配額的服務。在查詢執行期間,Athena 可以API撥打 AWS Glue Data Catalog、Amazon S3 和其他 AWS 服務,例如IAM和 AWS KMS。如果您使用聯合查詢,Athena 也會致電 AWS Lambda。所有這些服務都有自己的限制和配額,可以超過。當查詢執行遇到來自這些服務的錯誤時,其便會失敗並包含來源服務的錯誤。重試可復原的錯誤,但如果問題無法及時自行解決,查詢仍可能失敗。請務必徹底閱讀錯誤訊息,以判斷其是來自 Athena 還是來自其他服務。此效能調整區段涵蓋了一些相關錯誤。

如需有關解決 Amazon S3 Service Quotas 造成的錯誤的資訊,請參閱本文件稍後的 避免檔案太多。如需有關 Amazon S3 效能最佳化的詳細資訊,請參閱《Amazon S3 使用者指南》中的最佳實務設計模式:最佳化 Amazon S3 效能

減少「資源不足」錯誤

Athena 會在分散式查詢引擎中執行查詢。當您提交查詢時,Athena 引擎查詢規劃程式會預估執行查詢所需的運算容量,並相應地準備運算節點叢集。某些查詢(如DDL查詢)僅在一個節點上運行。大型資料集的複雜查詢可在更大的叢集上執行。節點是一致的,具有相同的記憶體CPU、和磁碟組態。Athena 透過橫向擴展 (而非向上擴展) 來處理要求更高的查詢。

有時候,查詢的需求會超過執行查詢的叢集的可用資源。發生這種情況時,查詢會失敗,並顯示錯誤在此擴展因數下查詢耗盡的資源

最常耗盡的資源是記憶體,但在極少數情況下,也可以是磁碟空間。當引擎執行聯結或視窗函數時,通常會發生記憶體錯誤,但也可能發生在不同的計數和彙總中。

即使查詢失敗並出現「資源不足」錯誤一次,當您再次執行時,其可能會成功。查詢執行不是確定性的。載入資料所花費時間以及如何在節點上分配中繼資料集等因素,可能會導致資源使用量不同。例如,假設一個查詢聯結兩個資料表,並且聯結條件的值分佈存在很大偏差。這樣的查詢在大多數時間都可以成功,但是當最常見的值最終由相同節點處理時,偶爾會失敗。

若要避免查詢超出可用資源,請使用本文件中提及的效能調校秘訣。具體而言,有關如何最佳化會耗盡可用資源之查詢的秘訣,請參閱 最佳化聯結減少窗口功能的範圍,或刪除它們使用近似值最佳化查詢