若您的資料表存在資料扭曲、分區欄位不合理或索引過多等問題,可以在空間診斷頁面進行分區欄位合理性診斷、分布欄位傾斜診斷和複製表合理性診斷,也可以根據提供的冷熱資料最佳化和索引最佳化的調優建議進行庫表結構最佳化,從而降低叢集使用成本,提高叢集使用效率。
注意事項
僅核心版本為3.1.4及以上版本的叢集支援冷熱表最佳化和索引診斷功能。
冷熱表最佳化和索引診斷功能的調優建議是根據資料和查詢特徵的歷史資料分析得到的。當資料和查詢特徵穩定,則相關建議的有效性可持續;當資料和查詢特徵發生劇烈變化,則由歷史資料分析得到的調優建議的參考價值明顯下降。在使用該功能前,請您根據自身業務特徵的變化情況考慮是否採用相應建議。
表診斷
表傾斜診斷
您可以在建立表時通過DISTRIBUTED BY HASH
指定分布鍵,定義分布鍵之後,AnalyticDB for MySQL會對分布鍵的值進行雜湊計算,根據計算得出的雜湊值,將不同行的資料分散到不同分區(Shard)。如果資料在儲存節點上分布不均,會導致磁碟空間傾斜,進而導致磁碟較早被鎖定,影響資料寫入。
診斷標準
AnalyticDB for MySQL會對行數超過1萬行的表進行表傾斜診斷。資料扭曲計算方法如下:
去除一個最大的Shard,再計算平均Shard大小。
若某個Shard大於
平均Shard大小*閾值
或小於平均Shard大小/閾值
,則認為該表存在傾斜。閾值預設值是3,取值範圍是[0,10000000000],您可使用SET ADB_CONFIG RC_DATA_SKEW_THRESHOLD=Value;
語句調整閾值。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單。在集群清單上方,選擇產品系列,然後單擊目的地組群ID。
在左側導覽列單擊
。單擊表診斷頁簽,查看錶傾斜診斷的詳細資料。
存儲節點磁盤使用率
您可以通過圖表查看各個儲存節點的磁碟使用率,以此判斷磁碟空間是否傾斜。若磁碟空間存在傾斜,您可根據下方Top10傾斜錶中的具體資訊,對傾斜表進行最佳化;若磁碟空間沒有傾斜,但下方Top10傾斜錶中有傾斜表,此時您也需要對傾斜表進行最佳化,以免影響叢集查詢效能。
Top10傾斜錶
該地區會顯示存在資料扭曲的表,這些表會按照表總資料量降序排列。您可以單擊資料表對應操作列的查看傾斜詳情,查看當前表在各個Shard上的行數,並以此判斷當前資料表的傾斜程度。
最佳化方法
您可以通過以下三種方法解決:
擴容儲存空間。
湖倉版叢集需擴容儲存預留資源。具體操作請參見湖倉版擴縮容。
數倉版彈性模式叢集需擴容彈性IO資源。具體操作請參見數倉版彈性模式擴縮容。
數倉版預留模式叢集需擴容節點群組。具體操作請參見數倉版預留模式叢集擴容。
刪除空閑索引或分區,減少儲存空間的佔用。具體操作請參見索引診斷。
重建立表並遷移資料,具體操作請參見CREATE TABLE。
冷熱表最佳化
AnalyticDB for MySQL會對錶訪問次數進行分析,判斷哪些表訪問次數較少,並給出相關最佳化建議。您可根據最佳化建議,修改表的資料存放區冷熱分離策略。資料存放區冷熱分離的詳情,請參見資料存放區冷熱分離。
診斷標準
AnalyticDB for MySQL會對最近15天未訪問,且訪問率小於1%的熱表給出調優建議。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單。在集群清單上方,選擇產品系列,然後單擊目的地組群ID。
在左側導覽列單擊
。在表診斷頁簽下,單擊冷熱錶優化。
在可用優化建議頁簽下,單擊右上方的開啟,開啟冷熱表最佳化功能。若當前叢集已開啟冷熱表最佳化功能,可跳過本步驟。
單擊可用優化建議和已採納的建議,使用者可以查看可用最佳化建議和已採納的建議。
參數
說明
建議ID
最佳化建議的ID。
SQL
最佳化建議需要變更的表和相應定義等。
最佳化類型
冷熱庫表最佳化。
具體最佳化建議
針對最佳化類型,給出的具體最佳化建議。
預期最佳化收益
最佳化建議應用後帶來的預期收益。
說明預期最佳化收益是基於歷史資料統計的預估值,非即時統計的準確值,僅供參考。
具體操作指引
您可以對當前最佳化建議採取一鍵應用操作。
說明單擊一鍵應用後,AnalyticDB for MySQL會直接將表的儲存策略更改為COLD。若您想更改為MIXED或HOT,請執行ALTER語句手動修改儲存策略。詳情請參見儲存策略。
一鍵應用,表示同意採納該最佳化建議。一鍵應用後相應叢集將執行SQL變更,同時該建議將出現在已採納的建議頁簽中。
一鍵應用的效果等同於在用戶端執行相應SQL,不支援撤銷操作,請謹慎使用。
建議SQL下發後,需要資料表完成Build操作後方可完成應用,Build操作是資料庫系統按一定規則自動觸發的,未觸發前,相應建議處於“運行中”的狀態,觸發後變為“已完成”狀態。
複製表診斷
AnalyticDB for MySQL在建立表時可以指定資料的分布方式為複製方式(即DISTRIBUTED BY BROADCAST
)。複製表會在每個Shard上儲存一份相同的資料。若叢集的查詢業務存在大表JOIN小表(例如,A表為大表,B表為小表,A JOIN B),並且這類查詢的並發較高時,您可以將資料量小的表建立為複製表,以減少該表在叢集內部網路間的資料轉送,提升並發效能。但是複製表的寫入效能較差,也會佔用大量的儲存空間,進而影響AnalyticDB for MySQL叢集的整體寫入效能。
診斷標準
複製表單表大於2萬條記錄即視為不合理。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單。在集群清單上方,選擇產品系列,然後單擊目的地組群ID。
在左側導覽列單擊
。在表診斷頁簽下,單擊複製表診斷。
最佳化方法
您需建立普通表並遷移資料,具體操作請參見CREATE TABLE。
分區診斷
分區表診斷
建立分區表時若分區欄位設定不合理,則會導致以下問題:
分區過大時(例如:按年做分區,每一年的資料會儲存在一個分區內,此時分區數較少,但每個分區內的資料量較大),若該分區存在Build任務,會導致Build任務耗時間長度,佔用較多的資源(儲存節點CPU和磁碟IO資源),進而影響叢集的穩定性。
分區過小時(例如:按小時做分區,每小時的資料會儲存在一個分區內,此時分區數較多,但是每個分區內的資料量較少),叢集會緩衝大量分區資訊,需佔用較多的記憶體資源,同時也會導致查詢資料時要掃描較多分區,進而影響查詢效能。
怎樣算合理的分區大小
分區大小是指分區的行數1,其合理性與Shard數2成正比。Shard數為N時,分區的行數在[100W * N, 500W * N]區間內,則認為分區大小合理。
例如,Shard數為64,如果分區的行數在[6400萬, 32000萬]範圍內,則分區大小合理。
1查詢分區的行數:
SELECT partition_id, row_count FROM information_schema.kepler_partitions WHERE schema_name = '$DB' AND table_name ='$TABLE' AND partition_id > 0;
2查詢Shard數:
SELECT COUNT(1) FROM information_schema.kepler_meta_shards;
診斷分區欄位是否合理
診斷標準
如果表中有10%及以上的分區大小不合理,則認為該表的分區欄位不合理。
例如,表有100個分區,如果存在10個及以上的分區大小不合理,則診斷結果為該表分區欄位不合理。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單。在集群清單上方,選擇產品系列,然後單擊目的地組群ID。
在左側導覽列單擊
。單擊分區診斷頁簽,即可在分區表診斷地區查看是否存在分區不合理的表以及不合理分區的分區名稱。
怎樣調整分區大小到合理區間
當您在分區表診斷中發現不合理分區時,可以參考以下方法調整分區。
如果分區行數未達到合理區間的下限,則認為分區過小,建議加大分區粒度。例如,Shard數為64,那麼分區行數的合理範圍在[6400萬, 32000萬]區間。如果分區的行數小於6400萬,則分區過小,建議將按天分區改為按月分區。
如果分區行數超過了合理區間的上限,則認為分區過大,建議降低分區粒度。例如,Shard數為64,那麼分區行數的合理範圍在[6400萬, 32000萬]區間。如果分區的行數大於32000萬,則分區過大,建議將按月分區改為按天分區。
修改分區粒度的方法,請參見變更分區函數格式。
如果表的總行數未達到合理區間的下限,且預估未來的資料增長也不會達到合理區間的下限,可以考慮建立一個非分區表,將該分區表的資料移轉到非分區表。
非分區表診斷
如果建立表時未指定PARTITION BY
欄位,則該表為非分區表。非分區表執行DML操作(INSERT、UPDATE、DELETE)時,容易觸發全表Build,若非分區表資料過多,會導致Build時佔用較多臨時空間,進而導致節點磁碟使用率升高,磁碟被鎖定。除此之外資料量較大的表Build時也會佔用較多的磁碟IO資源和CPU資源,降低叢集的整體效能。
診斷標準
非分區表資料超過10億行時,則視為不合理。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單。在集群清單上方,選擇產品系列,然後單擊目的地組群ID。
在左側導覽列單擊
。單擊分區診斷頁簽,查看非分區表診斷資訊。
最佳化方法
您需要建立分區表並遷移非分區表的資料,具體操作請參見CREATE TABLE。
索引診斷
AnalyticDB for MySQL會分析資料索引的使用方式,對長期未使用的資料索引,將自動給出調優建議,您可以根據調優建議刪除空閑索引,以降低資料索引的儲存成本。
空閑索引診斷
診斷標準
最近15天未使用,且使用率小於1%的索引為空白閑索引。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單。在集群清單上方,選擇產品系列,然後單擊目的地組群ID。
在左側導覽列單擊
。單擊索引診斷頁簽,查看空閒索引優化的詳細資訊。
在可用優化建議頁簽下,單擊右上方的開啟,開啟索引診斷功能。若當前執行個體已開啟索引診斷功能,可跳過本步驟。
單擊可用優化建議和已採納的建議,使用者可以查看可用最佳化建議和已採納的建議。
參數
說明
建議ID
最佳化建議的ID。
SQL
最佳化建議需要變更的表和相應定義等。
最佳化類型
索引最佳化。
具體最佳化建議
針對最佳化類型,給出的具體最佳化建議。
預期最佳化收益
最佳化建議應用後帶來的預期收益。
說明預期最佳化收益是基於歷史資料統計的預估值,非即時統計的準確值,僅供參考。
具體操作指引
您可以對當前最佳化建議採取一鍵應用操作。
說明資料索引刪除後,如果查詢再次使用該資料列進行過濾操作,查詢時間會變長。
一鍵應用,表示同意採納該最佳化建議。一鍵應用後相應叢集將執行SQL變更,同時該建議將出現在已採納的建議頁簽中。
一鍵應用的效果等同於在用戶端執行相應SQL,不支援撤銷操作,請謹慎使用。
建議SQL下發後,需要資料表完成Build操作後方可完成應用,Build操作是資料庫系統按一定規則自動觸發的,未觸發前,相應建議處於“運行中”的狀態,觸發後變為“已完成”狀態。
主鍵索引診斷
診斷標準
若表中主鍵欄位數大於3,且主鍵欄位數達到表所有欄位的一半,即說明主鍵索引過多。
操作步驟
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單。在集群清單上方,選擇產品系列,然後單擊目的地組群ID。
在左側導覽列單擊
。單擊索引診斷頁簽,查看主鍵過多診斷的詳細資訊。
在可用優化建議頁簽下,單擊右上方的開啟,開啟索引診斷功能。若當前叢集已開啟索引診斷功能,可跳過本步驟。
單擊可用優化建議和已採納的建議,使用者可以查看可用最佳化建議和已採納的建議。
參數
說明
建議ID
最佳化建議的ID。
SQL
最佳化建議需要變更的表和相應定義等。
最佳化類型
索引最佳化。
具體最佳化建議
針對最佳化類型,給出的具體最佳化建議。
預期最佳化收益
最佳化建議應用後帶來的預期收益。
說明預期最佳化收益是基於歷史資料統計的預估值,非即時統計的準確值,僅供參考。
具體操作指引
您可以對當前最佳化建議採取一鍵應用操作。
說明資料索引刪除後,如果查詢再次使用該資料列進行過濾操作,查詢時間會變長。
一鍵應用,表示同意採納該最佳化建議。一鍵應用後相應叢集將執行SQL變更,同時該建議將出現在已採納的建議頁簽中。
一鍵應用的效果等同於在用戶端執行相應SQL,不支援撤銷操作,請謹慎使用。
建議SQL下發後,需要資料表完成Build操作後方可完成應用,Build操作是資料庫系統按一定規則自動觸發的,未觸發前,相應建議處於“運行中”的狀態,觸發後變為“已完成”狀態。
相關API
API | 說明 |
查看目標數倉版叢集的分區診斷資訊。 | |
查看目標湖倉版叢集中主鍵過多的表。 |