PolarDB新增DDL預讀功能。資料庫中大表的DDL操作通常非常耗時,您可以通過DDL預讀功能縮短執行DDL操作的時間。
前提條件
PolarDB叢集版本需滿足如下條件之一:
PolarDB MySQL版8.0版本且修訂版本為8.0.1.1.28及以上。
PolarDB MySQL版5.7版本且修訂版本為5.7.1.0.22及以上。
PolarDB MySQL版5.6版本且修訂版本為5.6.1.0.34及以上。
如何確認叢集版本,詳情請參見查詢版本號碼。
注意事項
開啟DDL預讀功能後,由於預讀線程的存在,IO資源的佔用也會隨之增加,可能會影響同一時間內正在執行的其他SQL操作,因此建議在業務低峰期使用DDL預讀功能。
使用方法
loose_innodb_polar_ddl_build_index_readahead
您可以通過如下loose_innodb_polar_ddl_build_index_readahead參數開啟DDL預讀功能:
參數
層級
說明
loose_innodb_polar_ddl_build_index_readahead
Global
DDL預讀功能的開關,取值範圍如下:
ON:開啟DDL預讀功能。
OFF:關閉DDL預讀功能(預設值)。
loose_innodb_polar_ddl_build_index_readahead_page_num
您還可以通過如下loose_innodb_polar_ddl_build_index_readahead_page_num參數設定DDL預讀的資料量:
參數
層級
說明
loose_innodb_polar_ddl_build_index_readahead_page_num
Global
DDL預讀的page數量,一個page大小是16k。取值範圍:32~256。預設值為64。
效能測試
測試環境
一個規格為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) ;
測試方法及結果
資料插入完成以後,需要重啟PolarDB進程,保證記憶體buffer_pool中沒有快取資料。通過對比是否開啟DDL預讀功能,來測試DDL執行效率的提升比例。
通過執行SQL
alter table table_1 add index name_index (seller_name);
來進行DDL執行效率的對比:DDL預讀功能開啟情況
耗時(秒)
關閉DDL預讀功能
485
開啟DDL預讀功能
(loose_innodb_polar_ddl_build_index_readahead_page_num為256)
412
通過執行SQL
alter table table_1 add column c1 varchar(100) after id;
來進行DDL執行效率的對比:DDL預讀功能開啟情況
耗時(秒)
關閉DDL預讀功能
264
開啟DDL預讀功能
(loose_innodb_polar_ddl_build_index_readahead_page_num為256)
159
聯絡我們
若您對DDL操作有任何疑問,請聯絡我們。