天天看點

最佳實踐—如何異步删除大表

背景資訊

PolarDB-X底層存儲節點,預設使用InnoDB引擎時,直接删除大表後會觸發表檔案的删除,導緻POSIX檔案系統出現嚴重的穩定性問題,是以InnoDB會啟動一個背景線程來異步清理資料檔案。當删除單個表空間時,會将對應的資料檔案先重命名為臨時檔案,然後清除線程将異步、緩慢地清理檔案。

說明 提供清除檔案日志來保證DDL語句的原子性。

操作步驟

  1. 使用如下指令檢視執行個體全局變量設定:
SHOW GLOBAL VARIABLES LIKE '%data_file_purge%';      
  1. 傳回結果如下:
+----------------------------------------+-------+
  | 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   |
  +----------------------------------------+-------+      
  1. 參數說明如下:
參數 說明
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 是否列印檔案清理工作程序。
  1. 可以使用如下指令設定參數:
set global INNODB_DATA_FILE_PURGE = on;
set global INNODB_DATA_FILE_PURGE_INTERVAL = 100;
set global INNODB_DATA_FILE_PURGE_MAX_SIZE = 128;      
  1. 說明 預設情況下PolarDB-X并不支援直接使用set global指令設定參數,建議在控制台上進行的存儲層參數設定。
  2. 使用如下指令檢視清理進度:
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。