记录MySql删除42亿行数据表方法

背景:

现网db有个log表自增ID溢出,业务已经切换到其他表,但是之前有其他业务删除大表导致现网出现故障,这里考虑到是一张静态表,所以采用的是直接删除的方式,记录下当时的删除的步骤。

直接删除的风险:

1)长时间的执行时间可能会一直占用很多cpu,导致IO异常
2)删除大量数据时,MySQL通常会获取表级别的锁定,这可能会导致其他会话的阻塞

修改参数:

innodb_adaptive_hash_index =OFF
innodb_async_truncate_work_enabled =ON
innodb_async_drop_tmp_dir 非空

参数解释:
1、innodb_adaptive_hash_index

innodb_adaptive_hash_index 是MySQL InnoDB存储引擎的一个配置参数,用于控制自适应哈希索引(Adaptive Hash Index)的启用或禁用。

自适应哈希索引是InnoDB存储引擎的一个特性,用于提高查询性能。它通过在内存中维护一个哈希索引结构,加速对表的查询操作。自适应哈希索引会根据查询模式和数据访问模式动态地调整和优化索引结构,以提供更好的性能。

默认情况下,innodb_adaptive_hash_index 参数是启用的(ON),这意味着自适应哈希索引功能是开启的。当启用自适应哈希索引时,InnoDB存储引擎会根据查询模式和数据访问模式自动调整哈希索引的大小和结构,以提供更好的查询性能。

2、innodb_async_truncate_work_enabled

innodb_async_truncate_work_enabled 是MySQL InnoDB存储引擎的一个配置参数,用于控制异步截断操作的启用或禁用。

异步截断是指在删除或截断表时,MySQL InnoDB存储引擎是否使用异步方式执行这些操作。异步截断可以提高删除或截断大表时的性能,因为它允许MySQL继续处理其他查询和操作,而不必等待删除或截断操作完成。

默认情况下,innodb_async_truncate_work_enabled 参数是启用的(ON),这意味着异步截断功能是开启的。当执行删除或截断操作时,MySQL InnoDB存储引擎会将这些操作放入一个队列中,并在后台异步执行。这样,删除或截断操作可以更快地完成,而不会阻塞其他查询和操作。

3、innodb_async_drop_tmp_dir

innodb_async_drop_tmp_dir 是 MySQL InnoDB 存储引擎的一个配置参数,用于指定异步临时表删除操作的临时文件目录。

在 MySQL 中,当使用 InnoDB 存储引擎创建临时表时,如果启用了异步临时表删除功能,那么在删除临时表时,MySQL 会将删除操作放入一个队列中,并在后台异步执行。这样可以提高删除临时表的性能,因为 MySQL 不需要等待删除操作完成才能继续处理其他查询和操作。

innodb_async_drop_tmp_dir 参数用于指定异步临时表删除操作的临时文件目录。默认情况下,该参数为空,表示使用 MySQL 配置文件中的 tmpdir 参数指定的临时文件目录。

总结:

修改完这些参数执行drop命令后,实现了秒级删除,业务负载正常。

你可能感兴趣的:(mysql,mysql,数据库)