현상
통계 수집 과정에서 get_blk_cnt 함수를 읽을 때 Internal Error '((shdrblk->cl.type == TCBLKT_SEGMENT_HEADER) && (shdrblk->tx.sgmt_id == sgmt_id))' 가 발생한 현상 입니다.
## callstack 일부
Thread 10 (Thread 0x7f5c876d7700 (LWP 10032)):
#0 0x00007f62c8fb266d in nanosleep () from /lib64/libc.so.6
#1 0x00007f62c8fb2504 in sleep () from /lib64/libc.so.6
#2 0x0000000000d90415 in tb_system (cmdstring=<optimized out>, timeout_in_sec=297, kill_child=1 '\001', ds=<optimized out>) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/frame/callstack.c:232
#3 callstack_dump_ex (ds=0x3a8d480 <debug_dstream>, tid=<optimized out>, dump_dest_dir=0x0) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/frame/callstack.c:1020
#4 0x0000000000d8dcf9 in tb_tracedump (tracedump_cause=TRACEDUMP_ASSERT) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/frame/tbsvr_tracedump.c:91
#5 0x0000000000fd4cc6 in tb_assert_msg_detail (cond=0x272b078 "((shdrblk->cl.type == TCBLKT_SEGMENT_HEADER) && (shdrblk->tx.sgmt_id == sgmt_id))", argc=<optimized out>, filename=0x272a752 "tx_sgmt.c", line=<optimized out>, func=<optimized out>) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/minimal/tb_assert.c:115
#6 0x00000000019e9ac3 in tx_sgmt_get_blk_cnt (ts_id=<optimized out>, shdrdba=<optimized out>, sgmt_id=<optimized out>) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/tx/tx_sgmt.c:6175
#7 0x00000000012a1e6b in pkg_sys_util__get_blk_cnt (argv=<optimized out>, obj_id=<optimized out>) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/pkg/pkg_sys_util.c:118
#8 0x00000000014a2d48 in psm_vm_execute (env=0x7f5c876d51c0, bcode=0x7f5c876d5780, start_pc=0x0, argv=0x0) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/psm/psm_vm.c:5216
#9 0x00000000014a7eb7 in psm_vm_interpret (bcode=0x7f5c876d5780, pkg=<optimized out>, argv=0x0) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/psm/psm_vm.c:3632
#10 0x00000000014ef14c in psm_execute_anonblk (alloc_psm=0x7f5c580126f0, bcode=0x7f5c876d5780, host_vars=0x0) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/psm/psm_for_frame.c:554
#11 0x00000000014f0676 in psm_execute_anonblk_from_sga_bcode (msg_alloc=0x7f5c876d3ed0, sga_bcode=<optimized out>, host_vars=0x7f5c876d3f60) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/psm/psm_for_frame.c:285
#12 psm_anonblk (msg_alloc=<optimized out>, pp=<optimized out>, sql=0x7f5c8878f780 "begin\n/*+EVERY_MIDNIGHT_STAT_GATHERING*/ begin dbms_stats.gather_database_stats (gather_sys=>true, options=>'GATHER AUTO', method_opt=>'FOR ALL INDEXED COLUMNS SIZE REPEAT'); end;\nend;", host_vars=0x0, exec_mode=<optimized out>, pp_hit=0 '\000') at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/psm/psm_for_frame.c:97
#13 0x0000000001269763 in pkg_dbms_job_execute_common (alloc=0x7f5c58011f20, job=7, what=<optimized out>, raw_job=0x7f6199e33060, flags=0) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/pkg/pkg_dbms_job.c:771
#14 0x000000000126bf78 in psm_job_run_internal (alloc=0x7f5c58011f20, raw_job=0xffffffffffffffff, flags=0) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/pkg/pkg_dbms_job.c:82
#15 0x0000000000588f8e in wthr_get_new_job (my_tid=<optimized out>) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/body/tbsvr_wthr.c:2654
#16 thread_main_chk_bitmask (my_tid=593, bitmask=...) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/body/tbsvr_wthr.c:171
#17 0x0000000000598b57 in svr_wthr_main_internal (my_tid=593) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/body/tbsvr_wthr.c:884
#18 0x0000000000d72d80 in wthr_init (args=<optimized out>) at /home/autodist/build_20210512_190704/tibero6/src/tbsvr/frame/tbsvr_cthr.c:3241
#19 0x00007f62cb1ccdc5 in start_thread () from /lib64/libpthread.so.0
#20 0x00007f62c8feb73d in clone () from /lib64/libc.so.6
## out파일 일부
[593] Internal Error with condition: '((shdrblk->cl.type == TCBLKT_SEGMENT_HEADER) && (shdrblk->tx.sgmt_id == sgmt_id))' (3 args) (tx_sgmt.c:6178:tx_sgmt_get_blk_cnt) (pid=9679, sessid=593, tid=593)
(shdrblk->cl.type) = '' = 0xc
(shdrblk->tx.sgmt_id) = 1574441 = 1574441 = 0x180629
(sgmt_id) = 1564323 = 1564323 = 0x17dea3
[593] client : ip [] process [JOB_SCHEDULER] logon time : [2023/07/29 00:01:00]
[593] prev sql : "select p.obj_id, sgmt_id, ts_id, shdrdba, subpartcnt
from sys._dd_tblpart p, sys._dd_obj o
where p.bo_id = :B1 and o.obj_id = p.obj_id"
[593] current sql : "begin
/*+EVERY_MIDNIGHT_STAT_GATHERING*/ begin dbms_stats.gather_database_stats (gather_sys=>true, options=>'GATHER AUTO', method_opt=>'FOR ALL INDEXED COLUMNS SIZE REPEAT'); end;
end;"
[593] *** 2023/07/29 00:01:13.061 ***
[593] callstack dump from tbsvr_WP049 for [WTHR, 593, 10032/9679]
[593] SEE DUMP tbsvr.callstack.9679 (lwpid 10032) BY PSTACK
SQL
복사
원인
통계 수집 과정에서 get_blk_cnt 함수를 읽을 때 잘못된 sgmt공간으로 접근하여 발생하는 에러 입니다.
통계 수집 중 sgmt에 add/drop part가 반복되는 상황에서 drop된 sgmt공간이 add시 재할당 되고,
drop 전 설정되어 있던 정보로 sgmt공간에 접근 시 발생합니다.
해결
통계수집 중 문제 발생 시 해당 sgmt에 대한 수집을 생략할 수 있도록, 패치를 적용해 해결합니다.
(적용패치: 312409a)
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.