OLE DB, ODBC 및 Oracle 연결 풀링OLE DB, ODBC, and Oracle Connection Pooling

연결 풀링을 사용하면 응용 프로그램의 성능 및 확장성을 대폭 향상시킬 수 있습니다.Pooling connections can significantly enhance the performance and scalability of your application. 이 단원에서는 OLE DB, ODBC 및 Oracle용 .NET Framework 데이터 공급자에 대한 연결 풀링에 대해 설명합니다.This section discusses connection pooling for the .NET Framework data providers for OLE DB, ODBC and Oracle.

OleDb에 대한 연결 풀링Connection Pooling for OleDb

.NET Framework Data Provider for OLE DB에서는 OLE DB 세션 풀링을 사용하여 자동으로 연결을 풀링합니다.The .NET Framework Data Provider for OLE DB automatically pools connections using OLE DB session pooling. 연결 문자열 인수를 사용하면 풀링이 포함된 OLE DB 서비스를 활성화하거나 비활성화할 수 있습니다.Connection string arguments can be used to enable or disable OLE DB services including pooling. 예를 들어, 다음 연결 문자열은 OLE DB 세션 풀링과 자동 트랜잭션 인리스트먼트를 비활성화합니다.For example, the following connection string disables OLE DB session pooling and automatic transaction enlistment.

Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;  

연결의 사용을 끝내면 연결이 풀로 반환되도록 항상 연결을 닫거나 삭제하는 것이 좋습니다.We recommend that you always close or dispose of a connection when you are finished using it in order to return the connection to the pool. 명시적으로 닫히지 않는 연결은 풀에 반환되지 않을 수 있습니다.Connections that are not explicitly closed may not get returned to the pool. 예를 들어, 범위를 벗어났지만 명시적으로 닫히지 않은 연결은 최대 풀 크기에 도달했으며 여전히 유효한 경우에만 연결 풀로 반환됩니다.For example, a connection that has gone out of scope but that has not been explicitly closed will only be returned to the connection pool if the maximum pool size has been reached and the connection is still valid.

OLE DB 세션 또는 리소스 풀링으로 OLE DB 공급자 서비스 기본값을 재정의 하 여 풀링을 비활성화 하는 방법에 대 한 자세한 내용은 참조는 OLE DB Programmer's Guide합니다.For more information about OLE DB session or resource pooling, as well as how to disable pooling by overriding OLE DB provider service defaults, see the OLE DB Programmer's Guide.

Odbc에 대한 연결 풀링Connection Pooling for Odbc

.NET Framework Data Provider for ODBC의 연결 풀링은 연결에 사용되는 ODBC 드라이버 관리자에서 관리하며 .NET Framework Data Provider for ODBC에 의해 영향을 받지 않습니다.Connection pooling for the .NET Framework Data Provider for ODBC is managed by the ODBC Driver Manager that is used for the connection, and is not affected by the .NET Framework Data Provider for ODBC.

연결 풀링을 사용 하지 않도록 설정 하거나, 엽니다 ODBC 데이터 원본 관리자 제어판의 관리 도구 폴더에 있습니다.To enable or disable connection pooling, open ODBC Data Source Administrator in the Administrative Tools folder of Control Panel. 연결 풀링 탭을 사용 하면 연결 풀링 설치 된 각 ODBC 드라이버에 대 한 매개 변수를 지정할 수 있습니다.The Connection Pooling tab allows you to specify connection pooling parameters for each ODBC driver installed. 특정 ODBC 드라이버에 대해 연결 풀링이 변경되면 해당 ODBC 드라이버를 사용하는 모든 응용 프로그램에 영향을 줍니다.Note that connection pooling changes for a specific ODBC driver affect all applications that use that ODBC driver.

OracleClient에 대한 연결 풀링Connection Pooling for OracleClient

.NET Framework Data Provider for Oracle에서는 ADO.NET 클라이언트 응용 프로그램에 대한 연결 풀링을 자동으로 제공합니다.The .NET Framework Data Provider for Oracle provides connection pooling automatically for your ADO.NET client application. 또한 여러 개의 연결 풀링 한정자를 지정하여 연결 풀링 동작을 제어할 수 있습니다(이 항목 뒷부분의 "연결 문자열 키워드를 사용하여 연결 풀링 제어" 참조).You can also supply several connection string modifiers to control connection pooling behavior (see "Controlling Connection Pooling with Connection String Keywords," later in this topic).

