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 такой проблемы не было ![]() Я как старая бабка. Раньше было лучше, солнце светило ярче, и мороженое было дешевле |
Автор: | 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/ |