Oracle 세션과 연결 풀 간의 관계
먼저 설정에 대해 설명하겠습니다.
2GB RAM 시스템에서 실행되는 오라클 서버가 있습니다.DB 인스턴스의 init 매개 변수 "sessions"는 160으로 설정됩니다.
웹사이트 6.1에 애플리케이션을 배포했습니다.연결 풀 설정은 최소 50 및 최대 150입니다.
40명의 사용자에 대해 로드 테스트를 실행하면(동시, jMeter 사용) 모든 것이 정상적으로 진행됩니다.그러나 동시 사용자를 60명 이상으로 늘리면 Oracle은 세션이 부족하다는 예외를 던집니다.
애플리케이션에서 연결 누출 여부를 확인했지만 찾을 수 없었습니다.
그렇다면 40의 동시성이 이 설정에서 취할 수 있는 것이라는 뜻입니까?Oracle 세션/프로세스를 늘리는 것이 더 높은 동시성을 얻을 수 있는 유일한 방법입니까?
연결 풀의 DB 세션과 연결은 정확히 어떻게 관련되어 있습니까?연결은 세션을 초과할 수 없으므로 최대 연결 풀을 세션 이상으로 설정하는 것은 그다지 중요하지 않을 수 있습니다.그것이 맞습니까?
Metalink는 SESSIONS 파라미터에 대해 다음과 같은 조언을 제공합니다.
재귀 세션은 RDBMS의 정상적인 기능에 필수적인 부분입니다.이러한 세션이 필요한 모든 상황을 식별할 수는 없지만 일반적으로 사용자 시작 작업에서 데이터 사전 개체를 조작해야 하는 경우 재귀 세션이 생성될 수 있습니다.간단한 예를 들어 일반 사용자로 로그인한 상태에서 테이블을 만든다고 가정합니다.이는 SYS 사용자가 소유한 obj$, tab$ 등에 행을 삽입해야 합니다.일반 사용자는 이러한 개체에 삽입할 수 있는 권한이 없으므로 SYS로 로그인하는 재귀 세션이 생성됩니다.
솔루션:
SESS 매개 변수를 늘립니다.
재귀 세션의 경우 SESS 값의 50%를 유지하는 것이 좋습니다.따라서 예를 들어 30개의 클라이언트 세션이 열려 있을 것으로 예상되는 경우 SESS 매개 변수를 60으로 설정합니다.
웹사이트와 사용자 프로세스가 수행하는 작업에 따라 사용자가 보고 있는 내용을 부분적으로 설명할 수 있습니다.
내 v$session에는 30개의 항목이 포함되어 있으며, 그 중 4개는 사용자 이름을 가지고 있습니다(그 중 하나는 백그라운드 작업입니다).
백그라운드 프로세스(예: 일괄 작업)가 있는 경우 세션을 씹는 것일 수 있습니다.
그러나 단순히 메모리가 부족한 것일 수 있습니다. 50개의 세션으로 구성된 연결 풀에 대해 2GB가 약간 부족한 것 같습니다.Oracle 10g을 가정하면 RAM은 공유(SGA)와 프로세스(PGA)로 나뉩니다.1.5를 얻었다고 칩시다.SGA의 경우 GB이며, 모든 세션에 500MB가 남습니다.세션이 각각 10MB를 차지하면 50개 세션 정도로 제한됩니다.
실제로는 1.박스에서 다른 '도구'를 실행할 수 있으므로 Oracle에서 사용할 수 있는 2GB 용량이 충분하지 않습니다.
- SGA가 더 작거나 더 클 수 있습니다.
- 당신은 11g에 있고 오라클이 PGA와 SGA를 단일 풀 밖으로 할당하도록 허용할 수 있습니다.
- PGA_AGGRATE_TARGET(Oracle이 세션 수를 기준으로 PGA 설정을 추측하게 함)을 사용하거나 메모리 제한을 직접 설정할 수 있습니다.
- 당신은 기억력이 부족한 과정들을 가지고 있을 수 있습니다.
PS. 2GB는 Windows에 있다는 뜻입니까?
모든 연결이 동일한 사용자 계정을 사용합니까?이 경우 해당 사용자 계정에 대한 사용자별 세션 제한이 있는지 확인할 수 있습니다.
또한 40개 이상의 연결에 대한 라이센스가 있습니까?(파라미터 파일에 LICESS_MAX_SESSION이 설정되어 있는지 확인하십시오.)
세션 풀은 클라이언트 측에서 구동됩니다.데이터베이스가 허용하는 세션 수를 알 수 없거나 제어할 수 없습니다.
서버에서 허용되는 실제 연결 수를 결정하고 서버에서 허용하는 연결 수에 따라 세션 풀 번호를 설정해야 합니다.
연결 풀에서 허용된 모든 연결을 사용해서는 안 됩니다.이렇게 하면 다른 ID가 연결됩니다.USER_1을 사용하는 응용 프로그램이 있는 경우 허용된 연결 중 일부를 사용하도록 연결 풀을 설정하지만 충분한 연결을 남겨두어야 합니다.로그인하려면 DBA라고 합니다.
--
연결 풀이 최대화되기 전에 프로세스가 부족할 수 있습니다.
SQL> show parameter processes
NAME TYPE VALUE
--------------------------------------------------------------------------------
processes integer 40
이것은 허용되는 총 프로세스 수입니다. 이제 얼마나 많은 프로세스가 이미 사용되고 있는지 확인하십시오. 그 중 많은 프로세스가 백그라운드 프로세스입니다. 여러분은 전혀 생각하지 못했을 것입니다.
SQL> select count(*) from v$process;
언급URL : https://stackoverflow.com/questions/1039637/relation-between-oracle-session-and-connection-pool
'programing' 카테고리의 다른 글
날짜별 주문 처음부터 마지막 날짜까지 NULL 표시 (0) | 2023.07.13 |
---|---|
문서 지향 데이터베이스는 관계형 데이터베이스를 대체하기 위한 것입니까? (0) | 2023.07.13 |
$ 또는 $elemMatch의 문 (0) | 2023.07.13 |
SQL LIKE 문에서 변수 사용 (0) | 2023.07.13 |
Firebase 전화 인증 오류:토큰이 잘못되었습니다. nativeToJ.오류 (0) | 2023.07.13 |