Назад | Перейти на главную страницу

большое количество таблиц InnoDB плюс SHOW TABLE STATUS

У нас есть несколько сотен таблиц InnoDB в базе данных, и мы используем phpMyAdmin для управления ими. К сожалению, phpMyAdmin выполняет SHOW TABLE STATUS запрашивать всякий раз, когда отображается список таблиц, и это, кажется, копается в каждой таблице InnoDB, чтобы получить приблизительное количество строк.

Похоже, что это блокирует всю базу данных, что впоследствии означает, что все остальные запросы к этой (занятой) базе данных ставятся в очередь до тех пор, пока база данных не достигнет максимального количества пользователей.

  1. Жестяная банка SHOW TABLE STATUS быть ускоренным разумным образом?
  2. Можно ли легко изменить phpMyAdmin, чтобы он не выполнял SHOW TABLE STATUS запрос, или хотя бы не блокировать сразу всю базу данных?

Только что обнаружил innodb_stats_on_metadata установка, который, похоже, помогает. Отключает погружение InnoDB в индексы для получения приблизительных подсчетов.

SHOW TABLE STATUS не блокирует таблицы - по крайней мере, я никогда не сталкивался с этим. Кроме того, количество строк для InnoDB в SHOW TABLE STATUS это всего лишь оценка, так что это определенно не COUNT(*) или моральный эквивалент. Что вы получаете от SHOW PROCESSLIST в то время SHOW TABLE STATUS это работает?

Одна возможность исследовать: ваше table_open_cache может быть слишком маленьким, из-за чего вы застрянете при закрытии и повторном открытии многих таблиц в ходе выполнения запроса состояния.