MySQL truncate table 与 delete 清空表的区别和坑

拓展阅读

MySQL View

MySQL truncate table 与 delete 清空表的区别和坑

MySQL Ruler mysql 日常开发规范

MySQL datetime timestamp 以及如何自动更新,如何实现范围查询

MySQL 06 mysql 如何实现类似 oracle 的 merge into

MySQL 05 MySQL入门教程(MySQL tutorial book)

MySQL 04- EMOJI 表情与 UTF8MB4 的故事

MySQL Expression 1 of ORDER BY clause is not in SELECT list,references column

truncate 的问题

以前使用 delete from,感觉耗时较多,所以就采用了 truncate。

后来发现阻塞读,本篇简单记录下采坑之路。

truncate 的阻塞原理

truncate 应慎重,它属于ddl,会lock table meta data,甚至可能由锁表升级为锁库

5.7 及其以前

css 复制代码
In MySQL 5.7 and earlier, on a system with a large buffer pool and innodb_adaptive_hash_index enabled, a TRUNCATE TABLE operation could cause a temporary drop in system performance due to an LRU scan that occurred when removing the table's adaptive hash index entries (Bug #68184). The remapping of TRUNCATE TABLE to DROP TABLE and CREATE TABLE in MySQL 8.0 avoids the problematic LRU scan.

这个会导致阻塞

8.0

参考文档,会将 truncate 调整为 drop+create。

中间过程会导致问题。

实际上 drop 也是有会阻塞查询的。

drop 阻塞读

drop table引起的MySQL 短暂hang死的问题,是由于drop 一张使用AHI空间较大的表时,调用执行AHI的清理动作,会消耗较长时间,执行期间长时间持有dict_operation_lock的X锁,阻塞了其他后台线程和用户线程;

drop table执行结束锁释放,MySQL积压的用户线程集中运行,出现了并发线程和连接数瞬间上升的现象。规避问题的方法,可以考虑在drop table前关闭AHI。

ps: AHI 是自适应 HASH 索引,一种优化策略。

参考资料

mysql 8.0 官方文档

stackoverflow-MySQL TRUNCATE TABLE blocks queries in other databases

mysql案例 ~ 关于drop的那点事

记一次truncate导致的锁表处理

mysql 中的三种锁表方式

MySQL的TRUNCATE关键字

MySQL DROP 大表时的注意事项

MySQL AHI 实现解析

相关推荐
无心水8 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
Boilermaker199215 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维15 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_9916 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子16 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji341616 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体117 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy180917 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy180917 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假18 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端