풀 만들기 및 할당Pool Creation and Assignment

연결이 열리면 연결에서 풀과 연결 문자열을 연결하는 정확한 일치 알고리즘에 따라 연결 풀이 만들어집니다.When a connection is opened, a connection pool is created based on an exact matching algorithm that associates the pool with the connection string in the connection. 각 연결 풀은 고유한 연결 문자열과 연결됩니다.Each connection pool is associated with a distinct connection string. 새 연결이 열릴 때 연결 문자열이 기존 풀과 정확히 일치하지 않으면 새 풀이 만들어집니다.When a new connection is opened, if the connection string is not an exact match to an existing pool, a new pool is created.

만들어진 연결 풀은 활성 프로세스가 종료될 때까지 제거되지 않습니다.Once created, connection pools are not destroyed until the active process ends. 비활성 또는 빈 풀을 유지 관리하는 데에는 매우 적은 시스템 리소스만 사용됩니다.Maintaining inactive or empty pools uses very few system resources.

연결 추가Connection Addition

각각의 고유 연결 문자열에 대해 연결 풀이 만들어집니다.A connection pool is created for each unique connection string. 풀이 만들어지면 최소 풀 크기 요구 사항이 충족되도록 여러 개의 연결 개체가 만들어져 풀에 추가됩니다.When a pool is created, multiple connection objects are created and added to the pool so that the minimum pool size requirement is satisfied. 연결은 최대 풀 크기 이하로 필요한 만큼 풀에 추가됩니다.Connections are added to the pool as needed, up to the maximum pool size.

OracleConnection 개체가 요청될 때 사용 가능한 연결이 있으면 풀에서 해당 개체를 가져올 수 있습니다.When an OracleConnection object is requested, it is obtained from the pool if a usable connection is available. 연결을 사용하려면 연결이 현재 사용되고 있지 않고, 일치하는 트랜잭션 컨텍스트가 있거나 트랜잭션 컨텍스트와 연결되어 있지 않아야 하며, 서버에 대한 올바른 링크가 있어야 합니다.To be usable, the connection must currently be unused, have a matching transaction context or not be associated with any transaction context, and have a valid link to the server.

최대 풀 크기에 도달했는데 사용 가능한 연결이 없으면 요청이 대기됩니다.If the maximum pool size has been reached and no usable connection is available, the request is queued. 연결 풀러는 연결이 다시 풀로 회수될 때 연결을 다시 할당하여 이러한 요청을 충족합니다.The connection pooler satisfies these requests by reallocating connections as they are released back into the pool. 연결이 닫히거나 삭제되면 다시 풀로 회수됩니다.Connections are released back into the pool when they are closed or disposed.

연결 제거Connection Removal

연결이 오랫동안 유휴 상태였거나 풀러에서 서버와 연결하기 어렵다는 것을 감지하면 연결 풀러는 풀에서 연결을 제거합니다.The connection pooler removes a connection from the pool after it has been idle for an extended period of time, or if the pooler detects that the connection with the server has been severed. 이러한 연결은 서버와 통신하려는 시도가 있어야만 감지할 수 있습니다.Note that this can be detected only after attempting to communicate with the server. 서버에 더 이상 연결되지 않는 연결이 있으면 그 연결은 잘못된 연결로 표시됩니다.If a connection is found that is no longer connected to the server, it is marked as invalid. 연결 풀러는 정기적으로 연결 풀을 검색하여 풀로 회수되었거나 잘못된 것으로 표시된 개체를 찾습니다.The connection pooler periodically scans connection pools looking for objects that have been released to the pool and are marked as invalid. 그러면 이러한 연결은 영구적으로 제거됩니다.These connections are then permanently removed.

네트워크에 존재하지 않는 서버에 대한 연결이 있는 경우 연결 풀러에서 이 연결을 검색하지 못하고 잘못된 연결로 표시하지 못해도 풀에서 선택할 수는 있습니다.If a connection exists to a server that has disappeared, this connection can be drawn from the pool if the connection pooler has not detected the severed connection and marked it as invalid. 이 경우 예외가 발생합니다.When this occurs, an exception is generated. 그러나 연결을 풀로 회수하려면 계속해서 연결을 닫아야 합니다.However, you must still close the connection in order to release it back into the pool.

