Azure Synapse Analytics 中無伺服器 SQL 集區的成本管理
本文說明如何在 Azure Synapse Analytics 中預估及管理無伺服器 SQL 集區的成本:
- 在發出查詢之前預估處理的資料量
- 使用成本控制功能來設定預算
了解 Azure Synapse Analytics 中的無伺服器 SQL 集區成本只是 Azure 帳單中每月成本的一部分。 如果您使用其他 Azure 服務,您 Azure 訂用帳戶中使用的所有 Azure 服務和資源 (包括第三方服務) 都會向您收取費用。 本文說明如何在 Azure Synapse Analytics 中規劃及管理無伺服器 SQL 集區的成本。
已處理的資料量
處理的資料量是執行查詢時系統臨時儲存的資料量。 處理的資料包含下列數量:
- 從儲存體讀取的資料量。 此數量包括:
- 讀取資料時讀取的資料。
- 讀取中繼資料時讀取的資料 (適用於包含中繼資料的檔案格式,例如 Parquet)。
- 中繼結果中的資料量。 這項資料會在查詢執行時,在節點之間傳送。 其中包含以未壓縮格式傳送至您端點的資料。
- 寫入儲存體的資料量。 如果您使用 CETAS 將結果集匯出至儲存體,寫出的資料量會新增至針對 CETAS 中 SELECT 部分所處理的資料量。
從儲存體讀取檔案已高度最佳化。 此程序會使用:
- 預先擷取,這可能會對讀取的資料量增加額外負荷。 如果查詢讀取整個檔案,就不會產生額外負荷。 如果是讀取檔案的一部分 (例如,TOP N 查詢),則會使用預先擷取來讀取更多資料。
- 最佳化逗號分隔值 (CSV) 剖析器。 如果您使用 PARSER_VERSION='2.0' 來讀取 CSV 檔案,則從儲存體讀取的資料量會稍微增加。 最佳化 CSV 剖析器會以平行方式讀取檔案,並且讀取相同大小的區塊。 區塊不一定包含完整的資料列。 為了確保所有資料列都經過剖析,最佳化 CSV 剖析器還會讀取較小的相鄰區塊片段。 此程序會增加少量負擔。
統計資料
無伺服器 SQL 集區的查詢最佳化工具會依賴統計資料來產生最佳的查詢執行計畫。 您可以手動建立統計資料。 否則,無伺服器 SQL 集區會自動建立這些資料。 無論何種方式,執行個別查詢都會建立統計資料,讓個別查詢以提供的取樣率傳回特定資料行。 此查詢會有相關聯的處理資料量。
如果您執行相同的查詢,或任何其他可利用所建立統計資料的查詢,則會盡可能重複使用統計資料。 統計資料建立時沒有其他處理資料。
針對 Parquet 資料行建立統計資料時,只會從檔案讀取相關的資料行。 針對 CSV 資料行建立統計資料時,則會讀取和剖析整個檔案。
四捨五入
每個查詢的處理資料量會進位為最接近的 MB。 每個查詢最少有 10 MB 的處理資料。
處理資料不包含的內容
- 伺服器層級的中繼資料 (例如登入、角色,以及伺服器層級的認證)。
- 您在端點中建立的資料庫。 這些資料庫只包含中繼資料 (例如使用者、角色、結構描述、檢視、內嵌資料表值函式 [TVF]、預存程序、資料庫範圍的認證、外部資料來源、外部檔案格式及外部資料表)。
- 如果您使用結構描述推斷,則會讀取檔案片段以推斷資料行名稱和資料類型,並將讀取的資料量新增至處理的資料量。
- 資料定義語言 (DDL) 陳述式,但 CREATE STATISTICS 陳述式除外,因為其會根據指定的取樣百分比處理儲存體中的資料。
- 僅限中繼資料的查詢。
減少處理的資料量
您可以將資料分割並轉換成壓縮的資料行格式 (例如 Parquet),以最佳化每個查詢處理的資料量並改善效能。
範例
想像有三個資料表。
- population_csv 資料表是由 5 TB 的 CSV 檔案所組成。 這些檔案組織成五個大小相同的資料行。
- Population_parquet 資料表具有與 population_csv 資料表相同的資料。 是由 1 TB 的 Parquet 檔案所組成。 此資料表小於前一個資料表,因為資料會以 Parquet 格式壓縮。
- very_small_csv 資料表由 100 KB 的 CSV 檔案所組成。
查詢 1:SELECT SUM(population) FROM population_csv
此查詢會讀取及剖析整個檔案,以取得人口資料行的值。 節點會處理此資料表的片段,而每個片段的人口總和都會在節點之間傳送。 最後一個總和會傳送至您的端點。
此查詢會處理 5 TB 的資料,加上傳送片段總和的少量額外負荷。
查詢 2:SELECT SUM(population) FROM population_parquet
當您查詢已壓縮的資料行格式 (例如 Parquet) 時,讀取的資料會比查詢 1 少。 因為無伺服器 SQL 集區會讀取單一的已壓縮資料行,而不是整個檔案,所以您會看到此結果。 在此案例中,讀取的資料量為 0.2 TB。 (五個大小相同的資料行各為 0.2 TB。) 節點會處理此資料表的片段,且各片段的母體總和會在節點間傳送。 最後一個總和會傳送至您的端點。
此查詢會處理 0.2 TB 的資料,加上傳送片段總和的少量額外負荷。
查詢 3:SELECT * FROM population_parquet
此查詢會讀取所有資料行,並以未壓縮的格式傳送所有資料。 如果壓縮格式為 5:1,則查詢會處理 6 TB 的資料,因為讀取 1 TB 的資料並傳送 5 TB 的未壓縮資料。
查詢 4:SELECT COUNT(*) FROM very_small_csv
此查詢會讀取整個檔案。 此資料表儲存體中的檔案大小總計為 100 KB。 節點會處理此資料表的片段,而每個片段的總和都會在節點之間傳送。 最後一個總和會傳送至您的端點。
此查詢會處理稍微超過 100 KB 的資料。 此查詢所處理的資料量會進位到 10 MB,如本文中四捨五入一節中所述。
成本控制
無伺服器 SQL 集區中的成本控制功能可讓您設定所處理資料量的預算。 您可以設定每日、每週和每月處理的資料量 (以 TB 為單位)。 同時您可以設定一或多個預算。 若要設定無伺服器 SQL 集區的成本控制,您可以使用 Synapse Studio 或 T-SQL。
在 Synapse Studio 中設定無伺服器 SQL 集區的成本控制
若要在 Synapse Studio 中設定無伺服器 SQL 集區的成本控制,請瀏覽至左側功能表中的 [管理項目],然後在 [分析集區] 下選取 SQL 集區項目。 當您將游標暫留在無伺服器 SQL 集區時,您會看到成本控制的圖示 - 請按一下此圖示。
按一下 [成本控制] 圖示後會出現側邊列:
若要設定一個或多個預算,請先針對您想要設定的預算按一下 [啟用] 選項按鈕,然後在文字方塊中輸入整數值。 值的單位為 TB。 設定您想要的預算之後,請按一下側邊列底部的套用按鈕。 就是這麼簡單,您現在已設定好預算。
在 T-SQL 中設定無伺服器 SQL 集區的成本控制
若要在 T-SQL 中設定無伺服器 SQL 集區的成本控制,您需要執行下列一個或多個預存程序。
sp_set_data_processed_limit
@type = N'daily',
@limit_tb = 1
sp_set_data_processed_limit
@type= N'weekly',
@limit_tb = 2
sp_set_data_processed_limit
@type= N'monthly',
@limit_tb = 3334
若要查看目前的設定,請執行下列 T-SQL 陳述式:
SELECT * FROM sys.configurations
WHERE name like 'Data processed %';
若要查看當天、當週或當月處理的資料量,請執行下列 T-SQL 語句:
SELECT * FROM sys.dm_external_data_processed
超過成本控制中定義的限制
如果查詢執行期間超過任何限制,查詢將不會終止。
超過限制時,新的查詢將會遭到拒絕,並顯示錯誤訊息,其中包含與該期間有關的詳細資料、該期間的已定義限制,以及該期間內處理的資料量。 例如,如果執行每週限制設定為 1 TB 的新查詢,則超過此值時,錯誤訊息將會是:
Query is rejected because SQL Serverless budget limit for a period is exceeded. (Period = Weekly: Limit = 1 TB, Data processed = 1 TB))
後續步驟
若要了解如何最佳化查詢來提高效能,請參閱無伺服器 SQL 集區的最佳做法。