Страница 1 из 1

Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-06-13 8:14:08
Тёмный
Мужики, помогите разобраться.
Есть MySQL 5.5.29 на FreeBSD 8.3 amd64
Есть таблица

Код: Выделить всё

users_new (
   id primary key int unsigned auto_increment,
  checkStatus tiny int default 0 not null index,
  isMailChecked tiny int default 0 not null index,
  recDate int unsigned not null index
Простейшая таблица в которой все поля индексы и к тому же записей в таблице менее 500 (не тысяч).
Так вот в логе медленных запросов (я поставил порог 1 сек) показывает такой запрос:

Код: Выделить всё

UPDATE users_new SET users_new.checkStatus=1 WHERE users_new.isMailChecked=0 AND users_new.recDate<1371012751;
Также тормозит запрос из таблицы где 5 тыс. записей и идёт UPDATE sessDate=$time WHERE is=$id (т.е. вообще по первичному ключу)
При этом на этом сервере выполняются гораздо более сложные запросы постоянно, вложенные запросы с массой объединений и т.п.
Подскажите куда копнуть?

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-06-13 9:36:37
PYO
Пользовать SSD диск.

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-06-13 14:41:17
Тёмный
Использовать SSD диск для базы в 30мб с одновременным обслуживанием не более 10 пользователей?
У вас на работе похоже все проблемы решаются исключительно вливанием денег а не устранением проблем в конфигурации.

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-06-17 11:13:36
Neus
Тёмный писал(а):Использовать SSD диск для базы в 30мб с одновременным обслуживанием не более 10 пользователей?
Если ваша субд генерит больше запросов чем может обработать HDD и время отклика критично, то да - нужен SSD
Да и когда UPDATE была быстрой операцией то..
У вас на работе похоже все проблемы решаются исключительно вливанием денег а не устранением проблем в конфигурации.
:shock: да вся индустрия ПО так работает..

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-06-17 11:19:23
snorlov
Тёмный писал(а):Использовать SSD диск для базы в 30мб с одновременным обслуживанием не более 10 пользователей?
У вас на работе похоже все проблемы решаются исключительно вливанием денег а не устранением проблем в конфигурации.
Надо смотреть план запроса, кроме того, индексы надо выбирать с головой, а не как погодя, если у вас поле в таблице имеет значения 0 или 1, то индекс на это поле будет только тормозить, вполне возможно вам надо переставить поля в where и использовать < вместо =...

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-07-02 12:40:15
Тёмный
Спасибо за наводки. Добавил индексов, порылся с EXPLAIN, решил тормоза.
А по поводу SSD в моём случае (200 тыс. строк в БД, 10 пользователей, 40 запросов в сек), ну реально ребята это сатаной по воробьям стрелять. Эффективно но накладно.

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-07-02 12:44:46
Тёмный
snorlov писал(а):Надо смотреть план запроса, кроме того, индексы надо выбирать с головой, а не как погодя, если у вас поле в таблице имеет значения 0 или 1, то индекс на это поле будет только тормозить, вполне возможно вам надо переставить поля в where и использовать < вместо =...
А можно этот момент мне разъяснить? В смысле у меня полей-флагов с вариантами значений 0 или 1 много и я их индексами делаю, а ты говоришь это скорей вредно чем полезно.
Можешь кинуть ссылку чтобы почитать почему это вредно, только желательно не на всю документацию по MySQL :) Ну или так, на пальцах своими словами объясни пожалуйста.

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-07-02 13:09:47
snorlov
Ну а чего тут обьяснять, индекс по существу дополнительная таблица, в случае малых значений, точнее малого изменения поля (2-а значения или к примеру 3-и) у тебя нет выигрыша к выборке, по существу вместо полного скана по таблице, ты делаешь почти полный скан по индексу, выбирая из него id и по этому id берешь данные из основной. Другое дело если индекс строишь по 2-м и более полям. Понятно также, что выборка по больше/меньше с вариантами 0/1 срабатывает быстрее чем равно. Ссылок к сожалению не дам, они у меня все старые, да и практически уже убраны поскольку этот вопрос очень хорошо обсасывался лет 10-ть назад, когда началось активное применение у нас sql-серверов...

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-07-02 13:27:48
Тёмный
Спасибо за помощь и разъяснения!

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-07-02 15:22:11
FiL
Не совсем так. Вопрос не в количестве значений поля (0 /1 или много разных), а в количестве строк, удовлетворяющих запросу.
Если выборка вынимает половину всех строк из таблицы, то индекс бесполезен. А если выборка вынимает только 10% строк, то индекс полезен даже по флагу.
Вот, например, тут -
http://www.mysqlperformanceblog.com/200 ... re-column/

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-07-02 15:24:59
PYO
Тёмный писал(а):Спасибо за наводки. Добавил индексов, порылся с EXPLAIN, решил тормоза.
А по поводу SSD в моём случае (200 тыс. строк в БД, 10 пользователей, 40 запросов в сек), ну реально ребята это сатаной по воробьям стрелять. Эффективно но накладно.
Дык, какой вопрос - такой ответ. :unknown:

Re: Помогите разобраться в чём причина тормозов запроса

Добавлено: 2013-08-04 18:52:21
dml
А что за железо то???