이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 20385|회답: 0

[출처] ADO.NET 튜토리얼 (5) 데이터베이스 연결 풀에 대해 자세히 설명하세요

[링크 복사]
게시됨 2016. 9. 17. 오후 3:41:28 | | | |
초록
오늘은 데이터베이스 연결 풀에 대해 이야기하려고 합니다. 솔직히 말하면, 오리 배가 매우 크다고 말했어요. 연결 풀은 다른 챕터에 비해 이해하기 상대적으로 어렵기 때문입니다. 가장 인기 있는 문장으로 설명하고 싶지만, 쉽지 않은 일입니다. 하지만 연결 풀은 특히 다중 사용자 프로그램을 배포할 때 매우 중요한 지식 포인트입니다. 그래서 저는 말할 뿐만 아니라 철저하게 말해야 합니다. 이 글을 통해 연결 풀링의 기본 원리와 이미 애플리케이션 성능 향상에 어떻게 활용되고 있는지 이해하게 될 것입니다.

목차
연결 풀이란 무엇인가요?
연결 풀의 작동 원리
연결 풀의 몇 가지 매우 중요한 특성에 대해 이야기해 봅시다
연결 풀 예외 및 처리 방법
연결 상태를 모니터링하는 방법
연결 풀의 효율적 활용을 위한 기본 원칙
1. 연결 풀이란 무엇인가요?
      이전 글 "ADO.NET 반드시 알아야 할 (4) 연결 객체의 맛"에서 데이터베이스 연결을 구축하는 것은 매우 시간이 많이 걸리고 노동 집약적(자원 소모)이 된다는 점을 강조했습니다. 이는 데이터베이스 서버에 연결하는 과정이 여러 긴 과정을 포함하기 때문입니다: 물리적 채널(예: 소켓이나 이름 파이프라인) 설정, 서버와의 초기 핸드셰이크, 연결 문자열 정보 분석, 서버 인증 절차, 현재 트랜잭션 등록 확인 등 여러 과정이 필요합니다. 왜 그런 메커니즘이 있든, 존재에는 항상 이유가 있습니다. 새로운 연결을 만드는 것이 너무 고통스러운데, 기존 연결을 재사용하는 건 어떨까요?

      사실 ADO.NET 이미 연결 풀링이라는 최적화 방법을 제공합니다. 연결 풀은 그런 컨테이너 중 하나로, 데이터베이스 서버에 연결된 물리적 연결을 고정하는 역할을 합니다. 따라서 데이터베이스 서버에 연결해야 할 때는 새 연결을 생성하지 않고 풀(컨테이너)에서 빈 연결만 빼면 됩니다. 이로 인해 데이터베이스 연결 시 오버헤드가 크게 줄어들어 애플리케이션 성능이 향상됩니다.

PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。



2. 연결 풀의 작동 방식
2.1 연결 풀 생성
      연결 풀은 클래스에 민감하다는 점을 유의해야 합니다. 즉, 동일한 애플리케이션 도메인 내에서 동시에 여러 종류의 연결 풀을 가질 수 있습니다. 그렇다면 연결 풀은 어떻게 식별되나요? 상세히 말하면, 프로세스를 구성하는 서명, 애플리케이션 도메인, 연결 문자열, 그리고 통합 보안 사용 시 Windows 식별 방식으로 구분됩니다. 하지만 동일한 응용 도메인의 경우, 일반적으로 연결 문자열로만 식별됩니다. 연결이 열리면, 스트립 연결의 타입 서명이 기존 연결 풀의 타입과 일치하지 않으면 새로운 연결 풀이 생성됩니다. 그렇지 않으면 새로운 연결 풀이 생성되지 않습니다.

      연결을 만드는 전형적인 예:


위 사례에서 세 개의 SqlConnection 객체를 만들었지만, 관리하는 데 필요한 연결 풀은 두 개뿐이었습니다. 조심하는 친구들, 이미 conn1과 conn3가 같은 연결 문자열을 가지고 있어서 연결 풀을 공유할 수 있지만, conn2와 conn1은 conn3와 다르기 때문에 새로운 연결 풀을 만들어야 합니다.

2.2 유휴 연결 할당
      사용자가 연결 요청을 생성하거나 Connection 객체의 Open을 호출할 때, 연결 풀 관리자는 먼저 연결 요청의 타입 서명을 기반으로 해당 유형의 연결 풀을 찾아 빈 연결을 할당하려고 시도해야 합니다. 자세한 내용은 다음과 같습니다:

풀에 사용 가능한 연결이 있으면 연결을 반환하세요.
수영장 내 모든 연결이 소진되면 새로운 연결을 만들어 수영장에 추가하세요.
풀 내 최대 연결 수에 도달하면, 요청은 빈 연결이 남을 때까지 대기 대기열에 들어갑니다.
2.3 유효하지 않은 연결 제거
      잘못된 연결, 즉 데이터베이스 서버에 제대로 연결되지 않는 연결. 연결 풀의 경우, 데이터베이스 서버에 저장되는 연결 수가 제한되어 있습니다. 따라서 무효 연결이 제때 제거되지 않으면 연결 풀의 공간이 낭비됩니다. 사실 걱정하실 필요 없습니다. 연결 풀 매니저가 이 문제들을 잘 해결해 주었습니다. 연결이 장시간 유휴 상태이거나 서버와의 연결이 끊긴 것을 감지하면 연결 풀 관리자가 해당 연결을 풀에서 제거합니다.

