Поскольку вы отметили этот вопрос с помощью sympy, я приведу такой пример.
Из документации: http://docs.sympy.org/latest/modules/plotting. html .
from sympy import var, plot_implicit
var('x y')
plot_implicit(x*y**3 - y*x**3)
В большинстве случаев проблемы организации пула подключений связаны с "утечками соединения". Ваше приложение, вероятно, не закрывает свои соединения с базой данных правильно и последовательно. Когда Вы оставляете соединения открытыми, они остаются заблокированными, пока сборщик "мусора".NET не закрывает их для Вас путем вызова их Finalize()
метод.
Вы хотите удостовериться, что Вы действительно закрытие соединения . Например, следующий код вызовет утечку соединения, если код между .Open
и Close
выдаст исключение:
var connection = new SqlConnection(connectionString);
connection.Open();
// some code
connection.Close();
корректный путь был бы этим:
var connection = new SqlConnection(ConnectionString);
try
{
connection.Open();
someCall (connection);
}
finally
{
connection.Close();
}
или
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
someCall(connection);
}
, Когда Ваша функция возвраты соединение от метода класса удостоверяются, что Вы кэшируете ее локально и называете Close
метод. Вы пропустите соединение с помощью этого кода, например:
var command = new OleDbCommand(someUpdateQuery, getConnection());
result = command.ExecuteNonQuery();
connection().Close();
соединение, возвращенное от первого вызова до getConnection()
, не закрывается. Вместо того, чтобы закрыть Ваше соединение, эта строка создает новое и попытки закрыть его.
, Если Вы используете SqlDataReader
или OleDbDataReader
, закройте их. Даже при том, что закрытие самого соединения, кажется, добивается цели, вставляет дополнительное усилие закрыть Ваши объекты средства чтения данных явно при использовании их.
Эта статья" , Почему Соединение Объединяет Переполнение? " из Журнала MSDN/SQL объясняет много деталей и предлагает некоторые стратегии отладки:
sp_who
или sp_who2
. Эти системные хранимые процедуры возвращают информацию из sysprocesses
системная таблица, которая показывает состояние и информацию обо всех рабочих процессах. Обычно Вы будете видеть один идентификатор серверного процесса (SPID) для каждого подключения. При именовании соединения при помощи аргумента Имени приложения в строке подключения рабочие соединения будет легко найти. TSQL_Replay
для трассировки открытых соединений. Если Вы знакомы с Профилировщиком, этот метод легче, чем опрос при помощи sp_who. Я встретился с этой проблемой также при использовании некоторого стороннего слоя данных в одном из моих приложений.NET. Проблема состояла в том, что слой не закрыл соединения правильно.
Мы вывели слой и создали тот сами, который всегда закрывает и располагает соединения. С тех пор мы больше не получаем ошибку.
Можно определить минимальный и максимальный размер пула путем определения MinPoolSize=xyz
и/или MaxPoolSize=xyz
в строке подключения. Этой причиной проблемы могла быть другая вещь как бы то ни было.
Вы проверяли на DataReaders, которые не закрываются и response.redirects прежде, чем закрыть соединение или datareader. Соединения остаются открытыми, когда Вы не закрываете их перед перенаправлением.
Если Ваше использование не повысилось много, кажется маловероятным, что существует только отставание в работе. IMO, наиболее вероятная опция состоит в том, что что-то использует соединения и не выпускает их быстро. Вы уверены , Вы используете using
во всех случаях? Или (через любой механизм) выпуск соединений?
Да, существует способ изменить конфигурацию. Если Вы находитесь на выделенном сервере и просто нуждаетесь в большем количестве соединений SQL, можно обновить "макс. записи" размера пула в обеих строках подключения путем следования этим инструкциям:
Находят Ваши Строки подключения, они будут выглядеть подобными примерам ниже:
, "добавляют имя = "SiteSqlServer" connectionString = "сервер = (локальный); database=dbname; uid=dbuser; pwd=dbpassword; pooling=true; соединение lifetime=120; макс. пул size=25"";
5. Изменитесь макс. пул size=X оценивают необходимому размеру пула.
We encounter this problem from time to time on our web site as well. The culprit in our case, is our stats/indexes getting out of date. This causes a previously fast running query to (eventually) become slow and time out.
Try updating statistics and/or rebuilding the indexes on the tables affected by the query and see if that helps.