引起 MySQL 数据库性能抖动的原因有很多,比如大事务、定时批量查询等,而这些原因我们一般都会注意到。但是,有一个引起性能抖动的原因却经常被我们忽视,那就是在生产环境删除无用的大表,即 DROP TABLE。
一、为什么要 DROP TABLE?
生产环境中,为什么要 DROP TABLE?相信绝大部分原因是为了释放空间。
生产环境大多数是已经确定的库表,一般不会进行 DROP TABLE 这么重的操作,甚至大部分DBA 都不应该拥有 DROP 权限。
但是随着数据无限增长,在某些系统中,需要将数据归档到历史数据库,删除生产数据库中的表,从而释放存储空间,典型的就是偏日志、流水类的数据。
不过,当我们谈一个数据库多大的时候,单纯讨论存储容量意义并不大,我们更希望得到的是活跃记录有多少。
银行系统的 Oracle 数据库,虽然单库都可以数 T,但大部分都是日志数据或流水数据。
生产环境的流水表,单表容量可能几百 G,上 T,怎样在不影响业务的情况下,优雅地 DROP TABLE 呢**(这里优雅的定义为业务耗时上升不超过20%)**?
DROP TABLE 本来是一个非常简单的操作,但是要做到在生产环境中,对业务耗时影响很小,基本无感知,简直就是一件艺术。
或许大部分数据库系统都没有这么高的要求,但是海量并发的互联网业务有!
二、关于MySQL版本
在 MySQL 5.5.23 版本前,