2.4 사용 연결 재활용
      연결을 모두 사용하면, 연결을 닫거나 해제하여 연결을 풀에 반환하여 재사용할 수 있도록 해야 합니다. 연결 객체의 Close 또는 Dispose 메서드나 C#의 using 문장을 통해 연결을 닫을 수 있습니다.



3. 몇 가지 매우 중요한 특성에 대해 말씀해 주세요
연결 풀의 동작은 연결 문자열로 제어할 수 있으며, 주로 네 가지 중요한 특성을 포함합니다:

연결 타임아웃: 연결 요청이 타임아웃을 기다리는 시간입니다. 기본값은 15초를 초로 나타냅니다.
최대 풀 크기: 연결 풀 내 최대 연결 수. 기본값은 100입니다.
최소 풀 크기: 연결 풀 내 최소 연결 수. 기본값은 0입니다.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
연결 풀의 특성을 이해하기 위해 예를 들어 보겠습니다. 코드는 다음과 같습니다:

4. 연결 풀 예외 및 처리 방법
      사용자가 연결을 정확히 또는 제때 닫지 않고 열면 종종 "연결 누출" 문제가 발생합니다. 누출된 연결은 Dispose 메서드가 호출될 때까지 열린 상태로 유지되며, 가비지 컬렉터(GC)가 연결을 닫고 해제합니다. ADO와 달리 ADO.NET 사용한 연결을 수동으로 닫아야 합니다. 중요한 오해 중 하나는 연결된 객체가 국소 범위 밖에 있을 때 연결이 닫힌다는 것입니다. 실제로 범위 밖에서는 연결 객체만 해제되고 연결 자원은 해제되지 않습니다. 먼저 예시를 살펴보겠습니다.

결과를 더 명확하게 하기 위해 최대 연결 수를 5개로 설정했고, 타임아웃 시간은 1초로 설정했습니다. 달리기 후에는 다음과 같은 결과가 빠르게 나옵니다.


위 결과로 보아 연결에 이상이 분명히 존재합니다. 우리는 이미 연결 풀의 최대 연결 수가 5개임을 알고 있으며, 6번째 연결이 생성되면 연결 풀의 최대 연결 수가 최대 개수에 도달해 빈 연결이 없으므로 타임아웃될 때까지 기다려야 합니다. 타임아웃 시간이 초과되면 위에서 언급한 연결 예외가 나타납니다. 따라서 사용한 연결부는 가능한 한 빨리 제대로 닫고 해제해야 한다는 점을 다시 한 번 강조합니다.



5. SQL 서버 연결 상태 모니터링 방법
(1) 활동 모니터를 통해
1단계: MSMSS 관리자를 열고 "활동 모니터" 아이콘을 클릭합니다.



2단계: Open Activity Monitor 뷰에서 프로세스 탭을 클릭하세요.



3단계: #4 연결 풀 예외 및 처리 방법의 예제를 실행하세요. 아래 그림에 보이는 5개의 열린 연결을 볼 수 있습니다.



(2) T-SQL 문장 사용
마찬가지로, 시스템 저장 프로시저 sp_who을 실행함으로써 연결 상태를 모니터링할 수도 있습니다.






6. 연결 풀의 효율적 활용을 위한 기본 원칙
      연결 풀을 잘 활용하면 애플리케이션 성능이 크게 향상됩니다. 오히려 잘못 사용하면 해가 되지 않습니다. 일반적으로 다음 원칙들을 따라야 합니다:

가장 늦은 순간에 연결을 요청하고, 가능한 한 빨리 연결을 해제하세요.
연결을 종료할 때는 먼저 해당 사용자 정의 트랜잭션을 종료하세요.
연결 풀 내에 최소 한 개의 열린 연결을 유지하세요.
수영장 잔해는 피하세요. 여기에는 주로 통합 보안에 의해 생성되는 풀 단편화와 다수의 데이터베이스를 사용하여 생성되는 풀 단편화가 포함됩니다.
팁: 풀 단편화는 많은 웹 애플리케이션에서 흔히 발생하는 문제이며, 애플리케이션은 프로세스가 종료될 때까지 풀이 해제되지 않는 많은 수의 풀을 생성할 수 있습니다. 이렇게 하면 많은 연결이 열리면서 많은 메모리를 차지하고 성능이 저하됩니다.





이전의:.net/c#은 무작위 수, 사용자 정의 문자 및 숫자 수를 생성합니다
다음:쿠키에 대해 HttpOnly 설정은 어떻게 하나요? HttpOnly 사용은 무엇인가요?
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com