大量 InnoDB 表加上 SHOW TABLE STATUS

大量 InnoDB 表加上 SHOW TABLE STATUS

我们的数据库中有数百个 InnoDB 表,我们使用 phpMyAdmin 来管理它们。不幸的是,SHOW TABLE STATUS每当显示表列表时,phpMyAdmin 都会执行查询,这似乎会深入研究每个 InnoDB 表以获取大致的行数。

这似乎锁定了整个数据库,这意味着对这个(繁忙的)数据库的所有其他查询都会排队,直到数据库达到最大用户数。

  1. SHOW TABLE STATUS合理地加快速度吗?
  2. phpMyAdmin 是否可以轻松修改为不执行完整SHOW TABLE STATUS查询,或者至少不会立即锁定整个数据库?

答案1

SHOW TABLE STATUS不会锁定表 — 至少,我从未遇到过它这样做。此外,InnoDB 的行数SHOW TABLE STATUS只是一个估计值,因此它绝对不是在做或道德上等同的事情。当运行时COUNT(*),您从中得到了什么?SHOW PROCESSLISTSHOW TABLE STATUS

需要调查的一种可能性是:您的规模table_open_cache可能太小,导致您在运行状态查询的过程中无法关闭并重新打开许多表。

答案2

刚刚发现innodb_stats_on_metadata环境,这似乎可以解决问题。禁用 InnoDB 深入索引以获取近似计数。

相关内容