適用於此 Azure Well-Architected Framework 效能效率檢查清單建議:
| 體育:08 | 優化數據性能。 最佳化資料存放區、分割區和索引,以使其在工作負載中的預期和實際用途。 |
|---|
本指南說明最佳化資料效能的建議。 最佳化資料效能是關於改善工作負載處理和儲存資料的效率。 每個工作負載操作、事務或計算通常都依賴於快速準確的資料檢索、處理和儲存。 當資料效能最佳化時,工作負載會順暢執行。 資料效能受損會產生效能效率不佳的骨牌效應。 未能最佳化資料效能會導致回應延遲、延遲增加和可擴展性降低。 它會危及整個工作負載的效率。
定義
| 術語 | Definition |
|---|---|
| CAP 定理 | 用於考慮一致性、可用性和分割區容錯的架構,以協助說明資料一致性的取捨。 |
| 資料庫索引重建 | 捨棄並重新建立索引的維護活動。 |
| 資料庫索引重組 | 最佳化目前資料庫索引的維護活動。 |
| 資料存放區 | 儲存資料的資源,例如資料庫、物件存放區或檔案共用。 |
| 最終一致性 | 一種資料同步模型,允許資料複本在最終同步之前暫時不一致。 |
| Index | 提供項目快速存取的資料庫結構。 |
| 線上分析處理 (OLAP) | 一種組織大型業務資料庫、支援複雜分析並執行複雜分析查詢而不對交易系統產生負面影響的技術。 |
| 線上交易處理 (OLTP) | 一種技術,可記錄組織日常營運中發生的業務互動。 |
| 樂觀並發控制 | 一種更新資料庫的方法,它使用快照來進行更新,而不是傳統的鎖定機制,從而提高效能和可擴展性。 |
| PACELC 定理 | 用於考慮分割區容錯、可用性、一致性和延遲的架構,以協助說明資料一致性的取捨。 |
| Partitioning | 將資料實體分割成個別資料存放區的程式。 |
| 查詢調整 | 最佳化資料庫查詢速度的處理程序。 |
| 讀取複本 | 主要資料庫的即時副本,可讓您從寫入資料庫卸載讀取流量。 |
若要最佳化資料使用,請確定資料存放區、分割區和索引已針對其預期用途和工作負載中的實際用途進行最佳化。 優化資料使用可以提高查詢效能、減少資源消耗和提高整體系統效率。 考慮以下策略:
設定檔資料。 瞭解您的資料,並確保您的資料模型非常適合您的工作負載。 考慮資料正規化、索引策略和分割技術等因素。 為了有效率地檢索資料,請確保選擇適當的資料類型、定義實體之間的關係並確定最佳索引策略。
微調您的資料儲存組態。 設定您的資料儲存基礎架構以符合您的工作負載需求。 選取適當的儲存技術,例如關聯式資料庫、NoSQL 資料庫和資料倉儲。 優化儲存設置,例如緩衝區大小、快取機制和壓縮。
最佳化查詢效能。 分析和最佳化在工作負載中執行的查詢。 使用查詢最佳化、索引和快取等技術。 若要識別瓶頸,請使用查詢計劃和效能監控工具,然後進行必要的改進。
定期監控和調整系統。 持續監控工作負載的效能,並反覆查看資料儲存組態和查詢最佳化。 根據效能調整最佳實務,分析系統指標、識別需要改進的領域,並實作變更。
個人資料
資料分析涉及檢查來源的資料並收集有關它的資訊。 目標是了解工作負載資料的品質、結構和特性。 此過程可以識別缺失值、重複項、格式不一致和其他異常等問題。 為了進行有效的資料分析,請考慮以下策略:
了解資料結構。 檢查資料的結構,包括資料表、資料行和關係。 決定套用至每個直欄的資料類型、長度及限制。 資料結構評估可協助您瞭解資料的組織方式,以及資料與其他資料元素的關係。
分析資料量。 評估資料量以了解整體規模和成長模式。 決定記錄或文件的數量以及單個表或集合的大小。 此資訊可協助您預估儲存需求並識別可擴展性問題。
識別資料關係。 探索資料元素之間的關係,例如主索引鍵和外鍵關係。 瞭解資料的連線方式,以便判斷資料表或文件中的變更可能會如何影響相關資料。
評估資料品質。 透過檢查完整性、準確性、一致性和唯一性等因素來評估資料的品質。 識別可能影響資料完整性和查詢效能的資料異常、遺漏值或重複記錄。 此步驟可協助您識別資料清理和改進的領域。
擷取資料分佈。 分析每欄內值的分佈以確定資料模式。 識別頻繁和罕見的值、異常值和資料偏差。 若要最佳化查詢效能,請根據分佈選擇適當的索引策略和查詢最佳化技術。
監控資料效能
資料效能監控是持續即時追蹤資料存放區、分割區和索引效率的做法。 它涉及使用針對系統級、特定於資料庫或第三方監控解決方案量身定制的工具,收集和分析特定於資料操作的效能指標。 有效的資料效能監控使您能夠主動識別和緩解潛在的瓶頸,確保與資料相關的流程和任務高效。 若要監控資料效能,請考慮下列策略:
收集資料特定指標。 收集與資料效能直接相關的關鍵指標。 這些指標包括查詢回應時間、資料輸送量、與資料存取相關的磁碟 I/O 以及特定資料分割區的載入時間。
設定資料警示。 專門針對資料指標設定警示。 在這些指標中使用預先定義的閾值或異常來觸發警示。 警示可讓您在效能指標超出可接受的範圍或顯示異常行為時收到通知。 例如,如果資料庫查詢花費的時間比預期長,或資料輸送量大幅下降,則會觸發警示。 您可以使用專門的監控工具或自訂指令碼來設定這些警示。
診斷資料效能問題。 定期審查收集的資料指標,以找出資料操作中潛在的效能瓶頸或降級。 視覺化工具或儀表板在此過程中非常寶貴,有助於突出顯示資料效能的趨勢、瓶頸和異常值。 一旦確定,請深入研究這些問題的根本原因並制定適當的補救步驟策略。
資料分割
分割涉及將大型資料集或大量工作負載劃分為更小、可管理的子集。 分割區透過分配工作量和改善平行處理來提高資料效能效率。 它還確保根據特定需求和查詢模式進行更有效的資料存取。 您可以垂直或水平分割資料 (也稱為分區)。
| 策略 | Definition | Example | 使用案例 |
|---|---|---|---|
| 垂直分割 | 透過為每個分割區選擇特定列或欄位,將表格劃分為較小的表格。 每個分割區代表完整資料的子集。 | 如果您有資料行 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 流程以將處理時間降至最低。 您可以簡化提取過程、實施高效的轉換演算法並優化載入過程。 當您使每個步驟都有效率時,您可以優化整體工作流程。
並行處理:利用並行處理技術來提高效能。 當您將資料處理工作分散到多個執行緒或節點時,您可以同時分割和處理工作量,從而實現快速處理。
批次處理:將相似的任務分組在一起,減少重複操作帶來的開銷。 批量處理多個任務以減少整體處理時間。
最佳化儲存設計
優化儲存設計需要打造精確的資料儲存架構並選擇合適的儲存技術。 簡化的儲存設計增強了資料存取、檢索和操作。 透過策略性儲存設計,工作負載可改善回應時間和整體功能。
資料鄰近性設計
資料鄰近性是指將資料策略性地放置在更靠近最常存取資料的使用者或服務的位置。 透過減少資料與其使用者之間的實體或邏輯距離,資料鄰近性可確保更快的資料存取和更高的回應能力。 若要最佳化設計以實現近距離,請考慮以下策略:
評估資料存取模式:評估工作負載的存取模式和經常存取的資料。 此分析有助於確定將資料放置在何處以獲得最大利益。
選擇支援資料重新定位的解決方案:考慮根據不斷變化的存取模式提供動態資料重新定位的解決方案,確保最佳的資料定位。
選擇支援資料同步的解決方案:如果滿足分散式使用者群的需求,請選擇有助於跨不同區域資料同步的解決方案,確保資料副本在使用者附近可用。
權衡:如果基礎資料頻繁變更,請實作快取失效機制,以確保快取的資料保持最新狀態。
使用多語言持久性
多語言持久化是使用多種資料儲存技術來儲存和管理應用程式或系統內不同類型的資料的做法。 不同類型的資料庫或儲存解決方案可滿足不同的資料需求。
多語言持久性利用每種資料儲存技術的優勢,確保每種資料類型的最佳效能和可擴展性。 例如,您可以使用關聯式資料庫來儲存結構化的交易式資料。 您可以使用 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 監視器來收集和分析基礎結構計量、記錄和應用程式資料。 您可以將監視器與其他服務整合,例如 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 索引指引
- 了解資料存放區類型
效能效率檢查清單
請參閱完整的建議集。