優化資料效能的建議
適用于此 Azure Well-Architected Framework 效能效率檢查清單建議:
PE:08 | 優化資料效能。 優化資料存放區、資料分割和索引,以用於工作負載中的預期和實際用途。 |
---|
本指南說明優化資料效能的建議。 優化資料效能是關於調整工作負載處理及儲存資料的效率。 每個工作負載作業、交易或計算通常都依賴資料的快速、精確擷取、處理和儲存。 優化資料效能時,工作負載會順暢地執行。 遭入侵的資料效能會產生效能不佳的 domino 效果。 無法優化資料效能會導致回應延遲、延遲降低,以及延展性的延展性。 這會影響整個工作負載的效率。
定義
詞彙 | 定義 |
---|---|
CAP 定理 | 用來考慮一致性、可用性和資料分割容錯的架構,以協助說明資料一致性的取捨。 |
資料庫索引重建 | 卸載並重新建立索引的維護活動。 |
資料庫索引重新組織 | 優化目前資料庫索引的維護活動。 |
資料存放區 | 儲存資料庫、物件存放區或檔案共用等資料的資源。 |
最終一致性 | 資料同步處理模型,可在資料複本最終同步之前暫時不一致。 |
索引 | 提供專案快速存取的資料庫結構。 |
線上分析處理 (OLAP) | 一種技術,可組織大型商務資料庫、支援複雜的分析,並執行複雜的分析查詢,而不會對交易系統造成負面影響。 |
線上交易處理 (OLTP) | 一種技術,會在組織的日常作業中記錄商務互動。 |
開放式並行存取 | 更新使用快照集進行更新的資料庫,而不是傳統的鎖定機制,以改善效能和延展性的方法。 |
PACELC 定理 | 用來考慮分割區容錯、可用性、一致性和延遲的架構,以協助說明資料一致性的取捨。 |
資料分割 | 實際將資料分割成個別資料存放區的程式。 |
查詢微調 | 優化資料庫查詢速度的程式。 |
讀取複本 | 主資料庫的即時複本,可讓您從寫入資料庫卸載讀取流量。 |
主要設計策略
若要優化資料使用量,請確定資料存放區、資料分割和索引已針對其預定用途和工作負載的實際使用進行優化。 優化的資料使用量可以改善查詢效能、減少資源耗用量,以及增強整體系統效率。 請考慮下列策略:
分析資料。 瞭解您的資料,並確保您的資料模型非常適合您的工作負載。 請考慮資料正規化、編制索引策略和資料分割技術等因素。 若要有效率地擷取資料,請確定您選取適當的資料類型、定義實體之間的關聯性,以及判斷最佳的索引編制策略。
微調您的資料儲存體組態。 設定您的資料儲存體基礎結構,以符合您的工作負載需求。 選取適當的儲存技術,例如關係資料庫、NoSQL 資料庫和資料倉儲。 優化儲存體設定,例如緩衝區大小、快取機制和壓縮。
最佳化查詢效能。 分析並優化在工作負載中執行的查詢。 使用查詢優化、編制索引和快取等技術。 若要識別瓶頸,請使用查詢計劃和效能監視工具,然後進行必要的改善。
定期監視和調整系統。 持續監視工作負載的效能,並逐一查看資料儲存體組態和查詢優化。 根據效能微調最佳做法、分析系統計量、識別改進領域,以及實作變更。
分析資料
資料分析牽涉到檢查來源的資料,並收集其相關資訊。 目標是瞭解工作負載資料的品質、結構和特性。 此程式允許識別遺漏值、重複專案、不一致格式和其他異常等問題。 若要進行有效的資料分析,請考慮下列策略:
瞭解資料結構。 檢查資料的結構,包括資料表、資料行和關聯性。 判斷套用至每個資料行的資料類型、長度和條件約束。 資料結構評估可協助您瞭解資料的組織方式,以及它與其他資料元素的關聯性。
分析資料量。 評估資料量,以瞭解整體大小和成長模式。 決定記錄或檔的數目,以及個別資料表或集合的大小。 這項資訊可協助您預估儲存體需求,並找出延展性問題。
識別資料關聯性。 探索資料元素之間的關聯性,例如主鍵和外鍵關聯性。 瞭解資料的連線方式,因此您可以決定一個資料表或檔中的變更如何影響相關資料。
評估資料品質。 藉由檢查完整性、精確度、一致性和唯一性等因素來評估資料的品質。 識別可能會影響資料完整性和查詢效能的資料異常、遺漏值或重複記錄。 此步驟可協助您識別資料清理和改進的區域。
擷取資料分佈。 分析每個資料行中的值分佈,以判斷資料模式。 識別頻繁且罕見的值、極端值和資料扭曲。 若要優化查詢效能,請根據分佈選擇適當的索引編制策略和查詢優化技術。
監視資料效能
資料效能監視是即時追蹤資料存放區、資料分割和索引效率的做法。 它牽涉到使用專為系統層級、資料庫特定或協力廠商監視解決方案量身打造的工具,收集和分析資料作業特有的效能計量。 有效的資料效能監視可讓您主動識別並降低潛在的瓶頸,確保與資料相關的程式和工作有效率。 若要監視資料效能,請考慮下列策略:
收集資料特定的計量。 收集與資料效能直接相關的重要計量。 這些計量包括查詢回應時間、資料輸送量、與資料存取相關的磁片 I/O,以及特定資料分割的載入時間。
設定資料警示。 特別針對資料計量設定警示。 使用這些計量中的預先定義閾值或異常來觸發警示。 警示可讓您在效能計量超過可接受的範圍或顯示異常行為時收到通知。 例如,如果資料庫查詢花費的時間超過預期,或資料輸送量大幅下降,則會觸發警示。 您可以使用特製化監視工具或自訂腳本來設定這些警示。
診斷資料效能問題。 定期檢閱收集的資料計量,以找出資料作業的潛在效能瓶頸或效能降低。 視覺效果工具或儀表板在此程式中十分有用,有助於醒目提示資料效能的趨勢、瓶頸和極端值。 識別之後,請深入探討這些問題的根本原因,並調整適當的補救步驟。
分割資料
資料分割牽涉到將大型資料集或大量工作負載分割成較小的可管理子集。 資料分割可藉由散發工作負載並改善平行處理來增強資料效能。 它也會根據特定需求和查詢模式,確保更有效率的資料存取。 您可以垂直或水準分割資料 (也稱為分區化) 。
策略 | 定義 | 範例 | 使用案例 |
---|---|---|---|
垂直資料分割 | 選取每個資料分割的特定資料行或欄位,將資料表分割成較小的資料表。 每個分割區都代表完整資料的子集。 | 如果您有具有 A、B、C 和 D 資料行的資料表,您可以使用 A 和 B 資料行建立一個資料表,另一個資料表具有 C 和 D 資料行。 | - 資料表包含許多資料行,但查詢不會同時存取所有資料行。 - 某些資料行大於其他資料行,並加以分隔可提升 I/O 效能。 - 不同的資料元件具有不同的存取模式。 |
水準資料分割 | 根據資料列或值範圍分割資料, (也稱為分區化) 。 每個資料分割都包含具有類似特性的資料列子集。 | 如果您有具有資料列 1 到 1000 的資料表,您可能會建立一個資料分割,其中包含 1 到 500 個數據列,另一個資料列為 501 到 1000。 | - 資料集太大,無法用於單一位置或伺服器。 - 資料會根據特定範圍或篩選來存取。 - 需要將工作負載分散到實體節點或伺服器,以提升效能。 |
若要分割您的資料,請考慮下列步驟:
分析資料和查詢。 分析資料和查詢模式,以識別適當的資料分割或分區化策略。 瞭解資料、存取模式和散發需求的本質。
判斷索引鍵。 選擇分割區或分區化索引鍵,將資料分散到分割區或分區。 根據資料特性和查詢需求,仔細選取索引鍵。
判斷邏輯。 根據所選擇的索引鍵來判斷資料分割或分區化邏輯。 請考慮將資料分割成範圍、套用雜湊演算法,或使用其他資料分割技術。
設定基礎結構。 設定資料庫系統以支援資料分割或分區化。 請考慮建立必要的基礎結構、定義分割區或分區,以及設定資料散發。
如需詳細資訊,請參閱「 資料分割指引」。
優化資料庫查詢
優化資料庫查詢會使用索引提示和快取等技術來精簡查詢。 這些調整可提升資料擷取的效率與速度。 因此,資料庫具有較輕的工作負載,資源會更有效率地運作,且使用者享有更順暢的互動。 若要優化資料庫查詢,請考慮下列策略:
重寫查詢。 檢閱和分析複雜的查詢,以找出重寫它們的機會。 請考慮重建查詢邏輯、消除備援作業,或簡化查詢語法。
避免 N+1 查詢問題。 使用聯結和批次擷取來有效率地擷取相關資料,將往返資料庫的數目降到最低。
重新排序聯結。 評估查詢計劃,並考慮重新排列聯結順序,以將每個聯結作業中的資料列數目降到最低。 聯結資料表的順序可能會影響查詢效能。
使用索引提示。 使用索引提示,讓資料庫引擎可以在執行查詢時指定索引的使用。 索引提示會引導優化器選取最適當的索引。
快取查詢。 將經常執行的查詢結果儲存在記憶體中。 查詢快取不需要重複執行相同的查詢,並降低查詢處理額外負荷。
優化鎖定。 避免查詢中不必要的或限制鎖定提示。 有效率的鎖定策略可以增強查詢效能和並行。 套用資料庫系統提供的優化鎖定機制。 分析和調整隔離等級,以平衡資料一致性和查詢效能。
監視和微調。 監視查詢效能計量,例如執行時間、資源使用率和查詢輸送量。 使用資料庫分析工具和監視功能來識別效能不佳的查詢。 根據收集的效能資料來評估及微調查詢計劃。 分析查詢計劃和等候統計資料,以找出瓶頸。 使用該資訊將查詢效能優化。
將索引效能最佳化
索引可藉由允許資料庫使用特定資料行或欄位快速尋找資料,來增強資料擷取速度。 當您優化這些索引時,排序和聯結作業會變得更有效率,進而加快查詢速度。 優化索引會減少查詢所需的磁片 I/O 作業。 移除不必要的或備援索引也會釋放寶貴的儲存空間。 若要優化索引效能,請考慮下列策略:
分析查詢模式。 瞭解在資料庫上執行的查詢模式。 識別經常執行的查詢,而且可能會降低效能。 分析查詢模式,以判斷哪些索引有助於優化效能。
評估現有的索引。 檢閱資料庫中的現有索引。 評估其使用方式、效能效果,以及查詢模式的相關性。 識別您可以移除的備援或未使用的索引,以改善寫入效能並減少儲存體額外負荷。
識別用於編制索引的資料行。 識別經常用於查詢 之 where、 join和 order by 子句中的資料行。 這些資料行可能是索引編制的候選項目,因為它們可以快速擷取資料。
選擇適當的索引類型。 根據您的資料庫系統選取適當的索引類型。 常見選項包括相等和範圍查詢的 B 型樹狀結構索引、完全相符查詢的雜湊索引,以及文字搜尋作業的全文檢索索引。 選擇最符合查詢需求的索引類型。
請考慮索引資料行順序。 當您建立複合式索引或具有多個資料行的索引時,請考慮資料行的順序。 將最常用於查詢的資料行放在索引開頭。 資料行順序有助於確保您的工作負載有效地使用各種查詢的索引。
平衡索引大小。 請避免在低基數的資料行上建立索引,或具有低相異值的資料行。 這類索引可能沒有效率,並增加資料庫的大小。 相反地,索引具有高選擇性的資料行。
維護索引使用量。 持續監視索引的使用方式和效能。 尋找根據查詢模式或效能需求變更來建立新索引或修改現有索引的機會。 移除或更新不再有説明的索引。 索引有維護額外負荷。 當資料變更時,索引可能會分散並影響效能。 定期執行索引維護工作,例如重建或重新組織索引,以確保最佳效能。
測試和驗證。 在生產環境中修改索引之前,請先執行徹底的測試與驗證。 使用代表性工作負載測量索引修訂的效能效果。 根據預先定義的基準測試來確認改善。
取捨:B 型樹狀結構索引可能會有高儲存體額外負荷,且完全相符的查詢可能會變慢。 雜湊索引不適用於範圍查詢或比較運算子。 全文檢索索引可能具有高儲存體需求,而且非文字資料查詢可能會很慢。
考慮資料壓縮
資料壓縮是減少資料大小以優化儲存空間並改善工作負載效能效率的程式。 壓縮的資料需要較少的儲存空間和較少的頻寬進行傳輸,這會導致快速資料傳輸。 您會壓縮資料以減少儲存體使用量,並改善資料存取時間。 當您壓縮資料時,它會減少 I/O 作業和網路頻寬需求。
無遺失壓縮和遺失壓縮是資料壓縮演算法。 無遺失壓縮演算法可減少資料大小,而不會遺失任何資訊。 遺失壓縮演算法可藉由移除較不重要的或多餘的資訊來達到高壓縮率。
取捨:若要壓縮和解壓縮資料,您需要計算資源,例如 CPU 和記憶體。 壓縮的資料越多,所需的資源就越多。
封存和清除資料
封存和清除是簡化資料儲存的策略。 封存會將較舊、較不頻繁存取的資料重新放置到更具成本效益的儲存體。 清除資料會永久移除備援資料。 它們藉由減少資料量、增加資料存取速度,以及減少備份和復原時間,進而提升效能效率:
減少資料量:較少的資料表示處理時間更快,確保快速回應使用者要求。
增加資料存取速度:修剪的資料集允許更快速的查詢和資料擷取,將系統回應性優化。
減少備份和復原時間:較小的資料集可加速備份和還原程式,將停機時間降到最低,並確保一致的效能。
封存和清除有助於維護資料驅動系統中的尖峰效能效率。
優化儲存體負載
優化儲存體負載表示簡化對儲存體系統的要求。 這有助於消除不必要的要求。 它也會增強資料擷取,並防止儲存體過大。 優化儲存體負載可確保儲存系統仍能回應合法要求,並維持尖峰效能。 實作策略,以減少資料存放區的處理負擔。 若要優化資料存放區負載,請考慮下列策略:
使用快取
快取會將經常存取的資料儲存在快速存取儲存區域中,讓資料擷取速度比從主要來源提取資料更快。 這項技術可藉由減少存取時間並避免重複的資料擷取來提升資料效能。 快取可改善讀取速度和使用者回應時間,特別是針對經常存取的資料,此方法對於很少變更的靜態資料或資料最有效。
若要確保最佳的快取效率,請考慮到期原則、收回策略和管理快取大小等因素。 調整設定,例如存留時間 (TTL) ,以獲得最佳效能。 若要使用快取來優化儲存體負載,請考慮下列策略:
記憶體內部快取:執行記憶體內部快取,以將經常存取的資料儲存在記憶體中,以便快速擷取。 您可以將這項技術用於計算或從資料庫擷取成本高昂的應用程式資料。 記憶體內部快取適用于您經常讀取但不會經常變更的資料。
資料庫查詢快取:使用此技術來快取資料庫查詢的結果,以避免多次執行相同的查詢。 資料庫查詢快取適用于複雜且耗時的資料庫查詢。 當您快取查詢的結果時,會快速傳回相同查詢的後續要求。
內容傳遞網路快取:使用此技術來快取分散式網路伺服器上的 Web 內容,以減少延遲並改善內容傳遞。 內容傳遞網路快取對於靜態內容有效,例如影像、CSS 檔案和 JavaScript 檔案。 內容傳遞網路會將內容複本儲存在全球各地的多個位置,讓使用者可以從位於地理位置附近的伺服器存取內容。
使用讀取複本
許多資料庫都支援多個讀取複本。 將讀取查詢分散到複本,以將寫入資料庫的需求降到最低。 每個讀取複本都可以提供流量子集,以改善效能。
當您具有多個預期保持同步之資料複本的工作負載時,使用 PACELC 定理來建立此分散式系統的模型會很有説明。 PACELC 定理可協助您瞭解系統非分割狀態中的延遲與連續取捨選擇。 使用此資訊可協助您選擇資料庫引擎和資料同步處理策略,以最能解決資料分割和非分割狀態的系統。 如需詳細資訊,請參閱 命令和查詢責任隔離 (CQRS) 模式。
優化資料一致性
在分散式工作負載中,資料位於多個節點或位置,您選取的一致性層級會決定某個位置中的變更如何反映在其他位置。 選擇更嚴格的一致性會耗用更多計算資源,而且可能會對效能效率造成負面影響。 另一方面,較不嚴格的一致性層級,例如最終一致性引進節點之間的暫時不一致,但可以提升效能效率。
最終一致性會達到資料精確度與工作負載效能之間的平衡。 變更會逐漸分散,而不是立即擴大工作負載回應性和資料處理速度。 雖然它引進短期不一致的情況,但工作負載最終會在所有節點上呈現一致的資料。 選擇最終一致性可以提升工作負載的效能,並進一步增強其可用性和延展性。
優化資料更新
您可以使用開放式平行存取來處理相同資料的並行更新。 開放式平行存取可讓多個使用者或進程同時運作,並假設衝突很少發生,而不是鎖定資料並防止其他更新。
使用開放式平行存取時,每個更新作業都包含版本或時間戳記,代表更新時的資料狀態。 偵測到衝突的更新時,系統會拒絕更新或合併變更來解決衝突。
開放式平行存取可將爭用降到最低,並允許並行更新繼續,而不需要鎖定。 其可減少資源的等候時間,並提供高輸送量。
優化資料移動和處理
優化資料移動和處理牽涉到改善與資料擷取、轉換、載入和處理相關的作業效率與效能。 請考慮下列優化資料移動和處理的重要層面:
擷取、轉換和載入 (ETL) 優化:優化 ETL程式以將處理時間降到最低。 您可以簡化擷取程式、實作有效率的轉換演算法,以及優化載入程式。 當您讓每個步驟更有效率時,可以優化整體工作流程。
平行處理:利用平行處理技術來改善效能。 當您將資料處理工作分散到多個執行緒或節點時,您可以同時分割和處理工作負載,這會導致快速處理。
批次處理:將類似的工作分組在一起,以減少重複作業所造成的額外負荷。 在批次中處理多個工作,以減少整體處理時間。
優化儲存體設計
優化儲存體設計需要製作精確的資料儲存架構,並選取適當的儲存技術。 簡化的儲存體設計可增強資料存取、擷取和操作。 透過策略性儲存體設計,工作負載可達到改善的回應時間和整體功能。
資料鄰近性的設計
資料鄰近是指資料最接近最常存取之使用者或服務的策略性放置。 藉由減少資料與其使用者之間的實體或邏輯距離,資料鄰近性可確保資料存取速度更快,並改善回應性。 若要優化鄰近性的設計,請考慮下列策略:
評估資料存取模式:評估工作負載的存取模式和經常存取的資料。 此分析可協助判斷資料放置位置以取得最大效益。
選擇支援資料重新配置的解決方案:請考慮根據變更存取模式提供動態資料重新配置的解決方案,以確保最佳的資料定位。
選擇支援資料同步處理的解決方案:如果對分散式使用者基底有説明,請選擇可協助跨不同區域進行資料同步處理的解決方案,確保資料複本可接近使用者。
取捨:如果基礎資料經常變更,請實作快取失效機制,以確保快取的資料保持最新狀態。
使用 polyglot 持續性
Polyglot 持續性是使用多個資料儲存技術來儲存和管理應用程式或系統內不同類型的資料的做法。 不同類型的資料庫或儲存體解決方案可提供不同的資料需求。
Polyglot 持續性利用每個資料儲存技術的優點,以確保每種資料類型的最佳效能和延展性。 例如,您可以使用關係資料庫來儲存結構化交易資料。 而且您可以使用 NoSQL 資料庫來儲存非結構化或半結構化資料。
根據資料的需求,為每個資料儲存技術設計架構。 針對關係資料庫,您可以建立具有適當關聯性的標準化資料表。 針對 NoSQL 資料庫,您可以定義檔結構或索引鍵/值組。 開發必要的元件,以便與每個資料儲存技術互動,例如 API、資料存取層或資料整合管線。 確定應用程式可以讀取和寫入資料至適當的資料存放區。
取捨:具有低正規化的資料結構可以改善效能,但造成複雜性。
個別 OLTP 和 OLAP 系統
若要分隔 OLTP 和 OLAP 系統,請針對交易處理和分析處理工作設計及部署不同的系統。 此區隔可讓您針對每個系統的特定工作負載和特性優化。
OLTP 系統用於即時交易處理。 它們有效率且可靠地處理個別交易。 OLTP 系統通常用來執行日常作業工作,例如線上訂單處理、庫存管理和客戶資料管理。 OLTP 系統會優先處理回應性、一致性和並行。
OLAP 系統用於複雜的分析處理和報告。 它們會處理大量資料,並執行密集的計算和匯總。 OLAP 系統用於商業智慧、資料採礦和決策支援等工作。 OLAP 系統會設定查詢效能、資料匯總和多維度分析的優先順序。
當您分隔 OLTP 和 OLAP 系統時,您可以配置適當的資源,並針對其特定工作負載優化每個系統。 區隔可讓您將不同的資料模型化技術套用至每個系統。 OLTP 系統通常會使用標準化架構來有效率地處理交易處理。 OLAP 系統可能會使用反正規化架構或資料倉儲技術來優化查詢效能。
Azure 指導
分析資料:Azure 提供可用來分析資料的工具和服務,例如Azure 資料目錄、Azure Purview和Azure Synapse Analytics。 這些工具可讓您從各種來源擷取、轉換和載入資料、執行資料品質檢查,以及深入瞭解資料。
監視資料效能:若要監視資料效能,您可以使用 Azure 監視器來收集和分析基礎結構計量、記錄和應用程式資料。 您可以將 Monitor 與其他服務整合,例如 Application Insights。 Application Insights 提供應用程式效能監視並支援許多平臺。
Application Insights 會收集使用量和效能資料。 您可以使用 Log Analytics,將該資料與跨 Azure 資源的組態和效能資料相互關聯。
您可以使用Azure SQL和Azure Cosmos DB的深入解析功能來監視您的資料庫。 這項功能可讓您診斷和調整資料庫效能問題。
資料分割:Azure 為不同的資料存放區提供各種資料分割策略。 每個資料存放區可能會有不同的資料分割考慮和組態選項。 如需詳細資訊,請參閱 資料分割策略。
優化資料庫查詢和索引效能:使用 Azure SQL 資料庫的查詢效能深入解析功能,將查詢、資料表和資料庫優化。 您可以使用這項功能來識別查詢效能問題並進行疑難排解。
對於關係資料庫,您應該遵循索引設計指導方針、SQL Server索引指引和Azure Cosmos DB 索引指引。 使用SQL Database對查詢執行自動調整,以改善其效能。
在 SQL 資料庫中,您應該定期 重新組織或重建索引。 找出緩慢的查詢並加以微調,以改善效能。 許多資料庫引擎都有查詢微調功能。 如需詳細資訊,請參閱 查詢效能的最佳做法。
Azure Cosmos DB 有 預設的索引編制原則 ,可針對每個專案的每個屬性編制索引,並強制執行任何字串或數位的範圍索引。 此原則提供您有效率的查詢效能,而且您不需要事先管理索引。
優化儲存體負載:許多 Azure 資料庫服務都支援讀取複本。 讀取複本的可用性和設定會根據 Azure 資料庫服務而有所不同。 請參閱每個服務的官方檔,以瞭解詳細資料和選項。
優化儲存體設計:Azure 提供許多不同的資料存放區,以符合您的工作負載需求。 瞭解資料存放區類型 ,並 選取應用程式的 Azure 資料存放區。
相關連結
- 自動調整SQL Database
- Azure Cosmos DB
- Azure Cosmos DB 索引指引
- Azure SQL
- 查詢效能的最佳作法
- CQRS 模式
- 資料分割指引
- 資料分割策略
- 預設索引編制原則
- 索引設計指引
- OLAP 概觀
- OLTP 概觀
- 資料分割最佳做法
- 重新組織或重建索引
- 選取適用於您應用程式的 Azure 資料存放區
- SQL Server索引指引
- 瞭解資料存放區類型
效能效率檢查清單
請參閱一組完整的建議。