Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel3

 

 

 

버전

...

ALTIBASE HDB 5 이상

 

 

 

 

현상

...

클라이언트에서 알티베이스 서버로 신규 접속 시도 시 아래와 같은 에러 메시지로 실패할 때, 

...

Code Block
languagebash
ERR-41059(errno=16) Task pool overflow. Check properties.
Dispatcher failed callback






원인

...

알티베이스 서버에 생성된 task 수가 MAX_CLIENT 에 도달했을 때 발생합니다.

...

MAX_CLIENT 는 동시에 접속할 수 있는 최대 세션 수를 의미하기도 하는데, task 는 결국 세션과 대응되기 때문에 같은 프로퍼티에 영향을 받습니다.

발생할 수 있는 원인은 다음과 같습니다.

 

신규 접속 수가 증가한 경우

...

신규 접속 수가 증가하여 task 의 수가 MAX_CLIENT 를 초과하는 경우 발생할 수 있습니다.

 

 

서비스 쓰레드가 모두 EXECUTE 상태에서 신규 접속이 발생한 경우

...

모든 서비스 쓰레드가 EXECUTE 상태에서 신규 접속이 실패한 경우 해당 연결은 알티베이스 서버 내에서 task 형태로 남아 있습니다. 따라서 이런 이유로 접속이 실패하더라도 신규 접속이 발생한 만큼 task 수가 증가하게 됩니다.

...

Code Block
languagebash
$ is -silent
[ERR-91015 : Communication failure.]

 

 

트랜잭션 수가 TRANSACTION_TABLE_SIZE 에 도달한 상태에서 신규 접속이 발생한 경우

...

동시 수행 중인 트랜잭션의 수가 TRANSACTION_TABLE_SIZE 에 도달한 상태에서 신규 접속이 실패한 경우 해당 연결은 알티베이스 서버 내에서 task 형태로 남아 있습니다. 따라서 이런 이유로 접속이 실패하더라도 신규 접속이 발생한 만큼 task 수가 증가하게 됩니다.

...

Code Block
languagebash
TRANSACTION_TABLE_SIZE is full !!
 Current TRANSACTION_TABLE_SIZE is 1024
 Please check TRANSACTION_TABLE_SIZE

 

 

확인 방법

...

체크 리스트

Task pool overflow 의 원인을 찾기 위해서는 아래 항목들을 확인해야 합니다.

...

  • $ALTIBASE_HOME/trc/altibase_boot.log
    트랜잭션 수가 TRANSACTION_TABLE_SIZE 을 초과한 경우 TRANSACTION_TABLE_SIZE is full 이라는 메시지가 남습니다.

 

MAX_CLIENT 설정 값 확인 방법

Task pool overflow 은 task 의 수가 MAX_CLIENT 프로퍼티의 설정 값을 초과할 때 발생하므로 먼저 이 프로퍼티의 설정 값을 확인합니다.

  • iSQL 접속이 가능한 경우

    Code Block
    titleiSQL접속이 가능한 경우
    languagesql
    iSQL> set linesize 1024;
    iSQL> set colsize 30;
    iSQL> SELECT NAME, VALUE1 FROM V$PROPERTY WHERE NAME = 'MAX_CLIENT';
    NAME                            VALUE1
    -------------------------------------------------------------------
    MAX_CLIENT                      1000
    1 row selected
    
  • iSQL 접속이 불가능한 경우

    Code Block
    titleiSQL접속이 불가능한 경우
    languagebash
    $ grep MAX_CLIENT $ALTIBASE_HOME/conf/altibase.properties
    

 

세션 수 확인 방법

  • iSQL 접속이 가능한 경우
    iSQL 접속이 가능하다면 성능 뷰를 통해 세션 수를 확인할 수 있으며 이를 통해 Task pool overflow 의 원인을 어느 정도 유추할 수 있습니다.
    현재 세션 수와 MAX_CLIENT 값을 비교하여 값이 같은 경우 세션 증가가 원인입니다.
    현재 세션 수가 MAX_CLIENT 보다 작다면 세션 증가가 아닌 다른 두 가지가 원인일 수 있습니다.

    Code Block
    title세션 수 확인 방법
    languagesql
    $ export ISQL_CONNECTION = IPC
    $ is -silent -sysdba
    iSQL> SELECT COUNT(*) FROM V$SESSION;                                    -- 현재 세션 수 확인
    COUNT
    -----------------------
    1000
    1 row selected.
    

     

  • iSQL 접속이 불가능한 경우
    iSQL 접속이 어려운 경우 OS 상의 정보로 세션 수를 확인해야 합니다.
    클라이언트의 접속 방법에 따라 아래 두 가지 방법으로 확인할 수 있습니다.
    TCP, IPC 두 가지 방법으로 접속하는 경우 수행 결과를 모두 더하여 MAX_CLIENT 와 비교하여 세션 증가가 원인인 지 다른 부분이 원인인 지 판단할 수 있습니다.

    Code Block
    title클라이언트가 TCP 로 접속하는 경우
    languagebash
    $ netstat -an | grep 20300 | grep ESTA | wc -l                   # 결과를 MAX_CLIENT 와 비교
    
    또는
    $ lsof -p pid                                                    # 알티베이스 서버가 오픈하고 있는 소켓 파일 수를 MAX_CLIENT 와 비교
    Code Block
    title클라이언트가 IPC 로 접속하는 경우
    languagebash
    # Linux
    $ ipcs -m | grep -i -e nattch -e eheejung
    key        shmid      owner      perms      bytes      nattch     status
    0x00003ed0 458761     altibase   666        131104     1
    
    # HP-UX, AIX
    $ ipcs -ma | grep -e NATTCH -e eheejung
    T         ID     KEY        MODE        OWNER     GROUP   CREATOR    CGROUP NATTCH      SEGSZ  CPID  LPID   ATIME    DTIME    CTIME
    m    7438362 0x00003353 --rw-rw-rw-  altibase     users  altibase     users      1     655480 13139 12411 17:57:48 no-entry 10:22:18
    
    # SunOS
    $ ipcs -ma | /usr/xpg4/bin/grep -e NATTCH -e beadskin
    T         ID      KEY        MODE        OWNER    GROUP  CREATOR   CGROUP NATTCH      SEGSZ  CPID  LPID   ATIME    DTIME    CTIME
    m          9   0x3863     --rw-rw-rw- altibase    other altibase    other      1     983576 14435 14435 17:31:35 no-entry 17:31:35


     

