![如何在没有全局锁的情况下顺利删除 8 GB 的 InnoDB 表](https://linux22.com/image/622044/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%E5%85%A8%E5%B1%80%E9%94%81%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E9%A1%BA%E5%88%A9%E5%88%A0%E9%99%A4%208%20GB%20%E7%9A%84%20InnoDB%20%E8%A1%A8.png)
MySQL 版本:5.1.63。
我即将删除一个更大的 ~8 GB InnoDB 表。上周,我在另一台机器上删除了一个大四倍的表,全局锁启动,导致我们停机约 90 秒。我怀疑这与table_cache
锁。有谁能提供关于如何让这次 DROP 更加顺利的建议吗?首先小批量删除,然后删除TRUNCATE
它,最后删除一个DROP TABLE
?显然,如果可能的话,我希望将此数据库保留在生产中。我还一直在考虑在删除之前将缓冲池缩小。
我很乐意听取您的意见。
答案1
DROP TABLE
总是需要一些全局锁。我会按照你在问题中描述的方式去做:尽可能快地删除行(不要过多地扰乱磁盘 IO 和各种缓存,也要小心复制),然后删除它。