데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

Trigger를 이용한 SQL Server 커넥션 풀링 확인

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server를 운영할 때 응용프로그램이 SQL Server에 연결하는 비용은 매우 중요하다.

사용자 커넥션 비용은 (3 * network_packet_size) + 94KB 이다. 기본 네트워크의 패킷 사이즈는 4KB 이다. 결국 사용자 1명당 필요한 연결 비용은 약 130KB가 소모 된다.

 

커넥션 풀링은 응용프로그램이 커넥션을 필요로 하는 시점에 커넥션을 만드는게 아니라 미리 일정 수의 커넥션을 만들어 놓고 필요로 하는 응용프로그램에 전달하는 방식이다.

 

DDL Trigger를 활용하여 응용프로그램이 커넥션 풀링을 사용하고 있는지 알아 보자.

 

커넥션 기록을 저장할 테이블을 생성 한다. Master 데이터베이스에 생성하도록 한다.

CREATE TABLE dbo.ServerLogonHistory(

EventType VARCHAR(512),

PostTime DATETIME,

SPID INT,

ServerName VARCHAR(512),

LoginName VARCHAR(512),

LoginType VARCHAR(512),

SID VARCHAR(512),

ClientHost VARCHAR(512),

IsPooled BIT

)

GO

 

 

 

트리거를 생성한다.

CREATE TRIGGER Trigger_ServerLogon

ON ALL SERVER FOR LOGON

AS

 

DECLARE @data XML

SET @data = EVENTDATA()

INSERT INTO dbo.ServerLogonHistory

SELECT @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(512)')

, @data.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime')

, @data.value('(/EVENT_INSTANCE/SPID)[1]', 'nvarchar(4)')

, @data.value('(/EVENT_INSTANCE/ServerName)[1]', 'nvarchar(512)')

, @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'nvarchar(512)')

, @data.value('(/EVENT_INSTANCE/LoginType)[1]', 'nvarchar(512)')

, @data.value('(/EVENT_INSTANCE/SID)[1]', 'nvarchar(512)')

, @data.value('(/EVENT_INSTANCE/ClientHost)[1]', 'nvarchar(512)')

, @data.value('(/EVENT_INSTANCE/IsPooled)[1]', 'nvarchar(1)')

 

 

만약 테이블에 접근 권한이 없다면 PUBLIC을 추가한다.

GRANT INSERT ON dbo.Trigger_ServerLogon TO PUBLIC

 

 

SSMS 또는 기타 응용프로그램을 이용하여 데이터베이스에 접속하여 보자. 트리거의 정보를 기록 하는 테이블을 확인해 보면 다음과 같이 이력이 기록 됨을 확인 할 수 있다.

 

 

수집된 결과에서 IsPooled 컬럼이 풀링의 사용 여부를 나타내는 컬럼이다.

1 = 커넥션 풀링 사용

0 = 커넥션 풀링 미사용

 

 

응용프로그램이 많은 커넥션을 요청할 때(웹서버 등) 연결 비용이 많이 소모 되므로 커넥션에 대대 모니터링하고 응용프로그램을 개발 할 때 참고 할 수 있도록 한다.

 

[참고 링크]

http://www.mssqltips.com/sqlservertip/1830/script-to-check-sql-server-connection-pooling/

 

 

 강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1067
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 959
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3126
1730 SQL Server에서 Trigger 활성 / 비활성 감시 jevida(강성욱) 2016.09.14 1472
1729 DDL Trigger를 이용한 데이터베이스 변경 사항 추적 jevida(강성욱) 2016.09.14 1230
» Trigger를 이용한 SQL Server 커넥션 풀링 확인 jevida(강성욱) 2016.09.14 1088
1727 SQL Server Trigger jevida(강성욱) 2016.09.14 938
1726 인덱스에 대한 SORT_IN_TEMPDB 옵션 jevida(강성욱) 2016.09.14 847
1725 인덱스 DDL 작업의 디스크 공간 요구 사항 jevida(강성욱) 2016.09.14 912
1724 XML nodes() 함수를 이용한 OPENXML 교체 jevida(강성욱) 2016.09.14 945
1723 XQuery를 사용한 XML 데이터 업데이트 jevida(강성욱) 2016.09.14 1889
1722 BCP XML 파일 형식 jevida(강성욱) 2016.09.14 1256
1721 SQL Server로 데이터 가져오기 jevida(강성욱) 2016.09.14 1223
1720 SQL Server Stored Procedure 암호화 jevida(강성욱) 2016.09.14 2691
1719 SQL Server 대칭키 vs 비대칭키 암호화 jevida(강성욱) 2016.09.14 1690
1718 SQL Server 마스터 키 관리 jevida(강성욱) 2016.09.14 1754
1717 대칭키를 사용하여 SQL Server 암호화(열 수준) 하기 jevida(강성욱) 2016.09.13 5694
1716 DMV를 사용하여 누락된 인덱스 확인 jevida(강성욱) 2016.09.13 1343
1715 DMV를 이용한 SQL Server 대기 상태 확인 jevida(강성욱) 2016.09.13 3821
1714 DMV를 이용한 SQL Server 성능 카운터 확인 jevida(강성욱) 2016.09.13 1792





XE Login