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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пул соединений, приложение падает 
:(
    Опции темы
kokcu
Дата 25.7.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. Есть приложение которое делает по таймерам несколько запросов в mysql. Одновременно около 20 подключений. Но спустя некоторое время падает, если увеличивается нагрузка то падает быстрее. Пишет что пул соединений переполнен. Соединения все закрываю. Использую .NET mysql connector в настройках мускула поставил 1000 одновременных подключений. Где настраивается пул и почему он переполняется?
PM MAIL   Вверх
mrbrooks
Дата 28.7.2010, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(kokcu @  25.7.2010,  18:56 Найти цитируемый пост)
Где настраивается пул

в строке подключения. можно его вообще отключить.
Цитата(kokcu @  25.7.2010,  18:56 Найти цитируемый пост)
почему он переполняется? 

видимо много подключений. причем с разных клиентов. 

я так понимаю закрытие соединения идет как аля MySqlConnection.Close(). При наличии пула соединений для закрытия соединения этого мало. Нужно также использовать статический метод MySqlConnection.ClearPool
PM MAIL   Вверх
kokcu
Дата 2.8.2010, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нету такого метода(
Вообще какие есть опасные моменты при работе с базой данных? У меня локальное приложение и то при нагрузке падает иногда.
PM MAIL   Вверх
Springtime
Дата 2.8.2010, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Попробуй в строке подключения к базе, указать дополнительную опцию - Pooling=false
http://msdn.microsoft.com/en-us/library/8x...28VS.71%29.aspx
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
mrbrooks
Дата 2.8.2010, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(kokcu @  2.8.2010,  02:27 Найти цитируемый пост)
Нету такого метода(

да ладно. 

ну тогда отключай пул соединений вообще как советует Springtime. Если не вкурсе как обзывается используй для подключения класс MySqlConnectionStringBuilder
PM MAIL   Вверх
kokcu
Дата 3.8.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поставил, но периодически выскакивает ошибка 
Код

object reference not set to an instance of an object


Программа просто обрабатывает одинаковые запросы.
PM MAIL   Вверх
Мурлыкатам_
Дата 6.8.2010, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Проблема тянется уже больше года smile

Возник логичный вопрос: А стоит ли постоянно создавать в юзинге SqlConnection и открывать его при каждом выполнение (у мя тоже по таймеру выполняется запрос один и тот же) или подключение можно просто сделать мембером класса и открывать его в конструкторе класса, а в методе который пишет, просто проверять на null и на ?

например:

Код

    class SqlWriter
    {
        private string _ConnectionString = string.Empty;
        private SqlConnection _Connection = null;
        private bool _QueryShouldStop = false;

        public SqlWriter(string connectionString)
        {
            if (string.IsNullOrEmpty(connectionString))
                throw new ArgumentNullException("connectionString");

            _ConnectionString = connectionString;

            if (_Connection == null)
                _Connection = new SqlConnection(_ConnectionString);

            if (_Connection.State != ConnectionState.Open)
                _Connection.Open();
        }

        public void StartQueryExecution(string query)
        {
            while (true)
            {
                if (_QueryShouldStop)
                {
                    if (_Connection != null)
                        if (_Connection.State == ConnectionState.Open)
                            _Connection.Close();

                    break;
                }
                
                if (_Connection == null)
                    _Connection = new SqlConnection(_ConnectionString);

                if (_Connection.State != ConnectionState.Open)
                    _Connection.Open();

                SqlCommand command = new SqlCommand(query, _Connection);

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

        public void StopQueryExecution()
        {
            _QueryShouldStop = true;
        }
    }


В таком случае ведь не должно быть проблем с пулингом или в таком подходе есть какие-то другие подводные камни?

Посоветуйте пожалуйста, а то пулинг этот просто убивает. Раньше было по 100 соединений с базой все работало, никто ничего 
не менял, перестало работать. Самое обидное в пулинге - это его непредсказуемость. Хотя я понимаю, что проблемы с пулингом
может вызывать только утечка соединений.

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

Спасибо.

Похожа моя проблема в незнании правил написания коннекшен стрингов smile

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


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


Опытный
**


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

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



Цитата(kokcu @ 2.8.2010,  01:27)
Нету такого метода(
Вообще какие есть опасные моменты при работе с базой данных? У меня локальное приложение и то при нагрузке падает иногда.

Метод очистки пула нужно вызывать у класса SqlConnection, а не у его объекта. Это статические методы.


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


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


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

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



Цитата(Мурлыкатам_ @  6.8.2010,  01:53 Найти цитируемый пост)
А стоит ли постоянно создавать в юзинге SqlConnection и открывать его при каждом выполнение

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



PM MAIL   Вверх
kokcu
Дата 6.8.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, засунул claerpool и clearallpools в таймер посмотрим что получилось.
Я сейчас посмотрел process list на сервере и там этим подключений наверно тысяча. Так надо? 
Статус у все слип.

И еще одна странная вещь. Я завел счетчик активных соединений. Когда юзал open просто увеличивал его на 1, когда клоуз то уменьшал. 
Уменьшалки точно везде стоят, под каждым connection.Close() но почему то уже 700 активных подключений(((

Это сообщение отредактировал(а) kokcu - 6.8.2010, 12:26
PM MAIL   Вверх
mrbrooks
Дата 6.8.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(kokcu @  6.8.2010,  12:59 Найти цитируемый пост)
Я завел счетчик активных соединений. Когда юзал open просто увеличивал его на 1, когда клоуз то уменьшал. 
Уменьшалки точно везде стоят, под каждым connection.Close() но почему то уже 700 активных подключений(((

покажи как сделал?
PM MAIL   Вверх
kokcu
Дата 6.8.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

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 часов аптайма и все ок)
PM MAIL   Вверх
kokcu
Дата 6.8.2010, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



теперь другая проблема((( программа начинает примерно через 6 часов жутко тормозить и жрать половину проца и 100м оперативы( что делать?
PM MAIL   Вверх
mrbrooks
Дата 9.8.2010, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



тут сложно что либо сказать. юзай профайлер, что бы выявить данные утечки.
PM MAIL   Вверх
Springtime
Дата 9.8.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

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

Это сообщение отредактировал(а) Springtime - 9.8.2010, 14:32
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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