本文介紹了非同步刪除大表的方法。
背景資訊
PolarDB-X底層儲存節點預設使用InnoDB引擎時,直接刪除大表後會觸發資料檔案的刪除,導致POSIX檔案系統出現嚴重的穩定性問題,因此InnoDB會啟動一個後台線程來非同步清理資料檔案。當刪除單個資料表空間時,會將對應的資料檔案先重新命名為臨時檔案,然後清除線程將非同步、緩慢地清理檔案。
說明 PolarDB-X提供清除檔案日誌來保證DDL語句的原子性。
操作步驟
- 使用如下命令查看執行個體全域變數設定:
SHOW GLOBAL VARIABLES LIKE '%data_file_purge%';返回結果如下:
+----------------------------------------+-------+ | Variable_name | Value | +----------------------------------------+-------+ | innodb_data_file_purge | ON | | innodb_data_file_purge_all_at_shutdown | OFF | | innodb_data_file_purge_dir | | | innodb_data_file_purge_immediate | OFF | | innodb_data_file_purge_interval | 100 | | innodb_data_file_purge_max_size | 128 | | innodb_print_data_file_purge_process | OFF | +----------------------------------------+-------+參數說明如下:
參數 說明 innodb_data_file_purge 是否啟用非同步清除策略。 innodb_data_file_purge_all_at_shutdown 順利關機時全部清理。 innodb_data_file_purge_dir 臨時檔案目錄。 innodb_data_file_purge_immediate 取消資料檔案的連結但不清理。 innodb_data_file_purge_interval 清理時間間隔。單位:ms。 innodb_data_file_purge_max_size 每次清理單個檔案大小的最大值。單位:MB。 innodb_print_data_file_purge_process 是否列印檔案清理背景工作處理序。 可以使用如下命令設定參數:
set global INNODB_DATA_FILE_PURGE = on; set global INNODB_DATA_FILE_PURGE_INTERVAL = 100; set global INNODB_DATA_FILE_PURGE_MAX_SIZE = 128;說明 預設情況下PolarDB-X並不支援直接使用set global指令設定參數,建議在控制台上進行儲存層參數設定。 - 使用如下命令查看清理進度:
select * from information_schema.innodb_purge_files;返回結果如下:
+--------+---------------------+--------------------+---------------+-------------------------+--------------+ | log_id | start_time | original_path | original_size | temporary_path | current_size | +--------+---------------------+--------------------+---------------+-------------------------+--------------+ | 0 | 2021-05-14 14:40:01 | ./file_purge/t.ibd | 146800640 | ./#FP_210514 14:40:01_9 | 79691776 | +--------+---------------------+--------------------+---------------+-------------------------+--------------+參數說明如下:
參數 說明 start_time 清理操作的開始時間。 original_path 資料檔案的原始路徑。 original_size 資料檔案的原始大小,單位:byte。 temporary_path 清理中的臨時檔案路徑。 current_size 待清理的剩餘臨時檔案大小,單位:byte。