我们在数据库中有数百个InnoDB表,我们使用phpMyAdmin来pipe理它们。 不幸的是,phpMyAdmin在SHOW TABLE STATUS列表时会执行一个SHOW TABLE STATUS查询,而这似乎深入到每个InnoDB表中以获得近似的行数。
这似乎locking了整个数据库,这意味着对这个(繁忙)数据库的所有其他查询都会排队,直到数据库达到最大用户数。
SHOW TABLE STATUS能否以合理的方式加速? SHOW TABLE STATUS查询,或者至less不能一次locking整个数据库吗? 刚刚发现了innodb_stats_on_metadata设置 ,似乎有伎俩。 禁用InnoDB跳入索引以获得大致的计数。
SHOW TABLE STATUS不locking表 – 至less,我从来没有遇到过这样做。 而且, SHOW TABLE STATUS InnoDB的行数只是一个估计值,所以绝对不是COUNT(*)或道德等价物。 在SHOW TABLE STATUS运行的时候你从SHOW PROCESSLIST得到了什么?
调查的一种可能性:你的table_open_cache可能太小,导致你在运行你的状态查询的过程中卡住closures并重新打开许多表。