task 수 확인 방법

  • iSQL 접속이 가능한 경우
    세션 수가 MAX_CLIENT 보 다 작다면 다른 원인을 살펴봐야 합니다.
    아래 명령어로 task 의 수를 확인하고 task 수와 MAX_CLIENT 를 비교합니다. logon current 의 값은 생성된 task 의 수를 의미하며 세션 수 보다 클 수 있습니다.

    Code Block
    title생선된 task 수 확인 방법
    languagesql
    iSQL> SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME = 'logon current';

     세션 수가 MAX_CLIENT 보다 작고 logon current 의 값이 MAX_CLIENT 와 같거나 큰 경우 아래 두 가지가 원인일 수 있습니다

    - 서비스 쓰레드가 모두 EXECUTE 상태에서 신규 접속이 발생하여 task 가 증가한 경우
    - 트랜잭션 수가 TRANSACTION_TABLE_SIZE 에 도달한 상태에서 신규 접속이 발생하여 task 가 증가한 경우


  • iSQL 접속이 불가능한 경우
    생성된 task 수는 v$sysstat 의 logon current 값으로 확인할 수 있습니다. 하지만 Task pool overflow 이 발생한 상황이라면 새로운 연결이 맺어지지 않기 때문에 위 문장을 수행하지 못할 수 있습니다.
    이 때는 lsof 명령으로 알티베이스 서버 프로세스의 오픈 파일 수로 task 수를 확인해야 합니다.

    Code Block
    titleLinux 에서 lsof 수행 예
    languagebash
    $ lsof -p PID | grep -e IPv4 -e sock | grep -v LISTEN
    altibase 7494 eheejung   38u  IPv4           40725257                 TCP localhost:21109->localhost:36248 (ESTABLISHED)     # 연결이 정상적으로 맺어진 세션, task 에 포함됨.
    altibase 7494 eheejung   39u  IPv4           40725262                 TCP localhost:21109->localhost:36249 (ESTABLISHED)
    altibase 7494 eheejung   40u  sock                0,4            40726084 can't identify protocol                            
    altibase 7494 eheejung   41u  sock                0,4            40726576 can't identify protocol                            
    altibase 7494 eheejung   42u  sock                0,4            40726604 can't identify protocol                            
    # can't identify protocol 항목 개수 = 모든 서비스 쓰레드가 EXECUTE 상태이거나, TRANSACTION_TABLE_SIZE 초과로 연결이 실패한 경우 남아있는 task
    

    Solaris 의 경우 lsof 대신 pfiles 명령어를 이용해도 됩니다.

    Code Block
    titleSunOS 에서 pfiles 수행 예
    languagebash
    $ pfiles PID | grep sock
    
            sockname: AF_INET 0.0.0.0  port: 21109                   # LISTEN
            sockname: AF_INET 127.0.0.1  port: 21109                 # 연결이 정상적으로 맺어진 세션, 이것도 task 에 포함됨.
            sockname: AF_INET 127.0.0.1  port: 21109
            sockname: AF_INET 127.0.0.1  port: 21109
            sockname: AF_INET 127.0.0.1  port: 21109
            sockname: AF_INET 0.0.0.0  port: 0                       # 모든 서비스 쓰레드가 EXECUTE 상태이거나 TRANSACTION_TABLE_SIZE 초과로 연결이 실패한 경우, 남아있는 task.
            sockname: AF_INET 0.0.0.0  port: 0
            sockname: AF_INET 0.0.0.0  port: 0
    

     



 

 

 

조치

...

MAX_CLIENT 프로퍼티 변경

...

실제 동시 접속 세션이 많아졌을 경우 MAX_CLIENT 를 변경해야 합니다.

...

변경 방법에 관한 설명은 동시 접속 세션 수(MAX_CLIENT) 증가 시 고려사항 페이지를 참고하시기 바랍니다.

 

 

어플리케이션 검토

...

어플리케이션이 아래와 같은 특성을 가진 경우 그 필요성을 다시 한 번 확인 작업이 필요합니다.

...