2015-07-01 3 views
4

У нас есть сервер azure sql, при подключении более 40 одновременных пользователей мы получаем ниже ошибки.Максимальный размер пула Azure SQL Server

Истек срок истекло. Период ожидания истекает до получения соединения из пула. Возможно, это произошло из-за того, что все объединенные соединения использовались, и был достигнут максимальный размер пула.

При выполнении теста нагрузки мы получаем ошибку. Мы непосредственно выполняем хранимую процедуру с помощью инструмента ([http://www.datamanipulation.net/sqlquerystress/][1]). Для одной хранимой процедуры пользователя возвращается результат за 1 секунду.

Детали оборудования для лазурного стекла - стандартное ОБСЛУЖИВАНИЕ и s2 (50DTU) УРОВЕНЬ ПРОИЗВОДИТЕЛЬНОСТИ. Размер базы данных - 705 МБ.

Мы восстанавливаем одну и ту же базу данных на локальном компьютере. Локально мы используем экспресс-выпуск SQL Server 2014. Используя этот инструмент, мы успешно подключаем 200 пользователей.

Как достичь 200 одновременных пользователей в лазурном режиме? Буду признателен за ваши ценные комментарии.

ответ

3
  1. Эти запросы должны выполняться достаточно долго в SQL DB, чтобы соединения были исчерпаны. Посмотрите на sys.dm_exeC_requests и/или sys.dm_exec_connections, чтобы узнать, сколько из них открыто для 40 пользователей. Медленные запросы также могут быть вызваны ограничениями ресурсов, которые вы нажимаете на уровень S2. Посмотрите на представление sys.resource_stats, чтобы узнать, попадаете ли вы на какие-либо ограничения ресурсов. Если это так, масштабирование может помочь вашей проблеме.

  2. Убедитесь, что вы явно открывать и закрывать свои связи с тем, что .Net может управлять подключениями

  3. Set Max Pool Size в строке подключения большего значения

0

ли пользователи подключаются непосредственно делать база данных (возможно, из какого-нибудь настольного клиентского приложения)? Потому что, если мы говорим о том, что веб-приложение поддерживает 200 одновременных пользователей, это НЕ означает, что вам нужно 200 одновременных подключений к базе данных для их обслуживания - вполне возможно, чтобы обслуживать 200 пользователей с 1-2 соединениями. Достижение предела пула соединений почти всегда означает, что вы просто не закрываете свои соединения (они физически не закрыты, они возвращаются в пул соединений и отмечаются как доступные, когда вы вызываете Close() в SqlConnection. Я не знаком с стресс-тестированием инструмент, который вы используете, но это может быть так.

+0

На самом деле мы разрабатываем веб-API, мы ожидаем 1000 пользователей в секунду. Поэтому мы выполнили нагрузочное тестирование в веб-API с помощью visual studio. Мы сталкиваемся с некоторой ошибкой после 40 пользователей. R & D на этом, наконец, мы идентифицируем проблему в стороне базы данных. Используя вышеуказанный инструмент, мы проверяем загрузку хранимой процедуры. После 40 пользователей мы сталкиваемся с одной и той же проблемой. Инструмент автоматически закрывает и открывает соединение с базой данных. Локально мы достигаем 200 соединений используя этот инструмент –

+0

Веб-API в основном аналогичен веб-приложению, поэтому мой подход применим. У меня есть веб-API с примерно 5 миллионами запросов на d ay, а одновременные подключения к SQL-серверу никогда не превышают 5. Конечно, у вас могут быть более длинные запросы и т. д., но 200 одновременных подключений по-прежнему являются признаком плохой жизни соединения, а не того, что вам действительно нужно. У вас есть источники для инструмента тестирования стресса? Вы можете проверить, закрывает ли подключения? – rouen

+0

Ys его закрытия. Когда я выполняю проверку нагрузки на локальной машине, нет проблем и работает нормально. но в лазуре его не работает. Текущий лазурный план - это стандартные СЕРВИСНЫЕ ОБСЛУЖИВАНИЯ и s2 (50DTU) УРОВЕНЬ ПРОИЗВОДИТЕЛЬНОСТИ. Размер базы данных - 705 МБ. –

Смежные вопросы