Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Журнал медленных запросов MySQL

#mysql


Добрый день, я сделал так, что MySQL записывал в журнал медленные запросы, выполнение
которых происходит более 2-х секунд.

Вот это содержимое на данный момент:

/usr/sbin/mysqld, Version: 5.5.35-0ubuntu0.13.10.2-log ((Ubuntu)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
# Time: 140216 15:10:09
# User@Host: root[root] @ localhost []
# Query_time: 5.453749  Lock_time: 0.000000 Rows_sent: 64394  Rows_examined: 64394
use travian;
SET timestamp=1392556209;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tx5_odata`;
# Time: 140216 15:10:15
# User@Host: root[root] @ localhost []
# Query_time: 4.653896  Lock_time: 0.000000 Rows_sent: 65006  Rows_examined: 65006
SET timestamp=1392556215;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tx5_units`;
# Time: 140216 15:10:26
# User@Host: root[root] @ localhost []
# Query_time: 11.289096  Lock_time: 0.000000 Rows_sent: 641601  Rows_examined: 641601
SET timestamp=1392556226;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tx5_wdata`;
# Time: 140216 15:13:41
# User@Host: root[root] @ localhost []
# Query_time: 5.317493  Lock_time: 0.000000 Rows_sent: 64394  Rows_examined: 64394
SET timestamp=1392556421;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tx5_odata`;
# Time: 140216 15:13:48
# User@Host: root[root] @ localhost []
# Query_time: 6.602040  Lock_time: 0.000000 Rows_sent: 65006  Rows_examined: 65006
SET timestamp=1392556428;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tx5_units`;
# Time: 140216 15:14:00
# User@Host: root[root] @ localhost []
# Query_time: 11.427378  Lock_time: 0.000000 Rows_sent: 641601  Rows_examined: 641601
SET timestamp=1392556440;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tx5_wdata`;


А что делать дальше? Помогите, пожалуйста, советами, как оптимизировать эти запросы
и понять, что тут написано... Потому как следующая запись не совсем понятна:

SELECT /*!40001 SQL_NO_CACHE */ * FROM tx5_wdata;

    


Ответы

Ответ 1



У вас три медленных запроса SELECT * FROM `tx5_odata`; Извлекает и отправляет клиенту все содержимое таблицы tx5_odata - 65006 записей. SELECT * FROM `tx5_units`; Извлекает и отправляет клиенту все содержимое таблицы tx5_odata - 641601 записей. SELECT * FROM `tx5_wdata`; Извлекает и отправляет клиенту все содержимое таблицы tx5_odata - 64394 записей. Запись /*!40001 SQL_NO_CACHE */ просто сообщает, что результирующая таблица не помещается в кэш (он либо отключен, либо размер результат слишком велик для размещения в нем). В любом случае это не нормально, когда вы запросом извлекаете все содержимое таблицы. Возможно, можно переработать логику программы таким образом, чтобы из базы данных извлекалась лишь часть при помощи ключевых слов LIMIT и OFFSET. Размер результирующей таблицы будет на порядки меньше и запросы будут выполняться быстрее.

Комментариев нет:

Отправить комментарий