Получение фрагментации SQL-соединения, другой способ подключения к БД - PullRequest
0 голосов
/ 26 января 2011

У нас есть несколько серверов БД. На одном из серверов у нас есть главная таблица конфигурации, в которой содержатся инструкции относительно того, какой сервер БД и имя базы данных должны использовать Агентство.

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

После долгих исследований мы обнаружили несколько статей, в которых говорится, что все соединения с центральным устройством выполняются, а затем измените базу данных, которую мы используем, с помощью объекта SQLConnection. Который кажется немного окольным, но может работать.

Так мне интересно, что другие делают в этой ситуации?

Текущий путь для этого:

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

Есть ли более эффективный способ сделать это?

1 Ответ

1 голос
/ 26 января 2011

Позднее открывайте соединения и закрывайте их раньше.

Например:

string result;
using (var con = new SqlConnection(...))
{
    con.Open();
    var com = con.CreateCommand();
    com.CommandText = "select 'hello world'";
    result = com.ExecuteScalar();
}

Операционная система Windows обеспечит эффективный пул и повторное использование соединений.А поскольку вы используете соединения только тогда, когда они вам нужны, не существует никаких незанятых соединений.

РЕДАКТИРОВАТЬ: Windows кэширует только те строки соединения, которые буквально одинаковы, поэтому, если вы используете Initial Catalog=<dbname> в соединениистрока, которая может снизить производительность, если потребуется более 500 «пулов соединений» для одного сервера.

Так что, если у вас 4 сервера с большим количеством баз данных, убедитесь, что вы используете только 4 строки подключения.После подключения переключите базу данных с помощью:

com.CommandText = "use <dbname>";
com.ExecuteNonQuery();

или запросите имя, состоящее из трех частей, например:

select * from <dbname>.dbo.YourTable
...