Purge Large File Asynchronously

AliSQL通过异步Purge数据文件的方式来提高系统的稳定性。

背景信息

当通过DROP TABLE来删除数据时,对应的InnoDB数据文件会直接从文件系统中删除。如果数据文件非常大,直接删除文件会导致POSIX文件系统出现严重的稳定性问题。AliSQL的大文件清理功能会启动一个后台线程来异步清理数据文件。当执行DROP TABLE时,对应的数据文件会被重命名为临时文件,然后通过文件清理线程异步、平缓地清理。

使用方法

  1. 使用如下命令查看实例全局变量设置:

    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;
  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。