Улучшаем производительность PhpMyAdmin
Jan 21, 2016 17:26 · 394 words · 2 minute read
Залогиниться и увидеть список баз данных в phpMyAdmin
можно довольно быстро, однако возникает дискомфорт при просмотре списка таблиц в выбранной базе данных — страница может загружаться до 30 секунд. Давайте разберемся!
Исходные данные:
lsb_release -a
Distributor ID: Debian
Description: Debian GNU/Linux 7.8 (wheezy)
Release: 7.8
Codename: wheezy
/etc/init.d/mysql status
[info] /usr/bin/mysqladmin Ver 8.42 Distrib 5.5.41-37.0, for debian-linux-gnu on x86_64
php -v
PHP 5.4.36-0+deb7u3 (cli) (built: Jan 9 2015 08:07:06)
dpkg -l | grep phpmyadmin
ii phpmyadmin 4:3.4.11.1-2+deb7u1 all MySQL web administration tool
mysql> show variables like 'storage_engine'\G;
*************************** 1. row ***************************
Variable_name: storage_engine
Value: InnoDB
1 row in set (0.00 sec)
Вся проблема наличии больших таблиц InnoDB и в запросе:
"SHOW TABLE STATUS FROM 'DATABASE'"
, который phpMyAdmin
выполняет дважды(!): для колонки навигации слева (список таблиц в БД) и для более детального вывода информации справа (Строки, Тип, Сравнение, Размер, Фрагментировано).
В этом случае нам поможет установка параметра $cfg['MaxExactCount'] = 0
, который можно указать/отредактировать в конфигурационном файле config.inc.php
.
Параметр $cfg['MaxExactCount']
— для InnoDB таблиц, определяет максимальное число записей таблиц, при котором phpMyAdmin
отображает количество строк в таблице с помощью SELECT COUNT
. Если количество строк меньше чем это значение, то будет использоваться SELECT COUNT
, если больше — значение будет только возвращено через SHOW TABLE STATUS
.
Примечание. Если в вашей базе данных есть представления (views
) с большим количеством записей, то следует проверить значение параметра $cfg['MaxExactCountViews']
оно тоже должно быть равным нулю, если нет — установить в 0.
Параметр $cfg['MaxExactCountViews']
— для представлений, это значение будет максимумом строк, при которых количество строк будет выведено запросом
SELECT COUNT ... LIMIT
По умолчанию выставляется значение 0, которое блокирует подсчет записей, т.к. при работе с таблицами очень больших размеров, получение точного числа записей может крайне негативно сказаться на производительности.
После внесенных изменений в столбце «Строки» детального вывода информации будет выводиться не точное количество строк в таблице, а примерное (estimated) и перед цифрой будет стоять знак ~
.
Приблизительный подсчет строк в таблицах InnoDB вместо точного несколько улучшит производительность phpMyAdmin
, однако для комфортной работы рекомендуется обновить MySQL-сервер до версии 5.6. Дело в том, что в версии 5.6 "SHOW TABLE STATUS FROM 'DATABASE'"
работает быстрее, вот что об этом пишут на форуме разработчиков:
MySQL 5.6 finally speeds up SHOW TABLE STATUS in cases where it used to perform miserably. Example for one of our databases containing 112 InnoDB tables, some of which have millions of rows:
MySQL 5.5.30: 32 seconds
MySQL 5.6.16: 0.3 seconds