共用方式為


從 Azure Stream Analytics 提升 Azure SQL Database 的吞吐量效能

本文討論了在使用 Azure Stream Analytics 將資料載入 Azure SQL Database 時,如何提升寫入吞吐量的技巧。

Azure Stream Analytics 的 SQL 輸出支援平行寫入作為選項。 此選項允許 完全平行 的工作拓撲,即多個輸出分割區同時寫入目的資料表。 然而,在 Azure Stream Analytics 啟用此選項可能不足以達到更高的吞吐量,因為這很大程度上取決於你的資料庫設定與資料表結構。 索引的選擇、分群鍵、索引填充因子和壓縮會影響資料表載入時間。 欲了解更多如何根據內部基準優化資料庫以提升查詢與載入效能的資訊,請參閱 SQL 資料庫效能指引。 在與 SQL 資料庫平行撰寫時,寫入順序並不保證。

以下是每個服務中的一些配置,可以幫助提升整體解決方案的吞吐量。

Azure 串流分析

  • 繼承分割 – 此 SQL 輸出配置選項允許繼承您先前查詢步驟或輸入的分割方案。 啟用此功能後,若將資料寫入磁碟型資料表,且作業採用完全平行的拓撲,預期您會看到更佳的輸送量。 這種分割已經自動發生在許多其他 輸出中。 使用此選項進行的大量插入,也會停用資料表鎖定 (TABLOCK)。

    備註

    當輸入分割超過 8 個時,繼承輸入分割方案可能不適合。 此上限是在一個單一單位欄位和一個聚類索引的表格上觀察到的。 在這種情況下,可以考慮在查詢中使用 INTO 8,明確指定輸出寫入者的數量。 根據你的圖式和索引選擇,你的觀察可能會有所不同。

  • 次大小 - SQL 輸出設定允許你根據目標資料表/工作負載的性質,在 Azure Stream Analytics SQL 輸出中指定最大批次大小。 批次大小是每次批量插入交易中傳送的最大記錄數。 在叢集列存儲索引中,批次大小約為100K,允許更多的平行化操作,將日誌記錄最小化,並優化鎖定機制。 對於磁碟型資料表而言,10K (預設) 或更低值可能較適合您的解決方案,因為較高的批次大小可能會在大量插入期間觸發鎖定升級。

  • 輸入訊息調整 ——如果你已經優化了繼承分割和批次大小,增加每個分割訊息的輸入事件數量,有助於進一步提升寫入吞吐量。 輸入訊息調整允許 Azure Stream Analytics 中的批次大小達到指定的批次大小,從而提升吞吐量。 這可以透過 壓縮 或在 EventHub 或 Blob 中增加輸入訊息大小來達成。

SQL Azure

  • 分割資料表與索引 ——使用 分割 SQL 資料表,並在與分割區鍵相同欄位的表格上放置分割區索引(例如 PartitionID),能大幅減少寫入時分割區間的爭用。 對於分割資料表,你需要在 PRIMARY 檔案群組建立 分割區函式 和分割 區方案 。 這也將提升現有資料在載入新資料時的可用性。 記錄 IO 限制可能會依分割區數量而達到上限,這可透過升級 SKU 來提高。

  • 避免獨特金鑰違規 ——如果你在 Azure Stream Analytics 活動日誌中收到 多個金鑰違規警告訊息 ,請確保你的工作不會受到恢復案件中可能發生的獨特約束違規影響。 這可以透過在索引中設定 IGNORE_DUP_KEY 選項來避免。

Azure Data Factory 與記憶體內資料表

  • In-Memory 表格作為暫存表格 —— In-Memory 表格 允許非常高速的資料載入,但資料必須容納於記憶體中。 基準測試顯示,從記憶體內資料表大量載入至磁碟型資料表,大約比直接使用單一寫入器插入到具有識別資料行與叢集索引的磁碟型資料表快 10 倍。 為了利用這種大量插入效能,可以使用 Azure Data Factory 設定一個複製工作 ,將記憶體內資料表的資料複製到磁碟資料表。

避免效能陷阱

大量插入資料比單次插入載入資料快得多,因為避免了重複傳輸資料、解析插入語句、執行語句及發出交易記錄的開銷。 取而代之的是,使用更有效率的路徑進入儲存引擎來串流資料。 然而,此路徑的設定成本遠高於磁碟資料表中單一插入語句。 損益平衡點通常約為100行,超過此範圍後,大量裝載幾乎總是更有效率。

如果事件輸入率很低,很容易產生小於 100 列的批次大小,這會讓大量插入效率降低,且會佔用過多磁碟空間。 為了繞過這個限制,你可以採取以下步驟之一:

  • 建立 INSTEAD OF 觸發程序,以便對每一列使用簡單插入。
  • 請使用前面章節中所述的內存臨時表。

另一種情況發生在寫入非叢集欄位儲存索引(NCCI)時,較小的批量插入可能產生過多區段,導致索引當機。 在此情況下,建議改用叢集欄位儲存索引。

總結

總結來說,透過 Azure Stream Analytics 的 SQL 輸出分區輸出功能,將你的工作與 SQL Azure 中的分區資料表對齊,應該能大幅提升吞吐量。 利用 Azure Data Factory 協調資料從 In-Memory 資料表到磁碟資料表的傳輸,能帶來數量級的吞吐量提升。 若可行,提升訊息密度也可能是提升整體吞吐量的重要因素。

下一步