Как устранить неполадки MySQL запросов
Иногда у пользователей возникают проблемы, когда они начинают выдавать запросы на свои данные. В некоторых системах баз данных, включая MySQL, операторы запроса в должны заканчиваться точкой с запятой (;) для завершения запроса, как в следующем примере:
Если вам не удастся добавить точку с запятой в конце запроса, запрос будет продолжаться с новой строки, пока вы не завершите запрос, введя точку с запятой и нажав ENTER.
Некоторые пользователи могут обнаружить, что их запросы чрезвычайно медленные. Один из способов определить, какой оператор запроса является причиной замедления, - включить и просмотреть журнал медленных запросов MySQL. Для этого откройте ваш mysqld.cnf файл, который используется для настройки параметров сервера MySQL. Этот файл обычно хранится в /etc/mysql/mysql.conf.d/каталоге:
Прокрутите файл, пока не увидите следующие строки:
Эти закомментированные директивы предоставляют параметры конфигурации 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 файл. Этот параметр не требуется для работы медленного журнала запросов, но он может быть полезен для выявления неэффективных запросов.
Раскомментируйте каждую из этих строк, удалив начальные знаки фунта ( #). Раздел теперь будет выглядеть так:
Примечание. Если вы работаете с MySQL 8+, эти закомментированные строки не будут включены в mysqld.cnf файл по умолчанию. В этом случае добавьте следующие строки в конец файла:
После включения медленного журнала запросов сохраните и закройте файл. Затем перезапустите службу MySQL:
С этими настройками вы можете найти проблемные операторы запросов, просматривая медленный журнал запросов. Вы можете сделать это с помощью less этого:
После того, как вы выделите запросы, вызывающие замедление, вы можете найти наше руководство по оптимизации запросов и таблиц в MySQL и MariaDB для VPS, которое поможет их оптимизировать.
Кроме того, MySQL включает в себя EXPLAIN оператор, который предоставляет информацию о том, как MySQL выполняет запросы.
SHOW * FROM table_name;
Если вам не удастся добавить точку с запятой в конце запроса, запрос будет продолжаться с новой строки, пока вы не завершите запрос, введя точку с запятой и нажав ENTER.
Некоторые пользователи могут обнаружить, что их запросы чрезвычайно медленные. Один из способов определить, какой оператор запроса является причиной замедления, - включить и просмотреть журнал медленных запросов MySQL. Для этого откройте ваш mysqld.cnf файл, который используется для настройки параметров сервера MySQL. Этот файл обычно хранится в /etc/mysql/mysql.conf.d/каталоге:
sudo nano /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
...
#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 файл. Этот параметр не требуется для работы медленного журнала запросов, но он может быть полезен для выявления неэффективных запросов.
Раскомментируйте каждую из этих строк, удалив начальные знаки фунта ( #). Раздел теперь будет выглядеть так:
...
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
...
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
...
Примечание. Если вы работаете с MySQL 8+, эти закомментированные строки не будут включены в mysqld.cnf файл по умолчанию. В этом случае добавьте следующие строки в конец файла:
...
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
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
После того, как вы выделите запросы, вызывающие замедление, вы можете найти наше руководство по оптимизации запросов и таблиц в MySQL и MariaDB для VPS, которое поможет их оптимизировать.
Кроме того, MySQL включает в себя EXPLAIN оператор, который предоставляет информацию о том, как MySQL выполняет запросы.
Комментариев 0