庫表
本文介紹AnalyticDB for MySQL中庫表優化的常見問題及解決方法。
當常見問題場景中未明確產品系列時,表明該問題僅適用于AnalyticDB for MySQL數倉版。
常見問題概覽
如何合理建表?
在AnalyticDB for MySQL中建表時,需要注意以下幾點:
分布字段的選擇。AnalyticDB for MySQL是分布式數據庫,數據需要根據分布字段均勻地分布在各個后臺節點才能保證盡可能高的利用資源。分布字段選擇不合理,會導致寫入時存在熱點,降低寫入性能。
分區字段合理性。AnalyticDB for MySQL后臺以分區為粒度進行數據存儲、索引的構建以及查詢。每個分區的數據行數過少,可能導致查詢時掃描的二級分區數較多,降低掃描性能;如果每個分區的數據行數過多,可能頻繁觸發該分區的索引構建,所以合理的二級分區對系統整體穩定性非常重要。
復制表合理性。復制表在每個后臺節點都保存一份,好處是在需要和復制表進行JOIN時,不需要對復制表進行網絡傳輸,提高系統的并發處理能力。但對復制表進行增刪改時,會對涉及的數據行進行重復多次的操作,以保證每個復制表的副本都生效。所以復制表不宜過大,也不宜對復制表頻繁進行增刪改查操作。
表個數的上限是多少?
更多詳情,請參見使用限制。
創建表后為什么看不到分區信息?
創建了分區表后,需要執行BUILD TABLE
語句才能看到分區信息。BUILD TABLE
的詳細信息,請參見BUILD。
如何修改二級分區表生命周期(lifecycle)?
使用如下語句修改二級分區表生命周期:
ALTER TABLE db_name.table_name partitions N;
是否支持修改分布字段和分區字段?
AnalyticDB for MySQL不支持修改分布字段和分區字段。如需修改分布字段和分區字段,您可以嘗試如下辦法:先創建臨時表,并通過INSERT INTO SELECT命令把原表數據導入到臨時表。刪除原表后,使用正確的分布字段或者分區字段建表,再次使用INSERT INTO SELECT把臨時表數據導入到新建的表。
如何查看表的所有二級分區及分區的統計信息?
執行以下SQL,可以查看表的所有二級分區及分區的統計信息:
SELECT partition_id, --分區名
row_count, -- 分區總行數
local_data_size, --分區本地存儲所占用空間大小
index_size, -- 分區的索引大小
pk_size, --分區的主鍵索引大小
remote_data_size --分區的遠端存儲所占用空間大小
FROM information_schema.kepler_partitions
WHERE schema_name = '$DB'
AND table_name ='$TABLE'
AND partition_id > 0;
分片數跟什么因素有關系,是否可以自己調整?
分片數是創建集群時根據集群初始規格自動計算得出的,不支持調整分片數。
如何刪除索引?
執行以下SQL刪除索引。
ALTER TABLE db_name.table_name DROP KEY index_name;
參數說明和示例,請參見ALTER TABLE。
如何解決刪除數據庫時提示“schema is not empty. ”?
云原生數據倉庫 AnalyticDB MySQL 版集群中的數據庫里面還有其他表,且表里面還有數據,則會導致該報錯。您可以刪除數據庫前需要先刪除庫中的所有表,此時使用drop table
語句刪除很麻煩,建議您使用新版DMS進行批量刪除。
登錄數據管理DMS 5.0,選擇已登錄實例,單擊實例名,右鍵單擊庫名,選擇單庫查詢。
右鍵單擊任意表名,然后選擇批量操作表,全選所有表,單擊刪除表然后單擊確認即可。