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

MySQL 5.5 и PREPARED
http://forum.bitel.ru/viewtopic.php?f=22&t=6948
Страница 1 из 1

Автор:  borisk [ 09 июл 2012, 22:01 ]
Заголовок сообщения:  MySQL 5.5 и PREPARED

Добрый день!

После перехода на 5.2 версию и движок InnoDB в логах некоторых программ стали появляться сообщения Can't create more than max_prepared_stmt_count statements (current value: 16382)]. Причем сам bgbilling работает нормально. Что можете посоветовать в этой ситуации? Не думаю что простое увеличение этого числа в корне решит ситуацию. Включил в mysql set global log=on и вижу много вот таких записей:
Код:
                  535 Prepare   SELECT DISTINCT cid FROM contract_module  WHERE mid = 3
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT summa1 + summa2 - summa3 - summa4 FROM contract_balance WHERE cid=? AND yy=? AND mm=?
                  535 Prepare   SELECT summa1 + summa2 - summa3 - summa4 FROM contract_balance  WHERE cid=? AND ((yy*12) + mm)<=((?*12) + ?) ORDER BY yy DESC, mm DESC LIMIT 1
                    5 Prepare   SELECT status FROM ipn_contract_status_3 WHERE cid=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
120709 21:50:01   535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
                  535 Prepare   SELECT * FROM contract WHERE id=?
--More--(11%)

Автор:  stark [ 10 июл 2012, 12:01 ]
Заголовок сообщения:  Re: MySQL 5.5 и PREPARED

Скоро будет средство диагностики для этого . Сделали уже его для 5.1
Код:
808   09.07.2012 13:04:13   ДОБАВЛЕНО   Возможность определения незакрытых ресурсов БД.


Для 5.2 в ближайшее время тоже выпустим, я отпишусь как настроить. Начали c 5.1, так как там это проще сделать - на старых версиях библиотек. Если кому надо, могу сказать как настроить для 5.1(начали уже отлаживать на одном из клиентов). Как результат исправления после диагностики (вы присылаете логи - мы правим ) надеемся получить сокращение потребляемой памяти и ускорение времени работы ..А родилось это все оттого что к нам в 5.2 обратились с проблемой что абонплаты считаются 6 часов, в результате диагностики исправили и стало считать на порядок меньше .

Автор:  borisk [ 10 июл 2012, 12:09 ]
Заголовок сообщения:  Re: MySQL 5.5 и PREPARED

Надо, у меня на 5.1 есть клиент, который тоже страдает.
А для 5.2 очень очень жду, запросов много и стабильно несколько раз в сутки mysql забивается. А дергать каждый раз базу - не комильфо.

Автор:  afedorov [ 12 июл 2012, 17:38 ]
Заголовок сообщения:  Re: MySQL 5.5 и PREPARED

Была такая же проблема с 5.1. Биллинг занимал все каналы в mysql и никто подключаться не мог.
Сделал cachePrepStmts=false в настройках jdbc. Помогло. На прозизводительность вроде не повлияло, уже несколько месяцев все работает нормально.

Автор:  Amir [ 12 июл 2012, 18:52 ]
Заголовок сообщения:  Re: MySQL 5.5 и PREPARED

Похоже, что в библиотеке mysql, которая используется в 5.2 теперь по умолчанию useServerPrepStmts=true, хотя раньше было false (вроде бы были какие-то проблемы с ними в mysql драйвере).
С одной стороны, они должны работать быстрее, с другой - при их кэшировании могут возникнуть такая ситуация, что очень много закешированных становится.
Сейчас периодически выкладываем обновления "Освобождение ресурсов" (viewtopic.php?f=22&t=6959), которое должно помочь решить эту проблему.
Установка cachePrepStmts=false или useServerPrepStmts=false также уберет эту проблему, но может повлиять на производительность.

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