AliSQL通过异步Purge数据文件的方式来提高系统的稳定性。
背景信息
当通过DROP TABLE或者TRUNCATE TABLE来删除数据时,对应的InnoDB数据文件会直接从文件系统中删除。如果数据文件非常大,直接删除文件会导致POSIX文件系统出现严重的稳定性问题。AliSQL的大文件清理功能会启动一个后台线程来异步清理数据文件。当执行DROP TABLE或者TRUNCATE TABL时,对应的数据文件会被重命名为临时文件,然后通过文件清理线程异步、平缓地清理。
使用方法
- 使用如下命令查看实例全局变量设置:
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;
- 使用如下命令查看清理进度:
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。