我的 Amazon Athena 查詢需要很長時間才能執行。查詢佇列時間很長。如何加快查詢處理?
簡短描述
Athena 是無伺服器互動式查詢服務。將查詢提交給 Athena 之後,查詢會在後端的資源集區上執行。這些資源由區域中的所有使用者共用。您的查詢可能會在執行前暫時排入佇列。由於佇列時間較長或引擎處理時間較長,因此查詢通常需要較長的時間才能執行。
解決方法
為您的 查詢 ID 呼叫 GetQueryExecution API。此 API 會傳回關於查詢單一處理的資訊。資訊包括有用的詳細資料,如下所示:
- 查詢佇列所用時間 (QueryQueueTimeInMillis)
- 查詢規劃所用時間 (QueryPlanningTimeInMillis)
- 引擎處理時間 (EngineExecutionTimeInMillis)
您可以在 API 回應的 Statistics 參數中檢視此資訊。
佇列時間較長
由於後端的資源使用量很高,您的查詢可能會有較長的佇列時間。Athena 中的佇列時間取決於資源配置。在將查詢提交給 Athena 之後,系統會根據下列項目指派資源來處理查詢:
如果查詢的佇列時間較長,請執行下列動作以改善查詢效能:
- 考慮將查詢分佈於一段時間。如果您以批次方式提交查詢,請更頻繁地提交小批次,而不是以較小頻率提交大型批次。這可能會減少查詢停留在 QUEED 狀態的時間,並改善整體查詢處理時間。
- 執行簡單和複雜查詢的組合,而不是同時執行一組複雜的查詢。另請考慮先提交簡單的查詢,然後提交複雜的查詢。由於簡單的查詢處理速度很快,因此可以將資源分配給複雜的查詢,而不會產生較長的佇列時間。
- 如果您在情景中排程查詢,例如產生定期報告或載入新分割區,請避免在小時開始和超過小時 30 分鐘的時間範圍排程查詢。大多數自動化指令碼和 cron 作業都在這些時間範圍內執行。因此,在這些期間,服務負載通常會較高,從而增加佇列時間。
- 如果您的使用情況允許,請在多個區域中執行查詢。這可以分配負載並幫助獲取更多後端資源。這種方法可以減少查詢佇列時間。
**重要:**您可能會產生 Amazon Simple Storage Service (Amazon S3) 跨區域費用。
規劃時間較長
如果您的查詢規劃時間較長,可能是表格過度分割所造成的。具有數百或數千個分割區的表格可能導致查詢處理速度較慢。若要改善查詢效能,請嘗試下列一或多項動作:
- 考慮減少分割區的數量。
- 一次查詢一個分割區並串連結果。
- 使用分割區投影有助於加快高度分割區表格的查詢處理速度,並自動化分割區管理。
處理時間較長
如果查詢的引擎處理時間較長,請執行下列動作以改善查詢效能:
- 對表格進行分割,以限制每個查詢掃描的資料量。分割區充當虛擬欄,並根據欄值將相關資料保存在一起。對表格進行分割可改善查詢效能並降低成本。如需詳細資訊,請參閱分割資料。
- 如果您查詢的 Amazon S3 檔案很小 (通常小於 128 MB),則查詢處理時間可能會較長。時間的增加源於任務所涉及的開銷,例如開啟 S3 檔案、列出目錄和設定資料傳輸。在 Amazon EMR 上使用 S3DistCp 公用程式,將較小的 S3 檔案合併為較大的物件。較大的物件需要的 Amazon S3 請求較少,進而減少查詢處理時間。
- 執行其他儲存和查詢最佳化,以改善效能並縮短引擎處理時間。如需詳細資訊,請參閱 Amazon Athena 的 10 大效能調整秘訣。
**注意:**您可以根據區域中的預設查詢相關配額同時向 Athena 提交多個查詢。Athena 會根據整體服務負載和傳入的要求數量指派資源來處理查詢。因此,所有提交的查詢可能無法同時執行。
相關資訊
Athena 效能調整