Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пул соединений, приложение падает 
:(
    Опции темы
Мурлыкатам_
Дата 10.8.2010, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Цитата(Springtime @ 9.8.2010,  14:32)
Цитата(mrbrooks @ 6.8.2010,  15:16)
Цитата(kokcu @  6.8.2010,  12:59 Найти цитируемый пост)
под каждым connection.Close() но почему то уже 700 активных подключений(((

тебе уже написали, что следует выключить пул соединений
я с таким же сталкивался только у нас сервак на котором MS SQL просто напросто зависал эпизодически раз в 2 месяца.

А может из-за включенного пула соединений MS SQL начать педалить рандомно? У мя минут 5 работает оки доки, потом бац - 100% проца и подвисает секунд на 20.

Добавлено через 5 минут и 29 секунд
Цитата(kokcu @ 6.8.2010,  23:30)
теперь другая проблема((( программа начинает примерно через 6 часов жутко тормозить и жрать половину проца и 100м оперативы( что делать?

А может просто дофига в базе данных накапливается и комп не справляется?

А ты пробывал заюзать CommandBehavior.CloseConnection и закрытие ридера:

Код

 SqlDataReader reader = null;

                try
                {
                    reader = command.ExecuteReader(CommandBehavior.CloseConnection);

                    //use reader

                    reader.Close();

                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.ToString());
                }


Если попробуешь, отпишись плз о результатах.

Добавлено через 8 минут и 5 секунд
Цитата(kokcu @ 6.8.2010,  21:16)
Код

void mysqlq(string quer)
        {
            
                //Mysql Query function
                string MyConString = "SERVER=localhost;" +
                      "DATABASE=****;" +
                      "UID=****;" +
                      "PASSWORD=****;";
                MySqlConnection connection = new MySqlConnection(MyConString);
                
                MySqlCommand command = connection.CreateCommand();
                MySqlDataReader Reader;
                command.CommandText = quer;
                command.CommandTimeout = 0;
                connection.Open();
                active_connections++;
                try
                {
                    Reader = command.ExecuteReader();
                }
                catch
                {

                }
                connection.Close();
                active_connections--;
           
            GC.Collect();
        }

Всем спасибо но вроде проблема решилась командой SET GLOBAL wait_timeout = 100;
Спящие тысячи запросов уходят сами.  5 часов аптайма и все ок)

Здесь 100% ошибка, что MySqlReader не закрыт и я полагаю, что сборку мусора тоже не стоит вызывать вручную.


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
Springtime
Дата 11.8.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(Мурлыкатам_ @  10.8.2010,  07:59 Найти цитируемый пост)
А может из-за включенного пула соединений MS SQL начать педалить рандомно?

Не совсем понял )))

--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
Мурлыкатам_
Дата 13.8.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Цитата(Springtime @ 11.8.2010,  12:19)
Цитата(Мурлыкатам_ @  10.8.2010,  07:59 Найти цитируемый пост)
А может из-за включенного пула соединений MS SQL начать педалить рандомно?

Не совсем понял )))

При включенном пулинге соединений MS SQL Server 2005 может начать педалить в рандомное время?

У мя ща такая проблема была, практически решилась отключением пула соединений и установкой working threads в 1024
в настройках движка базы на закладке с процессорами.

Самый главный и волнующий лично меня вопрос:
- Рационально, разумно, логично ли сделать SqlConnection мембер полем класса, который пишет в базу и открывать его в конструкторе класса,
а затем в каждом методе просто проверять на налл и на закрытое состояние (и открывать по необходимости если оно было закрыто неожиданно). В этом случае, не нужно в каждом методе делать:
1 Создавать экземпляр класса
Код

SqlConnection connection = new SqlConnection(_DbConnectionString);


2 Открывать и закрывать соединение при выполнение каждой комманды (допустим прилада выполняет 1000 запросов  к базе в час, так зачем нам 1000 раз создавать экземпляр класса скл соединение и 1000 раз открывать/закрывать его, на мой взгляд - это очевидное расточительство производительности).

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

Спасибо.

Чет я попробывал и вывалилась сразу куча проблем. Видимо есть какие то ограничения в использовани скл коннекшена, которые прост нун загуглить smile

Это сообщение отредактировал(а) Мурлыкатам_ - 13.8.2010, 17:06


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
Springtime
Дата 13.8.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(Мурлыкатам_ @  13.8.2010,  16:35 Найти цитируемый пост)
Рационально, разумно, логично ли сделать SqlConnection мембер полем класса, который пишет в базу и открывать его в конструкторе класса

