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.