커넥션 풀링을 사용하는 경우 (커넥션을 Close 한 이후에 사용 하는 경우)
1. 동일 프로세스에 동일한 Connection String을 가지고 있으며, SPTimeout / Wait Retry (이 후 설명) 안에서 실행 되는 경우
예) 아래의 경우 해당 객체를 close 한 경우에도 다른 객체로 동일한 Connection String 을 이용하여 연결한 경우 입니다.
위의 경우 sp_reset_connection 를 통해 이전 연결 설정을 재 사용함을 확인 할 수 있습니다.
커넥션 풀링을 사용하지 않는 경우
1. 동일한 프로세스가 아닌 경우
2. Connection String 이 다른 경우
3. 연결 객체 종료 (Close) 이후 SPTimeout / Wait Retry 의 기본 값 60초가 지난 경우
예)
아래는 동일 프로세스에 사용자 입력을 기다리는 형태로 구성되어 있습니다.
보는것과 같이 SPID가 54 입니다.
ㅏ
사용자 입력을 대기하도록 했습니다. 보는것과 같이 1분이 넘었습니다.
(아 Audit Logout 이벤트는 쿼리 성능과 관계없이 App에서 홀딩한 시간도 측정하는군요.)
아 sp_reset_connection 이 실행 되지 않고 있음을 확인 할 수 있습니다.
다시 말해서 풀링을 사용하고 있지 않다는 말이군요.
SPTimeout / Wait Retry 시간 조정
먼저 각 드라이버 별로 SPTimeout 값을 늘려줄 수 도 있습니다. 해당 레지스트리 아래에 SPTimeout 값을 늘려주면 됩니다.
SQLOLEDB (SQL Server native provider) : HKEY_CLASSES_ROOT\CLSID\{0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}
Microsoft.Jet.OLEDB.4.0 (Jet native provider) ": HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}
MSDAORA (Oracle native provider) : HKEY_CLASSES_ROOT\CLSID\{e8cc4cbe-fdff-11d0-b865-00a0c9081c1d} MSDASQL (OLE DB Provider for ODBC) : HKEY_CLASSES_ROOT\CLSID\{c8b522cb-5cf3-11ce-ade5-00aa0044773d}
Wait Retry 의 경우 이 대기 시간의 전역 설정이라고 볼 수 있습니다.
아래의 값을 조정하게 되면 전체적으로 대기 하는 시간을 늘려 줄 수 있습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataAccess\Session Pooling\Retry Wait
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DataAccess\Session Pooling\ExpBackOff
커넥션 풀링 이용하기
1. Connection String에 OLE DB Services = –1 값을 추가 합니다. (의미는 아래 표를 참고 합니다.)
예)
string source = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=TEST;" +
"UID=sa;PWD=pass1234;" +
"OLE DB Services = -1;";
2. OLEDB Driver 의 OLEDB_SERVICES 를 0xffffffff 로 수정합니다. (의미는 아래 표를 참고 합니다.)
예)
-- 실제로는 해당 이벤트 확인이 않됩니다.
이는 EventSubClass 를 통해서 Connection 의 Pooling 여부를 확인 할 수 있다고 하는데, 실제로는 않되네요…;;
그림 출처 : http://weblogs.sqlteam.com/billg/archive/2007/10/31/Login-Events-include-Pooled-Connections.aspx
참고 문서
http://blogs.msdn.com/selvar/archive/2007/11/10/ole-db-resource-pooling.aspx
http://msdn.microsoft.com/en-us/library/ms810829.aspx
http://support.microsoft.com/kb/237977