Так у тебя же запрос будет производиться в методе? если я правильно понял, вот там открывай и закрывай сразу
а так я бы сделал статический метод в классе
где в самом классе идёт его настройка на этапе компиляции, а при вызове метода соответственно подключение и отключение к базе
без создания множества раз экземпляра класса
если я тебя правильно понял

а так по существу, множество раз делать -
Код

SqlConnection connection = new SqlConnection(_DbConnectionString);

это норма, по сути ADO.NET для этого и делался

Это сообщение отредактировал(а) Springtime - 13.8.2010, 20:24
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
kokcu
Дата 13.8.2010, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



Вот так нужно?
Код

void mysqlq(string quer)
        {
                //Mysql Query function
                string MyConString = "SERVER=localhost;" +
                      "DATABASE=gpsm;" +
                      "UID=root;" +
                      "PASSWORD=1;";
                MySqlConnection connection = new MySqlConnection(MyConString);
                MySqlCommand command = connection.CreateCommand();
                    MySqlDataReader Reader;
                    command.CommandText = quer;
                    command.CommandTimeout = 0;
                    connection.Open();
                    active_connections++;
                    try
                    {
                        Reader = command.ExecuteReader(CommandBehavior.CloseConnection);
                        
                        Reader.Close();
                    }
                    catch
                    {
                       
                    }
                    connection.Close();
                    active_connections--;
 
А пул нужно в таком случае отключать? 
Код

string MyConString = "SERVER=localhost;" +
                      "DATABASE=gpsm;" +
                      "UID=root;" +
                      "Pooling = false;"+
                      "PASSWORD=1;";

Здесь часто мелькает mssql, я с mysql работаю, или разницы нет?
Цитата

А может просто дофига в базе данных накапливается и комп не справляется?

Выполняются восновном update запросы. Добавляется редко. А нагрузка примерно 2-5 команд в секунду.

Это сообщение отредактировал(а) kokcu - 13.8.2010, 23:35
PM MAIL   Вверх
mrbrooks
Дата 16.8.2010, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



Цитата(kokcu @  14.8.2010,  00:31 Найти цитируемый пост)
Вот так нужно?

не совсем. либо используй command.ExecuteReader в блоке using, либо закрывай Reader в finally. зачем тебе здесь Reader не ясно, полагаю  код опустил.

и зачем повторно закрываешь соединение (command.ExecuteReade(CommandBehavior.CloseConnection) & connection.Close())?
хотя это не смертельно.

Цитата(kokcu @  14.8.2010,  00:31 Найти цитируемый пост)
А пул нужно в таком случае отключать? 

типа того.

Цитата(kokcu @  14.8.2010,  00:31 Найти цитируемый пост)
Здесь часто мелькает mssql, я с mysql работаю, или разницы нет?

это как посмотреть.
PM MAIL   Вверх
kokcu
Дата 16.8.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



Отписываюсь о результатах.
Код

pooling = false;

Привело к падению программы без ошибок через 10 минут, и так несколько раз(
Код

max_pool_size = 3000;

Попробую так, главное чтоб проработало сутки. Ошибку исправил с закрытием ридера.
А нужно Dispose вызывать? Или Close достаточно?

PM MAIL   Вверх
mrbrooks
Дата 17.8.2010, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



Цитата(kokcu @  16.8.2010,  15:29 Найти цитируемый пост)
А нужно Dispose вызывать? Или Close достаточно?

само по себе без разницы. но если есть Close - то его. Типа читаемость лучше и блаблабла.

Цитата(kokcu @  16.8.2010,  15:29 Найти цитируемый пост)
Отписываюсь о результатах.

я тебе в самом начале рекомендовал не отказывать от пула, а закрывать соединения приведенными статическими методами, с каким нибудь интервалом.
PM MAIL   Вверх
kokcu
Дата 18.8.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



Кстате раз в минуту по таймеру делается Очистка всех пулов.
Но висеть sleep все равно остаются
PM MAIL   Вверх
whoever
Дата 30.8.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 5.7.2007

Репутация: нет
Всего: 1



Вполне возможно, что пул переполняется из-за незакрытых соединений в результате ошибок. Вы же не вызываете Dispose или Close гарантированно (Dispose в случае с SqlConnection [подозреваю, что и с MySqlConnection] делает то же самое, что и Close). Используйте using, либо делайте класс (в который оборачиваете подключение и непосредственную работу с базой) IDisposable, в методе Dispose которого проверяйте, закрыто ли подключение, и если нет, то закрывайте, а сам класс используйте вкупе с using.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0815 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.