Время ожидания соединения и время жизни соединения - PullRequest
15 голосов
/ 01 мая 2010

В чем преимущество и недостаток времени ожидания соединения = 0?

А какой смысл в Connection Lifetime = 0?

например,

(Database=TestDB;
 port=3306;
 Uid=usernameID;
 Pwd=myPassword;
 Server=192.168.10.1;
 Pooling=false;
 Connection Lifetime=0;
 Connection Timeout=0)

а для чего нужен пул соединений?

Ответы [ 2 ]

29 голосов
/ 01 мая 2010

Тайм-аут - это как долго вы ждете ответа на запрос, прежде чем сдаться. TimeOut = 0 означает, что вы будете продолжать ждать, пока соединение произойдет навсегда. Хорошо, я думаю, если вы подключаетесь к очень медленному серверу, это нормально, если на ответ требуется 12 часов :-). Вообще плохо. Вы хотите установить какой-то разумный тайм-аут для запроса, чтобы вы могли понять, что ваша цель снижается и двигаться дальше по жизни.

Срок жизни соединения = сколько времени соединение живет до того, как оно будет разорвано и воссоздано. 0 лет жизни никогда не убивают и не воссоздают. Обычно это не плохо, потому что убивать и воссоздавать соединение медленно. Из-за различных ошибок ваши соединения могут застрять в нестабильном состоянии (например, при работе со странными 3-сторонними транзакциями) ... но в 99% случаев полезно поддерживать время жизни соединения как бесконечное.

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

В итоге:
ConnectionTimeout = 0 плохо, сделайте что-то разумное, например, 30 секунд.
ConnectionLifetime = 0 в порядке
ConnectionPooling = отключено плохо, вы, вероятно, захотите его использовать.

9 голосов
/ 22 марта 2012

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

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

Тем не менее, объединение в пул соединений становится проблемой , когда сервер базы данных настроен на уничтожение соединений с базой данных, которые превышают максимальное время простоя из-за того, что сервер базы данных может прервать соединения, которые все еще могут находиться в соединении. бассейн. В этом сценарии Срок действия соединения может пригодиться, чтобы отбросить эти соединения, так как они все равно были закрыты сервером.

...