PolarDB新增DDL多路歸并排序功能。數據庫大表中建立索引的DDL操作通常非常耗時,您可以通過DDL多路歸并排序功能, 縮短建立索引的DDL操作中索引排序的時間。
前提條件
PolarDB集群版本需滿足如下條件之一:
PolarDB MySQL版8.0.2版本且修訂版本為8.0.2.2.5及以上。
PolarDB MySQL版8.0.1版本且修訂版本為8.0.1.1.28及以上。
PolarDB MySQL版5.7版本且修訂版本為5.7.1.0.23及以上
如何確認集群版本,詳情請參見查詢版本號。
注意事項
當前不支持對全文索引和空間索引進行DDL多路歸并排序。
使用DDL多路歸并排序時,集群內存使用率會略微上升。假設開啟了N路歸并排序,排序過程中占用的集群內存大小為
(N+1)*innodb_sort_buffer_size
Byte。
使用方法
您可以通過如下innodb_polar_parallel_merge_ways參數設置歸并排序的路數:
參數 | 級別 | 說明 |
innodb_polar_parallel_merge_ways | Session | 設置建立索引過程中歸并排序的路數。取值范圍:2~16。默認值為2,表示數據庫默認為二路歸并排序。當該參數值大于2時,表示開啟多路歸并排序。 |
性能測試
測試環境
一個規格為8核32 GB的PolarDB MySQL版8.0版本的集群。
集群存儲空間為50 TB。
測試表結構
通過如下語句創建一張名為
table_1
的表:CREATE TABLE `table_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `seller_id` bigint(20) DEFAULT NULL, `seller_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, `update_time` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
測試表數據
通過如下語句生成測試數據:
delimiter || CREATE PROCEDURE populate_0(IN NUM INT) BEGIN DECLARE sid INT; DECLARE suffix_name INT; DECLARE i INT; SET sid=1000; SET suffix_name=10; SET i=1; START TRANSACTION; WHILE i <= NUM DO INSERT INTO table_1(seller_id,seller_name,gmt_create,update_time) VALUES(sid,CONCAT('sellername',suffix_name),NOW(),NOW()); SET suffix_name=suffix_name+1; SET sid=sid+1; SET i=i+1; END WHILE; COMMIT; END || delimiter ; CALL populate_0(100000000) ;
測試方法及結果
數據插入完成以后,分別設置8路歸并排序和2路歸并排序,通過執行SQL
alter table table_1 add index name_index (seller_name);
來測試DDL執行效率的提升比例:歸并排序路數
耗時(秒)
8路歸并排序
353
2路歸并排序
485
聯系我們
若您對DDL操作有任何疑問,可通過釘釘搜索群號入群咨詢。您可以直接@群內專家,并附上您要咨詢的問題;同時群內也有PolarDB MySQL版小助手24*7小時在線回答您的問題。釘釘群號:15375044501。