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

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

Автор:  Phricker [ 08 июн 2016, 13:47 ]
Заголовок сообщения:  [7.0] Prepared_stmt_count

Доброго дня, господа.

Я чесс сказать не знаю как это правильно расписать, и что вам предоставить.
Начну по порядку. Вы обращайтесь если что :)

Периодически (каждые 6-8 часов виснет монитор модуля Inet на вкладке ошибки).
Помогает ребут процесса BGBillingServer.
По этому поводу создано обращение "[6222] [7.0] Проблема со входом в монитор модуля Inet"

Общались с Амиром, к общему знаменателю не пришли, поступило предложение проверить обновление MySQL'а т.к. стоит старая версия, и в момент зависания те же запросы которые обрабатывались быстро - начинают думать очень долго.

Были подозрения на query cache и т.д. и т.п.
Выгрузил из базы все что возможно, с тем чтобы она начала помещаться в памяти.
Поставил sync_binlog = 0, т.к. Амир за него спрашивал и я подумал что это имеет какое-то отношение к проблеме.

В момент зависания снял show status; и снял его сразу после рестарта процесса сервера биллинга.

Обнаружил высокие показатели Prepared_stmt_count.
Вывел в заббикс.
Получил следующую картиночку
Изображение

Падение в 7:30 это как раз таки рестарт сервера. Резкое возрастание в 00:15 было не понятно с чем связано, т.к. в 00:15 нет заданий. В 00:10 есть начисление Npay абонплат.

Окей. Проблема начинает выявляться. Виснуть начинает когда достигает значения max_prepared_stmt_count, которое по умолчанию составляет 16382.
Погуглил по форуму нашел похожую проблему. Рекомендуют выключить кеширование запросов в db.url (cachePrepStmts=false).

Логично, что подобное закрытие глаз на проблему - не наши методы :) И я даже не стал это проверять.

Решил проверить начисление NPAY абонплат. Запустил задачу начисления абонплат. И вуаля.
Изображение
Упало соответственно после ребута.

Следующее что пришло в голову из-за чего в течении дня могут так вырасти запросы - приход платежей. Значит будем плясать от этого и модуля NPAY.
Поднимаем тестовый сервер 7.0.
Голый, только с установленным модулем NPay.
Конфиг сервера - из доки.
Конфиг NPay - из рабочего сервера, с настроенным дебетовым режимом.

Дальше лень писать - смотрите видео.

Автор:  Phricker [ 08 июн 2016, 14:41 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

Проверил на 6.1.
Такое же поведение так же растет кол-во, но растет +1 за каждый платеж а не +3 как в 7.0

Автор:  Amir [ 08 июн 2016, 16:35 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

Там вроде бы все-таки проблема в кэшировании этих самых prepared statement.
Есть понятие клиентский prepared statement и серверный prepared statement.
Соответственно есть понятие кэширования prepared statement.
В разных версиях mysql это дело менялось - сначала они включили серверные prepared statement, потом выключили, потом снова включили.

Кэширование - вроде бы хорошо, но нужно учитывать, что в коде много разных динамических запросов, немного отличающихся между собой.
И все они кэшируются.

Когда кэширование включено и мы закрываем PS - он на самом деле остается "открытым" для этого соединения.
Когда мы закрываем соединение - "физическое" соединение на самом деле остается открытым - потому что это пул.
А если включены серверные PS, то получается они остаются открытыми на сервере вместе с этими соединениями.

Можно конечно все эти места искать и исправлять, но мы и так стараемся использовать один и тот же PS по возможности.

Автор:  Phricker [ 08 июн 2016, 17:12 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

Они кешируются только при наличии модуля NPay на договоре?
Мне то что делать в таком случае?

Автор:  skn [ 08 июн 2016, 17:15 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

Рекомендуют выключить кеширование запросов в db.url (cachePrepStmts=false)

Автор:  Phricker [ 08 июн 2016, 18:37 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

skn писал(а):
Рекомендуют выключить кеширование запросов в db.url (cachePrepStmts=false)

Но я правильно понимаю что в таком случае пострадает производительность?
На 6.1 такой проблемы не было :) Ну по крайней мере модуль Inet не вис

Я как старая бабка. Раньше было лучше, солнце светило ярче, и мороженое было дешевле

Автор:  skn [ 08 июн 2016, 18:40 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

Phricker писал(а):
skn писал(а):
Рекомендуют выключить кеширование запросов в db.url (cachePrepStmts=false)

Но я правильно понимаю что в таком случае пострадает производительность?


не должна, все, что нужно кешировать мы и так дополнительно кешируем в коде....

в биллинге используется пул соединений, т.е. если мы взяли соединение из пула, выполнили запрос, он кешируется на сервере для ЭТОГО соединения, затем соединение возращается в пул, если мы после этого через некоторое время делаем такой же запрос, не факт, что мы его будем делать на том же соединении, и соответственно кеширование не сработает...

Автор:  Phricker [ 08 июн 2016, 18:53 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

Поставил false. Пока так
Изображение

Буду ждать зависнет ли Inet или все же проблема именно в этом и была.

Автор:  Phricker [ 08 июн 2016, 19:03 ]
Заголовок сообщения:  Re: [7.0] Prepared_stmt_count

Там же в графике где то и начисление абонплат планировщиком :)
На нем тоже не поднялось.

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