2011-01-25 2 views
0

우리는 여러 개의 DB 서버를 가지고 있습니다. 서버 중 하나에는 Agency에서 사용하기로되어있는 DB 서버 및 DataBase 이름에 대한 지침을 보유하고있는 마스터 구성 테이블이 있습니다.SQL 연결 단편화, DB에 연결하는 다른 방법

현재 각각의 데이터베이스는 사용 중이 지 않은 경우에도 항상 2 개의 연결을 가지고 있습니다 (우리는 수정 중입니다). 그러나 우리는 DB 서버에 대한 스트레스를 덜어 줄 수있는 방법을 찾기 위해 노력하고 있습니다.

많은 연구 끝에 중앙 위치에 대한 모든 연결을 수행하고 SQLConnection 개체를 통해 사용중인 데이터베이스를 변경한다는 내용의 기사를 발견했습니다. 어느 비트 로터리,하지만 작동 할 수 있습니다.

그래서이 상황에서 다른 사람들이하는 일이 궁금합니다.

이에 대한 현재 경로는 다음과 같습니다 데이터베이스 사용자에 연결하는 것입니다 - 시스템 액세스 ConfigTable에서

- 사용자를 로그 아웃 찾을 수 있습니다. - 시스템에서 대행사 연결 설정을 해당 사용자의 메모리 (SEssion)로로드합니다. - 모든 요청이 이제 해당 사용자 데이터베이스를 직접 방문합니다.

더 효율적인 방법이 있습니까?

답변

1

연결을 늦게 열고 일찍 닫습니다. 예를 들어

:

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

윈도우 OS

효율적으로 풀 및 재사용 연결해야 할 것입니다. 그리고 필요할 때만 연결을 사용하므로 유휴 연결이 없습니다.

EDIT : Windows는 문자 그대로 똑같은 연결 문자열 만 캐시하므로 연결 문자열에 Initial Catalog=<dbname>을 사용하면 한 서버에 500 개 이상의 "연결 풀"이 필요하므로 성능이 저하 될 수 있습니다.

많은 데이터베이스가있는 서버가 4 개인 경우 4 개의 연결 문자열 만 사용해야합니다. 같은 3 가지 이름으로

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

또는 쿼리 :와, 스위치 데이터베이스를 연결 한 후

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

우리의 응용 프로그램 .NET 2.0이며, 이것은 우리가 현재 사용하는 것과 유사하다. 너무 비효율적 인 것으로 입증되었습니다. –

+0

@ Ryan Ternier : 데이터베이스가 많은 소수의 서버에 대한 답변이 – Andomar

+0

@ Ryan Ternier : "너무 비효율적 인 것으로 입증되었습니다."- 좀 더 구체화해야 할 수도 있습니다 ... –

관련 문제