Versions Compared

Key

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

...

  • 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                            #
    모든 서비스 쓰레드가 EXECUTE 상태이거나
    altibase 7494 eheejung   41u  sock                0,4            40726576 can't identify protocol                            #
    TRANSACTION_TABLE_SIZE 초과로 연결이 실패한 경우
    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
    

     

...