У нас есть несколько сотен таблиц InnoDB в базе данных, и мы используем phpMyAdmin для управления ими. К сожалению, phpMyAdmin выполняет SHOW TABLE STATUS
запрашивать всякий раз, когда отображается список таблиц, и это, кажется, копается в каждой таблице InnoDB, чтобы получить приблизительное количество строк.
Похоже, что это блокирует всю базу данных, что впоследствии означает, что все остальные запросы к этой (занятой) базе данных ставятся в очередь до тех пор, пока база данных не достигнет максимального количества пользователей.
SHOW TABLE STATUS
быть ускоренным разумным образом?SHOW TABLE STATUS
запрос, или хотя бы не блокировать сразу всю базу данных?Только что обнаружил innodb_stats_on_metadata
установка, который, похоже, помогает. Отключает погружение InnoDB в индексы для получения приблизительных подсчетов.
SHOW TABLE STATUS
не блокирует таблицы - по крайней мере, я никогда не сталкивался с этим. Кроме того, количество строк для InnoDB в SHOW TABLE STATUS
это всего лишь оценка, так что это определенно не COUNT(*)
или моральный эквивалент. Что вы получаете от SHOW PROCESSLIST
в то время SHOW TABLE STATUS
это работает?
Одна возможность исследовать: ваше table_open_cache
может быть слишком маленьким, из-за чего вы застрянете при закрытии и повторном открытии многих таблиц в ходе выполнения запроса состояния.