eprivalov
@eprivalov
Учусь

Журнал медленных запросов 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`;
не совсем понятна!
  • Вопрос задан
  • 4927 просмотров
Пригласить эксперта
Ответы на вопрос 4
Смотреть нужно на Query_time.
Он у вас к стати очень большой..
SELECT * FROM `tx5_wdata`;
Что это за запрос вообще? Что он делает?
Не экстрасенс, но по-моему таким запросом вы считаете количество записей в tx5_wdata? Это не правильно, считайте через count(key) где key= какому-либо ключу если такие имеются.
Для оптимизации нужно менять Ваши запросы так, что бы они использовали ключи..

/*!40001 SQL_NO_CACHE */
Это комментарий. Означает что Ваша версия mysql>4.0.1 и запрос выполняется с опцией SQL_NO_CACHE. На это в принципе можно не обращать внимания.
Ответ написан
@kaasius
Это запросы mysqldump скорей всего. Не надо ничего оптимизировать.
Хотите отлавливать реально боевые медленные запросы - поставьте время поменьше, и включите в том числе запросы, не использующие индексов.
Ответ написан
stavinsky
@stavinsky
1. Проверить наличие индексов
2. select * вряд ли будет использовать хоть какие либо индексы
3. Вы видите медленный запрос, это уже хорошо. Теперь стоит обратить внимание на SQL_NO_CACHE, посмотреть этот запрос через explain, провести профилирование запроса средствами MySQL. Смею предположить что в дефолтной конфигурации будет очень маленький размер tmp_table_size, что приводит к дампу данных на диск, а это очень медленно.
Ответ написан
Комментировать
AxisPod
@AxisPod
Судя по скорости работы tx5_wdata является вьюшкой? Ковыряйте вьюшку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы