flush tables MySQL


flush tables в MySQL позволяет закрыть все неиспользуемые таблицы и принудительно закрыть все используемые.

Также команда сбрасывает кэш запросов, это может быть нужно когда сервер баз данных создает высокую нагрузку, например вследствие ddos атаки на сервер. Когда причина устранена закрытие таблиц позволяет нормализовать работу MySQL.



Дефрагментация кэша MySQL и закрытие файловых дескрипторов flush tables


Команда позволяет закрыть неиспользуемые файловые дескрипторы, выполнять её можно в консоли MySQL или с помощью утилиты mysqladmin подключившись к серверу по ssh


mysqladmin flush-tables

При закрытии таблиц освобождается память, нагрузка на сервере становится ниже.



Затем дефрагментируем кэш

mysqladmin flush query cache

Последняя команда в версиях MySQL 5.7+ не используется.



И перезапускаем сервер баз данных, потом убеждаемся в том, что служба запустилась и ошибок нет.

systemctl restart mysql



Пример выполнения команд приведен на скриншоте:


flush tables MySQL


В случае если mysqladmin не использовать:

mysql


flush tables;

Query OK, 0 rows affected (0,00 sec)



Пример приведен на скриншоте.

flush tables


При авторизации в MySQL может потребоваться ввести пароль. Он не запрашивается если пароль пустой или пароль указан в файле /root/.my.cnf на сервере.



Чтобы собирать информацию об SQL запросах, которые выполняются дольше определенного количества секунд, нужно активировать лог медленных запросов, который периодически проверять и запросы, которые попадают в лог оптимизировать.



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

Сказать спасибо