문서유형ㅣ장애해결
분야ㅣ관리/환경설정
적용제품버전ㅣ6 7FS02
문서번호ㅣTADTS076
현상
AIX 환경에서 nofiles가 unlimited로 설정 되어 있고, datafile을 1024개 이상으로 사용하는 경우 tbepa Process의 FD(file descriptor)가 필요 이상으로 사용하는 현상입니다.
$ ulimit -n unlimited $ ps -ef | grep tbepa tibero 35260120 1 0 14:46:06 - 0:00 tbepa 2457 1 180 $ procfiles -c 35260120 35260120 : tbepa 2457 1 180 Current rlimit: 9223372036854775807 file descriptors --------------------------------------------------------------------------------------------------------------- FD TYPE MODE DEV/RDEV UID GID OPMOD INODE --------------------------------------------------------------------------------------------------------------- 0 c --------- 10, 4( 2, 2) tibero dba R-W 412 1 c --------- 10, 4( 2, 2) tibero dba R-W 412 2 c --------- 10, 4( 2, 2) tibero dba R-W 412 1024 - rw------- 10,14 tibero dba R-W 2182816 1025 - rw------- 10,14 tibero dba R-W 2183174 1026 - rw------- 10,14 tibero dba R-W ...중략 2453 - rw------- 10,14 tibero dba R-W|DS 2183529 2454 - rw------- 10,14 tibero dba R-W|DS 2183530 2455 - rw------- 10,14 tibero dba R-W|DS 2183531 2457 s --------- 268435455,-1 tibero dba R-W * tbepa Process에서 2547개의 FD를 사용
tbepa Process의 FD 과 사용으로 인한 점유는 다른 Process에서도 사용되어야 할 FD 자원을 부족하게 함으로써 Tibero Instance의 동작을 불안전하게 하고, 지속 될 경우 Tibero Instance가 down 됩니다.
--sys.log
04/30 09:29:04.9300 0-2806 tc_fdpoo:1203 open (stat) failed (errno=23, File table overflow) (flag=020000002) (filename=/tbdata/syssub003.dtf)
04/30 09:29:04.9300 0-2806 tbsvr_er:73 THROW. ec=ERROR_CACHE_FILE_OPEN_FAILED(-1003) [ Unable to open file /tbdata/syssub003.dtf. ] (csr_id:19241) [tc_fdpool.c:1521:fdpool_get_internal]
04/30 09:29:04.9300 0-2806 tc_fdpoo:638 fdelem alloc 0a00000e1c4454d0
04/30 09:29:04.9300 0-2806 tc_fdpoo:1203 open (stat) failed (errno=23, File table overflow) (flag=020000002) (filename=/tbdata/system001.dtf)
04/30 09:29:04.9300 0-2806 tbsvr_er:73 THROW. ec=ERROR_CACHE_FILE_OPEN_FAILED(-1003) [ Unable to open file /tbdata/system001.dtf. ] (csr_id:19241) [tc_fdpool.c:1521:fdpool_get_internal]
04/30 09:29:04.9300 0-2806 tc_fdpoo:638 fdelem alloc 0a00000e1c445540
...
04/30 09:31:28.4035 0-0793 tb_asser:47 Internal Error with condition 'tsn_read(low_cache->tsn) >= tsn_read(org->low_cache.tsn)' (2 args) (cf_ckpt.c:108:cf_put_ckpt_progress) (pid=8585652, sessid=793, tid=793)
원인
SQL> select userenv('TID'), pid from v$session ;
USERENV('TID') | PID
---------------------------------------|----------
180 | 64292528
1 row selected.
$ ps -ef | grep 64292528
tibero 64292528 55642350 0 Oct 29 - 0:29 tbsvr_FGWP000 FGWP000 -t NORMAL -SVR_SID test
$ ps -ef | grep tbepa | grep 180
tibero 52101678 1 0 15:20:21 - 0:00 tbepa 2456 1 180
* tbepa Process는 마지막 인자로 알 수 있는 SID 180번 Session에 의해 호출 되었고,
호출 과정에서 SID 180번이 사용중인 PID 64292528의 tbsvr_FGWP000 Process에서 fork 되어 생성 되었습니다.참고fork란 process가 자신을 복제하여 새로운 process를 생성하는 system call 방법 입니다.
Working Process를 fork하는 과정에서 Working Process가 사용 중인 FD 정보도 복제 한 뒤 필요 없는 FD 정보를 삭제하고 FD 자원을 반환 합니다.
이때, Working Process가 FD를 1024개 이상으로 사용 중이라면 1024개의 FD만 삭제하고 나머지 FD는 삭제하지 않아 필요 없는 FD를 점유하는 현상이 발생 됩니다.
Working Process의 FD 수는 Tibero Instance에서 사용 중인 file의 개수와 비례 하며 대체적으로 datafile을 1024개 이상으로 사용하는 경우 현상이 발생 됩니다.
fork 방식으로 Process를 생성하는 C Gateway Process(gw4orcl, DB Link시 사용)에서도 현상이 발생 됩니다.
해결
fork 후 tbepa Process의 FD를 삭제 시 1024개 이상도 삭제 되도록 수정한 패치를 적용 합니다. (적용패치: 342022)
주의티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
참고nofiles를 unlimited가 아닌 특정 값으로 지정하고 tibero를 재기동 하면 현상이 발생 되지 않습니다.$ ulimit -n 65535 * 일시적 변경 방법 # vi /etc/security/limits tibero: nofiles = 65534 ... * 영구적 변경 방법