Как устранить неполадки MySQL Queries

Note

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

SHOW * FROM table_name;

Если вы не поставите точку с запятой в конце запроса, запрос будет продолжаться с новой строки, пока вы не завершите запрос, введя точку с запятой и нажавENTER.

Некоторые пользователи могут обнаружить, что их запросы чрезвычайно медленные. Один из способов определить, какой оператор запроса является причиной замедления, - включить и просмотреть журнал медленных запросов MySQL. Для этого откройте файлmysqld.cnf, который используется для настройки параметров сервера MySQL. Этот файл обычно хранится в каталоге/etc/mysql/mysql.conf.d/:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Прокрутите файл, пока не увидите следующие строки:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
#slow_query_log         = 1
#slow_query_log_file    = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .

Эти закомментированные директивы предоставляют параметры конфигурации MySQL по умолчанию для медленного журнала запросов. В частности, вот что делает каждый из них:

  • slow-query-log: установка значения1 включает журнал медленных запросов.

  • slow-query-log-file: определяет файл, в котором MySQL будет регистрировать медленные запросы. В этом случае он указывает на файл/var/log/mysql-slow.log.

  • long_query_time: устанавливая для этой директивы значение2, он настраивает MySQL для регистрации любых запросов, выполнение которых занимает более 2 секунд.

  • log_queries_not_using_indexes: это указывает MySQL также регистрировать любые запросы, которые выполняются без индексов, в файл/var/log/mysql-slow.log. Этот параметр не требуется для работы медленного журнала запросов, но он может быть полезен для выявления неэффективных запросов.

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

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .

[.Примечание]##

Note: Если вы используете MySQL 8+, эти закомментированные строки не будут по умолчанию в файлеmysqld.cnf. В этом случае добавьте следующие строки в конец файла:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes

После включения медленного журнала запросов сохраните и закройте файл. Затем перезапустите службу MySQL:

sudo systemctl restart mysql

С этими настройками вы можете найти проблемные операторы запросов, просматривая медленный журнал запросов. Вы можете сделать это с помощьюless, например:

sudo less /var/log/mysql_slow.log

После того, как вы выделите запросы, вызывающие замедление, вы можете найти наше руководство поHow To Optimize Queries and Tables in MySQL and MariaDB on a VPS, которое поможет их оптимизировать.

Кроме того, MySQL включает операторEXPLAIN, который предоставляет информацию о том, как MySQL выполняет запросы. This page from the official MySQL documentation дает представление о том, как использоватьEXPLAIN для выделения неэффективных запросов.

Чтобы получить помощь в понимании основных структур запросов, см. НашIntroduction to MySQL Queries.

Related