기술 정보
home
채널 소개
home

TAC 환경에서 인터커넥트 부하 발생 시 RED ZONE 에러 및 DB 다운

문서 유형
장애 해결
분야
패치/업그레이드
키워드
ACSD
CMPT
MESSAGE
REDZONE
TAC
적용 제품 버전
6FS06
6FS07
6FS07PS
7FS01
7FS02
1 more property

현상

INC REDZONE CHECK ERROR. 발생 후, Internal Error with condition: 'CINUSE(chunk)' (1 args) (shp_alloc.c:1131:shp_chunk_free) 오류가 이어서 발생하였습니다.
1. REDZONE 에러 발생
[74] *** 2025/01/14 16:57:05.221 *** [74] callstack dump from tbsvr_ACSD for [CMPT023, 74, 56698/14617] [74] SEE DUMP tbsvr.callstack.14617 (lwpid 56698) BY PSTACK INC REDZONE CHECK ERROR. REDZONE: 0000: 0D 1C EB 8F 0D C2 84 70 ..돮„p ---------------------------------------------------------------------- SHP Chunk Dump ---------------------------------------------------------------------- Chunk Struct Dump 0x9A7BC010 size: 0 cinuse: 0 pinuse: 0 footer: 0 prev-chunk size: 0 type: 0 alloc_idx: 0 recr: 0 ---------------------------------------------------------------------- ---------------------------------------------------------------------- Dbginfo Struct Dump 0x9A7BC020 mem ptr: 0x9A7BC040 mem size: -1431655766 loc: :-1073741823 ---------------------------------------------------------------------- ---------------------------------------------------------------------- Chunk Mem Hex Dump 0x9A7BC010 size 8 0000: 00 00 00 00 00 00 00 00 ........ ---------------------------------------------------------------------- Previous Chunk Dump
SQL
복사
2. Internal Error 발생
[74] Internal Error with condition: 'CINUSE(chunk)' (1 args) (shp_alloc.c:1131:shp_chunk_free) (pid=14617, sessid=74, tid=74) chunk->head = 0 = 0 = 0x0 [74] client : ip [] process [] logon time : [] [74] prev sql : "NULL" [74] current sql : "NULL" [74] *** 2025/01/14 17:01:57.260 *** [74] callstack dump from tbsvr_ACSD for [CMPT023, 74, 56698/14617] [74] SEE DUMP tbsvr.callstack.14617 (lwpid 56698) BY PSTACK Waiting for pstack process(1337) has timed out. kill_child=1 Waiting for pstack process(1337) has timed out. kill_child=1
SQL
복사
3. 위 에러들로 인해 중요 프로세스 다운으로 DB 다운
================================ Thread #74 (Session #74): tb_thread_exit: (signo:0, sigtype:15) [39] 2025/01/14 17:07:01.476 Internal Error with condition '!"Background thread exited abnormally!"' (tbsvr_cthr.c:3054) (pid=14617, sessid=39, tid=39, os_thr_id=56649) [39] client : ip [] process [] logon time : [] [39] prev sql : "NULL" [39] current sql : "NULL" [39] *** 2025/01/14 17:07:01.477 *** [39] callstack dump from tbsvr_ACSD for [ACSD, 39, 56649/14617] [39] SEE DUMP tbsvr.callstack.14617 (lwpid 56649) BY PSTACK ================================ [39] ***** FATAL ASSERT (PID = 14617, TID = 39, SESSID = 39): ***** tbsvr_tracedump.c:280 (tb_svr_assert_cmd): Assertion 'false' failed. ***** Program: tbsvr -startup -t NORMAL -SVR_SID kcip_idb1 [0] ***** FATAL ASSERT (PID = 14537, TID = 0, SESSID = 0): ***** tbsvr_signal.c:1975 (sig_fatal_assert_handler): Assertion 'false' failed. ***** Program: tbsvr -startup -t NORMAL -SVR_SID kcip_idb1
SQL
복사

원인

노드 간 메시지를 처리하는 스레드인 CMPT(Cluster Message Processor Thread)는 메시지를 처리할 수 없는 상황에서, 다른 스레드들에게 해당 메시지를 대신 기다려 달라고 전달합니다.
이때 메시지를 전달하는 과정은 다음 두 단계로 진행됩니다.
1.
메시지를 다른 스레드에 전달
2.
메시지가 할당된 메모리가 반환되지 않도록 reference count를 증가
위 과정 중 reference count를 증가시키기 전에 메시지를 전달받은 다른 스레드들이 먼저 작업을 마치고, 기존 CMPT는 다른 작업으로 바쁜 상황에서 새롭게 배정된 CMPT가 해당 메시지 처리를 먼저 끝내고 반환하는 경우가 발생할 수 있습니다.
이후, 기존 CMPT도 남은 작업을 계속 수행하다가 이미 반환된 메시지를 다시 반환하려 시도하게 되며, 이로 인해 이미 반환된 메시지를 중복 반환하려다 에러가 발생하게 됩니다.

해결

274230c 패치를 적용하여 해결합니다.
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
참고
아래 파라미터를 적용하여 우회할 수 있습니다.
_CR_ASYNC_SERVICE : 노드 간 메시지를 처리하는 중 접근하려는 block이 다른 세션에서 디스크 리드를 수행 중이라 대기해야 할 경우, 다른 스레드에게 해당 대기를 대신 요청할지를 결정하는 파라미터입니다.
_BUF_REQ_ASYNC_SERVICE : 노드 간 메시지를 처리하는 중 캐시 내에 free block 확보가 필요할 수 있는데, 이때 다른 스레드에게 해당 작업을 대신하도록 요청할지를 결정하는 파라미터입니다.