一. 背景
表数据大概几十万,不到五十万
每隔10几分钟使用truncate清空数据,然后再写入等量数据
数据库主从结构
数据库版本5.7
二. 现象
执行truncate时从库偶发抛异常【System Lock】,非必现。占用线程资源,导致后续SQL语句全部阻塞
从库不可用,进而导致路由到该从库的请求全部阻塞,从而导致应用雪崩
三. 分析
网上搜了很多资料,都说是truncate在MySQL5.7及以下版本的bug,drop命令可以解决此问题,升级到8.0也可以解决此问题。
网上资料说数据量达到几千万才会出现此问题,实际上几十万就出现。原因可能和相关配置、系统并发量有关
MDL写锁原因(猜测?)
- 参考资料:https://time.geekbang.org/column/article/69862
- 资料中说&