클래스의 Close 메서드에 있는 Dispose, Connection 또는 다른 관리 개체에 DataReader 또는 Finalize를 호출해서는 안 됩니다.Do not call Close or Dispose on a Connection, a DataReader, or any other managed object in the Finalize method of your class. 종료자에서는 클래스에 직접 속한 관리되지 않는 리소스만 해제합니다.In a finalizer, only release unmanaged resources that your class owns directly. 클래스에 관리되지 않는 리소스가 없는 경우 클래스 정의에 Finalize 메서드를 포함하지 마세요.If your class does not own any unmanaged resources, do not include a Finalize method in your class definition. 자세한 내용은 참조 가비지 수집합니다.For more information, see Garbage Collection.

트랜잭션 지원Transaction Support

연결은 트랜잭션 컨텍스트에 따라 풀에서 선택되어 할당됩니다.Connections are drawn from the pool and assigned based on transaction context. 요청하는 스레드의 컨텍스트와 할당된 연결의 컨텍스트는 반드시 일치해야 합니다.The context of the requesting thread and the assigned connection must match. 따라서 각 연결 풀은 실제로 다음과 같이 구분 연결 된 및로 연결 된 트랜잭션 컨텍스트가 없는 N 각각 특정 트랜잭션 컨텍스트가 포함 된 하위 분류 단위로 합니다.Therefore, each connection pool is actually subdivided into connections with no transaction context associated with them, and into N subdivisions that each contain connections with a particular transaction context.

연결이 닫힐 때는 풀로 다시 회수되고 트랜잭션 컨텍스트에 따라 적절한 분할로 회수됩니다.When a connection is closed, it is released back into the pool and into the appropriate subdivision based on its transaction context. 따라서 분산 트랜잭션이 여전히 보류 중이더라도 오류를 생성하지 않고 연결을 닫을 수 있습니다.Therefore, you can close the connection without generating an error, even though a distributed transaction is still pending. 이렇게 하여 분산 트랜잭션을 나중에 커밋하거나 취소할 수 있습니다.This allows you to commit or abort the distributed transaction at a later time.

연결 문자열 키워드를 사용하여 연결 풀링 제어Controlling Connection Pooling with Connection String Keywords

ConnectionString 개체의 OracleConnection 속성에서는 연결 문자열 키/값 쌍을 사용하여 연결 풀링 논리의 동작을 조정할 수 있습니다.The ConnectionString property of the OracleConnection object supports connection string key/value pairs that can be used to adjust the behavior of the connection pooling logic.

다음 표에서는 연결 풀링 동작을 조정하는 데 사용할 수 있는 ConnectionString 값을 설명합니다.The following table describes the ConnectionString values you can use to adjust connection pooling behavior.

이름Name 기본Default 설명Description
Connection Lifetime 00 연결이 풀로 반환되면 연결을 만든 시간을 현재 시간과 비교하여 이 시간 간격(초)이 Connection Lifetime에서 지정한 값을 초과하면 연결이 제거됩니다.When a connection is returned to the pool, its creation time is compared with the current time, and the connection is destroyed if that time span (in seconds) exceeds the value specified by Connection Lifetime. 이는 클러스터링된 구성에서 실행 중인 서버와 방금 온라인 상태가 된 서버 사이에 로드 균형 조정을 강제로 조정하는 데 유용합니다.This is useful in clustered configurations to force load balancing between a running server and a server just brought online.

값 0은 풀링된 연결이 최대 시간 제한을 갖도록 합니다.A value of zero (0) will cause pooled connections to have the maximum time-out.
Enlist 'true''true' true이면 풀러는 트랜잭션 컨텍스트가 존재하는 경우 해당 연결을 만들기 스레드의 현재 트랜잭션 컨텍스트에 자동으로 인리스트먼트합니다.When true, the pooler automatically enlists the connection in the current transaction context of the creation thread if a transaction context exists.
Max Pool Size 100100 풀에 허용되는 최대 연결 수입니다.The maximum number of connections allowed in the pool.
Min Pool Size 00 풀에서 유지되는 최소 연결 수입니다.The minimum number of connections maintained in the pool.
Pooling 'true''true' true이면 연결이 적절한 풀에서 선택되거나 필요한 경우 연결이 만들어져 적절한 풀에 추가됩니다.When true, the connection is drawn from the appropriate pool, or if necessary, created and added to the appropriate pool.

참고 항목See Also

연결 풀링Connection Pooling
성능 카운터Performance Counters
ADO.NET 관리되는 공급자 및 데이터 집합 개발자 센터ADO.NET Managed Providers and DataSet Developer Center