현상
Parallel DPL(Direct Path Load) 작업이 진행되는 중 트랜잭션 롤백이 발생하면서,
Internal Error with condition '(cp->offset < l1blk->blkcnt)' 오류가 발생하는 현상이 발생했습니다.
sys.log 일부 발췌
[2025-02-13T11:49:43.439228] [FRM-217] [I] THROW. ec=ERROR_TX_CANT_ALLOC_EXT(-21004) [ No more extent available in tablespace 'TS_XXXX'. ] (csr_id:4294967295) [tx_ts.c:1513:ts_extend]
..
[2025-02-13T11:49:44.460000] [DPL-219] [I] Allocating DP sgmt: 1
[2025-02-13T11:49:44.460452] [DPL-220] [I] Allocating DP sgmt: 1
[2025-02-13T11:49:44.461300] [DPL-217] [I] Allocating DP sgmt: 1
[2025-02-13T11:49:44.576788] [DPL-219] [I] create dp temp sgmt: obj_id=41750, ts_id=8, shdrdba=22_00211017, extsize=16, lock_id=219.4375
[2025-02-13T11:49:44.578200] [DPL-217] [I] create dp temp sgmt: obj_id=41751, ts_id=8, shdrdba=37_00204649, extsize=16, lock_id=217.4377
..
[2025-02-13T13:28:43.592921] [TXR-102] [I] TX 0006.15.5444 recovery DONE
[2025-02-13T13:28:43.701249] [COM-133] [I] Bucket dump generated by condition 'cp->offset < l1blk->blkcnt'
[2025-02-13T13:28:43.701308] [COM-133] [I] Internal Error with condition '(cp->offset < l1blk->blkcnt)' (2 args) (tx_l1blk.c:184:redocp_tx_l1blk_set_bm_apply) (pid=489224, sessid=133, tid=133)
SQL
복사
tbsvr.out 파일 일부 발췌
[94] *** 2025/02/13 13:28:43.592 ***
[94] callstack dump from tbsvr_AGNT for [RSLV, 133, 489305/489224]
[133] Internal Error with condition: '(cp->offset < l1blk->blkcnt)' (2 args) (tx_l1blk.c:184:redocp_tx_l1blk_set_bm_apply) (pid=489224, sessid=133, tid=133)
(cp->offset) = 255 = 255 = 0xff
(l1blk->blkcnt) = 0 = 0 = 0x0
[133] client : ip [] process [TX RECOVERY SLAVE] logon time : [2025/02/13 13:28:43]
[133] prev sql : "NULL"
[133] current sql : "NULL"
pstack(/usr/bin/pstack) access failed. cannot dump
[94] *** 2025/02/13 13:28:43.701 ***
[94] callstack dump from tbsvr_AGNT for [RSLV, 133, 489305/489224]
================================
Thread #133 (Session #133): tb_thread_exit: (signo:0, sigtype:15)
[133] *** FATAL ASSERT INSIDE SIGNAL(0) HANDLER (PID=489224, TID=133, SESSID=133):
tbsvr_signal.c:652 (tb_thread_exit_internal): Assertion '0' failed.
[0] ***** FATAL ASSERT (PID = 488998, TID = 0, SESSID = 0):
***** tbsvr_signal.c:1951 (sig_fatal_assert_handler): Assertion 'false' failed.
***** Program: tbsvr -startup -t NORMAL -SVR_SID XXXX
SQL
복사
원인
Parallel DPL 수행 중 테이블스페이스 공간 부족으로 인해 트랜잭션 롤백이 발생하였습니다.
이 과정에서 wlock_dp_temp_sgmt(이하 wlock)가 먼저 해제되었고, 이후 Temp Segment 공간에 다른 블록이 덮어쓰여 정합성 오류가 발생한 것으로 확인됩니다.
해결
FS06_CS_253829a 패치를 적용하여 해결합니다.
•
FS06_CS_253829a : 테이블스페이스 Full로 인해 Extent 할당에 실패하는 상황에서, 트랜잭션 롤백을 먼저 수행한 후 wlock을 해제하도록 로직을 수정한 패치입니다.
패치가 적용된 바이너리(기 적용된 경우 포함)나 253829a 패치를 신규로 적용하는 경우, 273422a 패치도 함께 적용해야 합니다.
•
273422a : PDPL(Parallel Direct Path Load) 수행 중 WLOCK_DP_TEMP_SGMT가 중복으로 release되는 현상을 제거한 패치입니다.
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.