버전
ALTIBASE HDB 5 이상
현상
클라이언트에서 알티베이스 서버로 신규 접속 시도 시 아래와 같은 에러 메시지로 실패할 때,
알티베이스 서버의 altibase_boot.log 에서 아래의 에러 메시지를 볼 수 있습니다.
원인
알티베이스 서버에 생성된 task 수가 MAX_CLIENT 에 도달했을 때 발생합니다.
task 는 알티베이스 서버에 새로운 연결이 맺어질 때 생성되는 객체로, 동시에 생성할 수 있는 최대 수가 알티베이스 서버 프로퍼티 MAX_CLIENT 값에 영향을 받습니다.
현재 생성된 task 의 수가 MAX_CLIENT 에 도달하여 새로운 task 객체를 생성할 수 없을 때 Task pool overflow 라는 메시지가 나타납니다.
MAX_CLIENT 는 동시에 접속할 수 있는 최대 세션 수를 의미하기도 하는데, task 는 결국 세션과 대응되기 때문에 같은 프로퍼티에 영향을 받습니다.
발생할 수 있는 원인은 다음과 같습니다.
신규 접속 수가 증가한 경우
신규 접속 수가 증가하여 task 의 수가 MAX_CLIENT 를 초과하는 경우 발생할 수 있습니다.
서비스 쓰레드가 모두 EXECUTE 상태에서 신규 접속이 발생한 경우
모든 서비스 쓰레드가 EXECUTE 상태에서 신규 접속이 실패한 경우 해당 연결은 알티베이스 서버 내에서 task 형태로 남아 있습니다. 따라서 이런 이유로 접속이 실패하더라도 신규 접속이 발생한 만큼 task 수가 증가하게 됩니다.
아래와 같이 접속이 실패하다가
task 의 수가 MAX_CLIENT 를 초과하게 되면 접속 실패 에러 메시지가 아래와 같이 바뀝니다.
트랜잭션 수가 TRANSACTION_TABLE_SIZE 에 도달한 상태에서 신규 접속이 발생한 경우
동시 수행 중인 트랜잭션의 수가 TRANSACTION_TABLE_SIZE 에 도달한 상태에서 신규 접속이 실패한 경우 해당 연결은 알티베이스 서버 내에서 task 형태로 남아 있습니다. 따라서 이런 이유로 접속이 실패하더라도 신규 접속이 발생한 만큼 task 수가 증가하게 됩니다.
아래와 같이 접속이 실패하다가
task 의 수가 MAX_CLIENT 를 초과하게 되면 접속 실패 에러 메시지가 아래와 같이 바뀝니다.
이 경우 altibase_boot.log 에서는 아래와 같은 메시지가 발생합니다.
확인 방법
체크 리스트
Task pool overflow 의 원인을 찾기 위해서는 아래 항목들을 확인해야 합니다.
- MAX_CLIENT 프로퍼티 설정 값
- 알티베이스 서버에 접속된 세션 수
알티베이스 서버에 접속된 세션 수가 MAX_CLIENT 와 동일하면 세션 증가가 원인이고 MAX_CLIENT 보다 작다면 task 수를 확인합니다.
- 알티베이스 서버에서 생성된 task 수
세션 수가 MAX_CLIENT 보다 작고 task 수가 MAX_CLIENT 와 같거나 크다면 아래 원인을 의심해 볼 수 있습니다.
1. 서비스 쓰레드가 모두 EXECUTE 상태에서 신규 접속이 발생하여 task 가 증가한 경우
2. 트랜잭션 수가 TRANSACTION_TABLE_SIZE 에 도달한 상태에서 신규 접속이 발생하여 task 가 증가한 경우
- $ALTIBASE_HOME/trc/altibase_boot.log
트랜잭션 수가 TRANSACTION_TABLE_SIZE 을 초과한 경우 TRANSACTION_TABLE_SIZE is full 이라는 메시지가 남습니다.
MAX_CLIENT 설정 값 확인 방법
Task pool overflow 은 task 의 수가 MAX_CLIENT 프로퍼티의 설정 값을 초과할 때 발생하므로 먼저 이 프로퍼티의 설정 값을 확인합니다.
iSQL 접속이 가능한 경우
iSQL접속이 가능한 경우iSQL 접속이 불가능한 경우
iSQL접속이 불가능한 경우
세션 수 확인 방법
iSQL 접속이 가능한 경우
iSQL 접속이 가능하다면 성능 뷰를 통해 세션 수를 확인할 수 있으며 이를 통해 Task pool overflow 의 원인을 어느 정도 유추할 수 있습니다.
현재 세션 수와 MAX_CLIENT 값을 비교하여 값이 같은 경우 세션 증가가 원인입니다.
현재 세션 수가 MAX_CLIENT 보다 작다면 세션 증가가 아닌 다른 두 가지가 원인일 수 있습니다.세션 수 확인 방법iSQL 접속이 불가능한 경우
iSQL 접속이 어려운 경우 OS 상의 정보로 세션 수를 확인해야 합니다.
클라이언트의 접속 방법에 따라 아래 두 가지 방법으로 확인할 수 있습니다.
TCP, IPC 두 가지 방법으로 접속하는 경우 수행 결과를 모두 더하여 MAX_CLIENT 와 비교하여 세션 증가가 원인인 지 다른 부분이 원인인 지 판단할 수 있습니다.클라이언트가 TCP 로 접속하는 경우클라이언트가 IPC 로 접속하는 경우
task 수 확인 방법
iSQL 접속이 가능한 경우
세션 수가 MAX_CLIENT 보 다 작다면 다른 원인을 살펴봐야 합니다.
아래 명령어로 task 의 수를 확인하고 task 수와 MAX_CLIENT 를 비교합니다. logon current 의 값은 생성된 task 의 수를 의미하며 세션 수 보다 클 수 있습니다.생선된 task 수 확인 방법세션 수가 MAX_CLIENT 보다 작고 logon current 의 값이 MAX_CLIENT 와 같거나 큰 경우 아래 두 가지가 원인일 수 있습니다
- 서비스 쓰레드가 모두 EXECUTE 상태에서 신규 접속이 발생하여 task 가 증가한 경우
- 트랜잭션 수가 TRANSACTION_TABLE_SIZE 에 도달한 상태에서 신규 접속이 발생하여 task 가 증가한 경우iSQL 접속이 불가능한 경우
생성된 task 수는 v$sysstat 의 logon current 값으로 확인할 수 있습니다. 하지만 Task pool overflow 이 발생한 상황이라면 새로운 연결이 맺어지지 않기 때문에 위 문장을 수행하지 못할 수 있습니다.
이 때는 lsof 명령으로 알티베이스 서버 프로세스의 오픈 파일 수로 task 수를 확인해야 합니다.Linux 에서 lsof 수행 예Solaris 의 경우 lsof 대신 pfiles 명령어를 이용해도 됩니다.
SunOS 에서 pfiles 수행 예
조치
MAX_CLIENT 프로퍼티 변경
실제 동시 접속 세션이 많아졌을 경우 MAX_CLIENT 를 변경해야 합니다.
동시 접속 세션이 많아지면 동시에 수행하는 트랜잭션도 많아지고 Unix/Linux 시스템의 경우 open file 수가 증가하게 됩니다.
따라서 MAX_CLIENT 를 기존 값보다 크게 변경할 경우 다음의 값들을 같이 변경해야 합니다.
- TRANSACTION_TABLE_SIZE
- max open files
변경 방법에 관한 설명은 동시 접속 세션 수(MAX_CLIENT) 증가 시 고려사항 페이지를 참고하시기 바랍니다.
어플리케이션 검토
어플리케이션이 아래와 같은 특성을 가진 경우 그 필요성을 다시 한 번 확인 작업이 필요합니다.
서비스 특성 상 위와 같은 처리가 불가피한 경우가 아니라면 트랜잭션 완료 후 세션을 바로 종료하도록 변경하는 것을 검토해야 합니다.
- 계속 새로운 연결을 맺는 경우
- 더 이상 연결을 맺고 있을 필요가 없음에도 불필요하게 연결된 세션을 유지하는 경우