2009-07-03 6 views
1

이것은 SQL 명령 최적화에 대한 질문이 아닙니다. 가능한 한 효율적으로 명령을 처리 할 수 ​​있도록 SQL 연결이 열려 있고 계속 준비되어 있는지 확인하는 방법이 있는지 궁금합니다.SQL 연결 성능 ​​최적화?

내가 지금보고있는 것은 SQL 명령을 실행할 수 있으며 그 명령은 ~ 1 초가 걸리고 추가 실행은 ~ 300ms가 걸릴 것입니다. 이것은 명령이 다른 응용 프로그램 인스턴스의 SQL 서버에 대해 이전에 실행 된 후입니다. 따라서이 응용 프로그램 초기 실행 전에 실행 된 쿼리에 대해 SQL 캐시를 완전히 채워야합니다. 오랫동안 계속 쿼리를 실행하면 약 300ms의 시간이 표시되지만 애플리케이션을 5-10 분 동안 유휴 상태로두고 다음 요청을 반환하면 ~ 1 초 (초기 요청과 동일)로 돌아갑니다.

연결 문자열 또는 SqlConnection의 일부 속성을 통해 연결을 유지 관리하고 쿼리를 효율적으로 처리 할 수 ​​있도록 프레임 워크를 안내하는 방법이 있습니까?

답변

0

당신은 그것을 닫지 않아도 열어 두십시오. :) 연결 풀링이 연결 관리를 처리 할 것이기 때문에 그것은 조언이되지 않습니다. 당신은 그것을 가능하게 했습니까?

+0

기본적으로 사용하도록 설정되어 있습니다. –

2

절차에 대한 실행 계획을 확인 했습니까? 실행 계획은 서버의 메모리에로드 된 다음 특정 기간이 경과하거나 절차에서 액세스되는 테이블 등에 따라 지워집니다. 스토어드 프로 시저를 단순화 (분할 할 수도 있음)하여 데이터베이스 서버가 계획을 계산할 때 수행해야하는 작업량을 줄이고 궁극적으로 프로 시저가 처음 호출되는 횟수를 줄이는 경우가있었습니다. 스토어드 프로 시저가 처음 호출 시간을 줄이는 지 여부를 테스트하기 위해 매번 다시 컴파일하도록합니다 ... 스토어드 프로 시저의 복잡성으로 인해 데이터베이스 서버가 다른 매개 변수를 기반으로 지속적으로 재 컴파일해야하는 경우가있었습니다 SP를 분할하거나 큰 select 문을 여러 개의 UPDATE 문으로 단순화하는 것은 상당한 도움이되었습니다.

다른 아이디어가 간헐적으로 간단한 getDate() 또는 이와 유사한 메소드를 너무 자주 호출하여 SQL 서버가 깨어있는 것입니다. (희망적이라 생각합니다) ... IIS에서 메모리에 asp.net 앱을 유지하는 것과 거의 같습니다. .

0

기본적으로 ADO .NET에서는 연결 풀링을 사용할 수 있습니다. 이것은 응용 프로그램에서 사용하는 연결 문자열을 통해 수행됩니다. 더 많은 정보 in Using Connection Pooling with SQL Server

0

하나 이상의 데이터베이스 연결을 사용하는 경우 더 효율적일 수 있습니다. 하나의 데이터베이스 연결을 가짐으로써 최상의 액세스 속도가 항상 제한적으로 순차적으로 제한된다는 것을 의미합니다. > 1 연결을 갖는 것이 컴파일러가 동시 액세스를 좀 더 최적화 할 수있는 기회를 의미합니다. .NET을 사용하고있는 것 같습니까? 또한

당신이 반복적으로 동일한 SQL 문을 발행하는 경우, 그것의 가능한 데이터베이스 서버 따라서 빠른 결과 집합의 반환을, 짧은 시간 동안 결과를 캐싱 .. 열려있는 연결을위한

1

기본값 .NET 연결 풀의 값은 0입니다.

당신은 1 이상으로 연결 문자열에서이 값을 조정할 수 있습니다

"data source=dbserver;...Asynchronous Processing=true;Min Pool Size=1" 

options in MSDN에 대한 자세한 내용을 참조하십시오.