#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. Размер результирующей таблицы будет на порядки меньше и запросы будут выполняться быстрее.
Комментариев нет:
Отправить комментарий