Каково влияние установки параметра «Максимальный размер пула» в строке подключения Sql в cpp / cli - PullRequest
0 голосов
/ 13 ноября 2018

Я использую класс удобства cs для обработки моих запросов sql. Это просто, вы создаете экземпляр, указав имя базы данных, и он одновременно управляет только одним дуэтом команда / руководитель чтения данных.

public static void      Connect     (string DBName)
{
    string connectionString =
        "Server=serverNaaaaaaaaame;Database=" 
        + DBName 
        + ";Integrated Security=SSPI;";
    try
    {
        if (cnn != null)
            cnn.Close ();
        cnn = new SqlConnection (connectionString);
        cnn.Open ();
    }
    catch (Exception e)
    {
        string aaaaaa = e.Message;
    }

}
public void     Command     (string command)
{
    try
    {
        if (drd != null)
            drd.Dispose ();
        if (cmd != null)
            cmd.Dispose ();
        cmd = new SqlCommand (command, cnn);
        //cmd.CommandTimeout = 300;
        drd = cmd.ExecuteReader ();
    }
    catch (Exception e)
    {
        string aaaaaa = e.Message;
    }
}

Как и в многопоточных частях моего кода, я часто получаю тайм-ауты. Кажется, это связано с тем, что количество моих одновременных соединений слишком велико. (Если я ввожу отладку по истечении времени ожидания и пытаюсь выполнить запрос в mssqlsms, он зависает, пока я не остановлю отладку.)

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

Изменилось ли количество подключений SqlConnect, которые я могу подключить к той же базе данных?

Изменяет ли это количество одновременных SqlCommand и последующих sqlDataReaders, которые я могу использовать одновременно? На том же SqlConnection? Что-то еще?

Нужно ли указывать его во всех строках подключения?

Имеет ли это какой-либо эффект, если база данных уже используется в другом программном обеспечении?

1 Ответ

0 голосов
/ 13 ноября 2018

В многопоточной среде рекомендуется сценарий

  • open SqlConnection (это создает или получает существующее соединение в пуле)
  • обработка данных с помощью считывателей / команд
  • закрыть SqlConnection как можно скорее, чтобы освободить соединение с пулом для использования другими потоками)

В соответствии с MSDN , MaxPoolSize ограничивает количество одновременных соединений в пуле (для каждого уникальная строка подключения).

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

Да, когда счетчик открытых/ used SqlConnection> MaxPoolSize приложение ожидает освобождения подключения к пулу.

Изменяет ли оно количество одновременных SqlCommand и последующих sqlDataReaders, которые я могу использовать одновременно?На том же SqlConnection?Что-то еще?

Да, как было сказано выше, количество одновременных соединений ограничено MaxPoolSize.Однако SqlDataReader зависит от SqlConnection. Вы можете использовать (последовательно) несколько считывателей для одного подключения (см. Также параметр MARS для нескольких наборов записей).

Нужно ли указывать его во всех строках подключения?

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

Влияет ли это, если база данных уже используется в другом программном обеспечении?

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

...