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

[7.0] show full processlist
http://forum.bitel.ru/viewtopic.php?f=22&t=11602
Страница 1 из 1

Автор:  Phricker [ 13 май 2016, 21:03 ]
Заголовок сообщения:  [7.0] show full processlist

Постоянно в процессах mysql висят подобные процессы (висят тоже что - постоянно появляются)
Не испытываю ничего против, но может сделать чтобы они пореже появлялись? :)
Проверка лицензий ваша али нет?
Код:
SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'ipn' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )

SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'reports' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )

SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'dialup' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )

Автор:  skn [ 14 май 2016, 01:39 ]
Заголовок сообщения:  Re: [7.0] show full processlist

а на сколько часто появляются и как долго выполняются?

Автор:  Phricker [ 28 май 2016, 02:41 ]
Заголовок сообщения:  Re: [7.0] show full processlist

Изображение

Это все обращения к базе за 1 секунду.
Снимал дамп 14 секунд - за 14 секунд - 75 таких запросов. Оно так нужно? :)

Так же меня смущают запросы "SELECT 1"
Изображение

Так же кол-во за 1 секунду.

Автор:  skn [ 28 май 2016, 02:46 ]
Заголовок сообщения:  Re: [7.0] show full processlist

1) SELECT 1 это запросы которые генерирует connectionPool, он таким образов проверяет живо ли соединение с базой

2) а что выдает запрос
Код:
EXPLAIN SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'ipn' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )


3) сколько времени выполняются запросы
Код:
SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'ipn' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )

Код:
SELECT mid, COUNT(cid) FROM contract_module LEFT JOIN contract ON contract.id = contract_module.cid WHERE (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now()) GROUP BY mid

Автор:  Phricker [ 28 май 2016, 02:58 ]
Заголовок сообщения:  Re: [7.0] show full processlist

Вообще я с чего этим заинтересовался.
У меня вот такая вот картинка
Изображение

Крайне смущают Qcache lowmem prunes.
После перехода на 7.0 (до этого вроде не было жалоб) и полного перевода на utf8 (хотя перевел я базу на utf8 еще на 6.1), периодически очень долго открывается монитор модуля inet.
При этом простейший запрос (который выполняется при открытии модуля)
Код:
SELECT SQL_CALC_FOUND_ROWS auth_error.* FROM inet_auth_error_12_201605 AS auth_error WHERE auth_error.lastTime BETWEEN '2016-05-23 00:00:00' AND '2016-05-23 00:00:00' ORDER BY auth_error.lastTime DESC LIMIT 0,30

через клиент биллинга скриптом
Код:
public class testSelectAuthError
        extends GlobalScriptBase {
    @Override
    public void execute(Setup setup, ConnectionSet connectionSet)
            throws Exception {
        print("Start");
        long timeStart = System.currentTimeMillis();
        String tableName = "inet_auth_error_12_201605";
        Connection con = connectionSet.getConnection();
        int count = 0;
        String query = "";
        query = " SELECT auth_error.id FROM inet_auth_error_12_201605 AS auth_error WHERE auth_error.lastTime BETWEEN '2016-05-23 00:00:00' AND '2016-05-23 00:00:00' ";
        PreparedStatement ps = con.prepareStatement(query);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            count++;
        }
        rs.close();
        ps.close();

        long timeEnd = System.currentTimeMillis();
        print("count = " + count);
        print("query = " + query);
        print("Process time: " + (timeEnd - timeStart) / 1000 + " s.");

    }
}

выбирается
Код:
Start count = 8 query =  SELECT auth_error.id FROM inet_auth_error_12_201605 AS auth_error WHERE auth_error.lastTime BETWEEN '2016-05-23 00:00:00' AND '2016-05-23 00:00:00'  Process time: 33 s.


show processlist показывает то sending data то sorting result то waiting for query cache lock.

При этом напрямую с консоли или через GUIшный клиент с другого компа - выбирается за доли секунд.

Лечится полными стопами всего и вся и соответственно перезапуском. Раз в сутки приходится делать.

Сейчас собираю больше инфы, играюсь с некоторыми настройками в my.cnf, так что думаю если ничего не изменится - ждите на следующей неделе в ХД )

Автор:  Phricker [ 28 май 2016, 03:00 ]
Заголовок сообщения:  Re: [7.0] show full processlist

Phricker писал(а):
Крайне смущают Qcache lowmem prunes.


Думаю попробовать переписать стандартные сервисы чтобы для инета убрать кеширование подобных запросов.
Чтобы он их не помещал в кеш и соответственно не удалял в дальнейшем.
Код:
SELECT * FROM inet_accounting_period_12 WHERE contractId=193734 AND (timeTo IS NULL OR timeTo>='2016-05-27 23:23:39') ORDER BY timeFrom

Автор:  skn [ 28 май 2016, 03:05 ]
Заголовок сообщения:  Re: [7.0] show full processlist

1) SELECT 1 это запросы которые генерирует connectionPool, он таким образов проверяет живо ли соединение с базой

2) а что выдает запрос
Код:
EXPLAIN SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'ipn' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )


3) сколько времени выполняются запросы
Код:
SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'ipn' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )

Код:
SELECT mid, COUNT(cid) FROM contract_module LEFT JOIN contract ON contract.id = contract_module.cid WHERE (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now()) GROUP BY mid

Автор:  Phricker [ 28 май 2016, 03:05 ]
Заголовок сообщения:  Re: [7.0] show full processlist

skn писал(а):
2) а что выдает запрос
Код:
EXPLAIN SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'ipn' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )


Изображение


skn писал(а):
3) сколько времени выполняются запросы
Код:
SELECT COUNT(cid) FROM contract_module LEFT JOIN module ON module.id = contract_module.mid LEFT JOIN contract ON contract.id = contract_module.cid WHERE module.name = 'ipn' and (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now() )


SQLyog - Exec 0,257 sec. Total 0,258 sec

skn писал(а):
Код:
SELECT mid, COUNT(cid) FROM contract_module LEFT JOIN contract ON contract.id = contract_module.cid WHERE (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now()) GROUP BY mid



SQLyog - Exec 1,019 sec. Total 1,019 sec

Автор:  skn [ 28 май 2016, 03:20 ]
Заголовок сообщения:  Re: [7.0] show full processlist

а время такого запроса

Код:
SELECT mid, COUNT(cid) FROM contract LEFT JOIN contract_module ON contract.id = contract_module.cid WHERE (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now()) GROUP BY mid;


и

Код:
EXPLAIN SELECT mid, COUNT(cid) FROM contract LEFT JOIN contract_module ON contract.id = contract_module.cid WHERE (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now()) GROUP BY mid;

Автор:  Phricker [ 28 май 2016, 10:58 ]
Заголовок сообщения:  Re: [7.0] show full processlist

skn писал(а):
Код:
SELECT mid, COUNT(cid) FROM contract LEFT JOIN contract_module ON contract.id = contract_module.cid WHERE (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now()) GROUP BY mid;

Два раза подряд
Изображение

Изображение
skn писал(а):
Код:
EXPLAIN SELECT mid, COUNT(cid) FROM contract LEFT JOIN contract_module ON contract.id = contract_module.cid WHERE (contract.date1 is null or contract.date1  <= now() ) and (contract.date2 is null or contract.date2 >= now()) GROUP BY mid;

Изображение

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