Добрый день.
Обновился тут с MySQL 5.6 до MySQL 5.7 и через некоторое время вылезла неприятная проблема,
в договоре вкладка Отчёты -> Inet, пытаюсь, например, сделать отчёт по истории сессий за прошлый месяц,
если выбираю что-либо из "Типы трафика", например: "Входящий трафик", "Исходящий трафик",
то запрос выполняется ну очень долго, чего раньше не наблюдалось.
Если же "Тип трафика" не выбирать, а выбирать "Услуги", то всё работает нормально - быстро.
Чуть изысканий.
Собственно запрос:
Код:
EXPLAIN SELECT detail.day, detail.trafficTypeId, SUM(detail.amount) FROM (
SELECT detail.day, detail.hour, detail.trafficTypeId, detail.amount FROM inet_session_log_17_201809 as log
LEFT JOIN inet_session_log_detail_17_201809 as detail
ON detail.sessionId=log.id
LEFT JOIN inet_serv_17 as serv
ON log.servId=serv.id
WHERE (1 OR log.id=0)
AND detail.trafficTypeId>0
AND detail.trafficTypeId IN (0,1,2)
AND (0 OR serv.contractId=132667)
AND (0 OR detail.day>=1)
AND (0 OR detail.day<=30)
AND detail.day>0
AND detail.trafficTypeId>0
UNION ALL
SELECT detail.day, detail.hour, detail.trafficTypeId, detail.amount FROM inet_session_17 as log
LEFT JOIN inet_session_detail_17 as detail
ON detail.sessionId=log.id
LEFT JOIN inet_connection_17 as c
ON c.id=log.connectionId
LEFT JOIN inet_serv_17 as serv
ON c.servId=serv.id
WHERE (1 OR log.id=0)
AND detail.trafficTypeId>0
AND detail.trafficTypeId IN (0,1,2)
AND (0 OR serv.contractId=132667)
AND (0 OR detail.day>=1)
AND (0 OR detail.day<=30)
AND detail.day>0
AND detail.trafficTypeId>0
AND ((0 OR DATE(log.sessionStart)>='2018-09-01')
AND (0 OR DATE(log.sessionStart)<='2018-09-30'))
) as detail
GROUP BY day, trafficTypeId
ORDER BY day
его EXPLAIN:
Код:
+----+-------------+------------+-----------------------------------------------------------------------------------------------------+--------+-------------------+---------+---------+---------------------------+---------+----------+---------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------+-----------------------------------------------------------------------------------------------------+--------+-------------------+---------+---------+---------------------------+---------+----------+---------------------------------+
| 1 | PRIMARY | <derived2> | NULL | ALL | NULL | NULL | NULL | NULL | 565 | 100.00 | Using temporary; Using filesort |
| 2 | DERIVED | detail | p0,p1,p2,p3,p4,p5,p6,p7 | ALL | PRIMARY | NULL | NULL | NULL | 8618987 | 0.12 | Using where |
| 2 | DERIVED | log | p20180901,p20180904,p20180907,p20180910,p20180913,p20180916,p20180919,p20180922,p20180925,p20180928 | ref | PRIMARY | PRIMARY | 8 | internet.detail.sessionId | 1 | 100.00 | NULL |
| 2 | DERIVED | serv | NULL | eq_ref | PRIMARY | PRIMARY | 4 | internet.log.servId | 1 | 5.00 | Using where |
| 3 | UNION | log | p0,p1,p2,p3,p4,p5,p6,p7 | index | NULL | start | 5 | NULL | 13908 | 100.00 | Using where; Using index |
| 3 | UNION | c | p0,p1,p2,p3,p4,p5,p6,p7 | ref | PRIMARY | PRIMARY | 8 | internet.log.connectionId | 1 | 100.00 | NULL |
| 3 | UNION | serv | NULL | eq_ref | PRIMARY | PRIMARY | 4 | internet.c.servId | 1 | 5.00 | Using where |
| 3 | UNION | detail | p0,p1,p2,p3,p4,p5,p6,p7 | ref | PRIMARY,sessionId | PRIMARY | 8 | internet.log.id | 36 | 0.14 | Using where |
+----+-------------+------------+-----------------------------------------------------------------------------------------------------+--------+-------------------+---------+---------+---------------------------+---------+----------+---------------------------------+
(таблица текстом криво вставляется, так что прикрепил картинкой).
Собственно судя по всему для первой части вложенного запроса не используются индексы откуда и все тормоза.
Поиски в сети навели на optimizer_switch='derived_merge=off', но мне это не помогло.
Может кто скажет что можно попробовать покрутить со своей стороны или разработчики посмотрят что можно поменять в запросе (индексах в таблицах)?
MySQL 5.7.23 Community
inet: вер. 7.0.934 / 20.09.2018 22:11:40