![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
kokcu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Здравствуйте. Есть приложение которое делает по таймерам несколько запросов в mysql. Одновременно около 20 подключений. Но спустя некоторое время падает, если увеличивается нагрузка то падает быстрее. Пишет что пул соединений переполнен. Соединения все закрываю. Использую .NET mysql connector в настройках мускула поставил 1000 одновременных подключений. Где настраивается пул и почему он переполняется?
|
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
в строке подключения. можно его вообще отключить. видимо много подключений. причем с разных клиентов. я так понимаю закрытие соединения идет как аля MySqlConnection.Close(). При наличии пула соединений для закрытия соединения этого мало. Нужно также использовать статический метод MySqlConnection.ClearPool |
|||
|
||||
kokcu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Нету такого метода(
Вообще какие есть опасные моменты при работе с базой данных? У меня локальное приложение и то при нагрузке падает иногда. |
|||
|
||||
Springtime |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень Репутация: нет Всего: 2 |
Попробуй в строке подключения к базе, указать дополнительную опцию - Pooling=false
http://msdn.microsoft.com/en-us/library/8x...28VS.71%29.aspx --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
||||
|
||||
kokcu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Поставил, но периодически выскакивает ошибка
Программа просто обрабатывает одинаковые запросы. |
|||
|
||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
У меня таже проблема с пулом, чего я уже только не перепробывал с конекшен стрингом и какие ток настройки не делал.
Проблема тянется уже больше года ![]() Возник логичный вопрос: А стоит ли постоянно создавать в юзинге SqlConnection и открывать его при каждом выполнение (у мя тоже по таймеру выполняется запрос один и тот же) или подключение можно просто сделать мембером класса и открывать его в конструкторе класса, а в методе который пишет, просто проверять на null и на ? например:
В таком случае ведь не должно быть проблем с пулингом или в таком подходе есть какие-то другие подводные камни? Посоветуйте пожалуйста, а то пулинг этот просто убивает. Раньше было по 100 соединений с базой все работало, никто ничего не менял, перестало работать. Самое обидное в пулинге - это его непредсказуемость. Хотя я понимаю, что проблемы с пулингом может вызывать только утечка соединений. Если кто имел опыт в борьбе с пулингом посредством настройки самого скл сервера, подскажите пожалуйста, где чего нужно настроить.. Спасибо. Похожа моя проблема в незнании правил написания коннекшен стрингов ![]() Это сообщение отредактировал(а) Мурлыкатам_ - 6.8.2010, 03:55 |
|||
|
||||
Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
Метод очистки пула нужно вызывать у класса SqlConnection, а не у его объекта. Это статические методы. |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
так рекомендуют. как бэ работа с отложенными данными кошерна, дайте вздохнуть серверу свободно, пусть клиент мозги заполняет. собственно для этого пул и существует. при частых обращения к БД на самом деле соединение не разрывается и повторно используется клиентом при следующем подключении. полное закрытие обеспечивает либо отключение пула в строке подключения, либо статические методы описанные выше. |
|||
|
||||
kokcu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Спасибо, засунул claerpool и clearallpools в таймер посмотрим что получилось.
Я сейчас посмотрел process list на сервере и там этим подключений наверно тысяча. Так надо? Статус у все слип. И еще одна странная вещь. Я завел счетчик активных соединений. Когда юзал open просто увеличивал его на 1, когда клоуз то уменьшал. Уменьшалки точно везде стоят, под каждым connection.Close() но почему то уже 700 активных подключений((( Это сообщение отредактировал(а) kokcu - 6.8.2010, 12:26 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
||||
|
||||
kokcu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Всем спасибо но вроде проблема решилась командой SET GLOBAL wait_timeout = 100; Спящие тысячи запросов уходят сами. 5 часов аптайма и все ок) |
|||
|
||||
kokcu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
теперь другая проблема((( программа начинает примерно через 6 часов жутко тормозить и жрать половину проца и 100м оперативы( что делать?
|
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
тут сложно что либо сказать. юзай профайлер, что бы выявить данные утечки.
|
|||
|
||||
Springtime |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень Репутация: нет Всего: 2 |
тебе уже написали, что следует выключить пул соединений я с таким же сталкивался только у нас сервак на котором MS SQL просто напросто зависал эпизодически раз в 2 месяца. Это сообщение отредактировал(а) Springtime - 9.8.2010, 14:32 --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
|||
|
||||
Мурлыкатам_ |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
А может из-за включенного пула соединений MS SQL начать педалить рандомно? У мя минут 5 работает оки доки, потом бац - 100% проца и подвисает секунд на 20. Добавлено через 5 минут и 29 секунд
А может просто дофига в базе данных накапливается и комп не справляется? А ты пробывал заюзать CommandBehavior.CloseConnection и закрытие ридера:
Если попробуешь, отпишись плз о результатах. Добавлено через 8 минут и 5 секунд
Здесь 100% ошибка, что MySqlReader не закрыт и я полагаю, что сборку мусора тоже не стоит вызывать вручную. |
||||||||||||
|
|||||||||||||
Springtime |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень Репутация: нет Всего: 2 |
Не совсем понял ))) --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
|||
|
||||
Мурлыкатам_ |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
При включенном пулинге соединений MS SQL Server 2005 может начать педалить в рандомное время? У мя ща такая проблема была, практически решилась отключением пула соединений и установкой working threads в 1024 в настройках движка базы на закладке с процессорами. Самый главный и волнующий лично меня вопрос: - Рационально, разумно, логично ли сделать SqlConnection мембер полем класса, который пишет в базу и открывать его в конструкторе класса, а затем в каждом методе просто проверять на налл и на закрытое состояние (и открывать по необходимости если оно было закрыто неожиданно). В этом случае, не нужно в каждом методе делать: 1 Создавать экземпляр класса
2 Открывать и закрывать соединение при выполнение каждой комманды (допустим прилада выполняет 1000 запросов к базе в час, так зачем нам 1000 раз создавать экземпляр класса скл соединение и 1000 раз открывать/закрывать его, на мой взгляд - это очевидное расточительство производительности). Очень буду рад если кто нить аргументировано скажет, можно так делать или не стоит так делать и почему. Спасибо. Чет я попробывал и вывалилась сразу куча проблем. Видимо есть какие то ограничения в использовани скл коннекшена, которые прост нун загуглить ![]() Это сообщение отредактировал(а) Мурлыкатам_ - 13.8.2010, 17:06 |
||||||
|
|||||||
Springtime |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 25.10.2006 Где: Россия, Тюмень Репутация: нет Всего: 2 |
Так у тебя же запрос будет производиться в методе? если я правильно понял, вот там открывай и закрывай сразу а так я бы сделал статический метод в классе где в самом классе идёт его настройка на этапе компиляции, а при вызове метода соответственно подключение и отключение к базе без создания множества раз экземпляра класса если я тебя правильно понял а так по существу, множество раз делать -
это норма, по сути ADO.NET для этого и делался Это сообщение отредактировал(а) Springtime - 13.8.2010, 20:24 --------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2 |
||||
|
|||||
kokcu |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Вот так нужно?
А пул нужно в таком случае отключать?
Здесь часто мелькает mssql, я с mysql работаю, или разницы нет?
Выполняются восновном update запросы. Добавляется редко. А нагрузка примерно 2-5 команд в секунду. Это сообщение отредактировал(а) kokcu - 13.8.2010, 23:35 |
||||||
|
|||||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
не совсем. либо используй command.ExecuteReader в блоке using, либо закрывай Reader в finally. зачем тебе здесь Reader не ясно, полагаю код опустил. и зачем повторно закрываешь соединение (command.ExecuteReade(CommandBehavior.CloseConnection) & connection.Close())? хотя это не смертельно. типа того. это как посмотреть. |
|||
|
||||
kokcu |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Отписываюсь о результатах.
Привело к падению программы без ошибок через 10 минут, и так несколько раз(
Попробую так, главное чтоб проработало сутки. Ошибку исправил с закрытием ридера. А нужно Dispose вызывать? Или Close достаточно? |
||||
|
|||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
само по себе без разницы. но если есть Close - то его. Типа читаемость лучше и блаблабла. я тебе в самом начале рекомендовал не отказывать от пула, а закрывать соединения приведенными статическими методами, с каким нибудь интервалом. |
|||
|
||||
kokcu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 23.3.2009 Репутация: нет Всего: нет |
Кстате раз в минуту по таймеру делается Очистка всех пулов.
Но висеть sleep все равно остаются |
|||
|
||||
whoever |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 5.7.2007 Репутация: нет Всего: 1 |
Вполне возможно, что пул переполняется из-за незакрытых соединений в результате ошибок. Вы же не вызываете Dispose или Close гарантированно (Dispose в случае с SqlConnection [подозреваю, что и с MySqlConnection] делает то же самое, что и Close). Используйте using, либо делайте класс (в который оборачиваете подключение и непосредственную работу с базой) IDisposable, в методе Dispose которого проверяйте, закрыто ли подключение, и если нет, то закрывайте, а сам класс используйте вкупе с using.
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |