forum.bitel.ru
http://forum.bitel.ru/

[5.2] Медленный запрос в checkResource (CRM)
http://forum.bitel.ru/viewtopic.php?f=10&t=11872
Страница 1 из 1

Автор:  Cromeshnic [ 16 авг 2016, 15:00 ]
Заголовок сообщения:  [5.2] Медленный запрос в checkResource

Переоформляю договор с 12700 номерами phone.
Судя по всему, это займёт часа 4 минимум.
Смотрю по Innotop, вот такой запрос выполняется почти по секунде:
Код:
SELECT res.*, ruse.resource_id FROM number_resource_18 as res left join number_resource_use_18 as ruse on ruse.resource_id=res.id   AND ('2016-07-01'>=ruse.date2)  AND ('2016-07-01'<=ruse.date_reserve) and number='73952123456' having ruse.resource_id IS NOT NULL ORDER BY number;


Запрос выполняется для каждого номера, поэтому 12700 секунд - это 3.5 часа.
Запрос похоже отсюда:
NumberResourceManager.checkResource(...)

индексами не лечится, поскольку составлен по-дурацки: условия прописаны в having, а не во where, поэтому он сначала выбирает 100.000+ записей из number_resource_18 с Join-ом, а потом ищет, где что-то ненулевое приджоинилось.

wtf???


Код:
mysql> explain extended SELECT res.*, ruse.resource_id FROM number_resource_18 as res left join number_resource_use_18 as ruse on ruse.resource_id=res.id   AND ('2016-07-01'>=ruse.date2)  AND ('2016-07-01'<=ruse.date_reserve) and number='73952123456' having ruse.resource_id IS NOT NULL ORDER BY number;
+----+-------------+-------+------+------------------------------------------+-------------+---------+------------------+--------+----------+----------------+
| id | select_type | table | type | possible_keys                            | key         | key_len | ref              | rows   | filtered | Extra          |
+----+-------------+-------+------+------------------------------------------+-------------+---------+------------------+--------+----------+----------------+
|  1 | SIMPLE      | res   | ALL  | NULL                                     | NULL        | NULL    | NULL             | 110825 |   100.00 | Using filesort |
|  1 | SIMPLE      | ruse  | ref  | resource_id,date_reserve,date2,dsi_check | resource_id | 4       | bgbilling.res.id |      1 |   100.00 | Using where    |
+----+-------------+-------+------+------------------------------------------+-------------+---------+------------------+--------+----------+----------------+
2 rows in set, 1 warning (0.00 sec)

Автор:  stark [ 16 авг 2016, 15:12 ]
Заголовок сообщения:  Re: [5.2] Медленный запрос в checkResource (CRM)

Там это возможно испортили, когда добавляли резервирование ресурсов. Посмотрим, передал тему разработчику .

Автор:  Cromeshnic [ 16 авг 2016, 15:13 ]
Заголовок сообщения:  Re: [5.2] Медленный запрос в checkResource (CRM)

Клиент: вер. 5.2 сборка 1237 от 14.12.2015 13:56:40
os: Windows 7; java: Java HotSpot(TM) Client VM, v.1.8.0_101
ВНИМАНИЕ: Спецификация 1.8 не рекомендуется (поддерживается 1.6,1.7)
Сервер: вер. 5.2 сборка 1643 от 02.11.2015 16:37:29
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26

phone вер. 5.2 сборка 285 от 13.10.2015 22:06:04

Стыдно конечно показывать свою 5.2 версию, но пока так.

Автор:  Boris [ 16 авг 2016, 18:16 ]
Заголовок сообщения:  Re: [5.2] Медленный запрос в checkResource (CRM)

Выложил обновление.

Автор:  Cromeshnic [ 14 окт 2016, 09:08 ]
Заголовок сообщения:  Re: [5.2] Медленный запрос в checkResource (CRM)

Обновились, переоформление с телефонами не сломалось, большие объёмы номеров не переоформляли ещё - проверить скорость не получится пока.
Но по коду вроде всё ок, так что спасибо за фикс :)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/