Informix - Problem description
Problem IT10354 | Status: Closed |
PTMAP ASSERT FROM BTPOSITION WHEN ONE THREAD SELECT MAX USING IN-TABLE INDEX WHILE ANOTHER THREAD DELETE HIGHEST MAX VALUES IN A | |
product: | |
INFORMIX SERVER / 5725A3900 / B70 - IDS 11.70 | |
Problem description: | |
In general, the problem appears to be related to thread1 running a stored procedure that selects the max value of some integer column. In this case the integer column is also the primary key and contains an in-table unique index. While this is happening, thread2 was doing an insert that added new highest values (~2000 rows) of this column and then gets rolled back. There appears to be a small timing problem where the select is expecting to grab an index page from the buffer pool but instead gets a data page that leads to a ptmap assertion like below. The ptmap assertion looks comparable to: 12:53:36 IBM Informix Dynamic Server Version 11.70.FC5 Software Serial Number AAA#B000000 12:53:36 Assert Failed: ptmap 12:53:36 Who: Session(2906, informix@server, 6685262, 70000002072a7e0) Thread(2962, sqlexec, 7000000206f1da0, 8) File: rspartn.c Line: 3730 12:53:36 Results: Could not complete operation on 'informix:"informix".glbser_log_ird' 12:53:36 Action: Run 'oncheck -cDI laube:"informix".glbser_log_ird' 12:53:37 Raw hex dump of stack located in /opt/informix/tmp/af.f7a7b9 f.rawstk 12:53:37 Stack for thread: 2962 sqlexec base: 0x0700000025d13000 len: 135168 pc: 0x00000001000916ec tos: 0x0700000025d300c0 state: running vp: 8 (oninit)afstack (oninit)afhandler (oninit)affail_interface (oninit)ptmapx (oninit)buffget (oninit)bt_fast_buffget (oninit)btposition (oninit)kposition (oninit)rsstart (oninit)fmstart (oninit)indexaggs (oninit)group_open (oninit)prepselect (oninit)subqprep (oninit)exsubq (oninit)ev_cb (oninit)new_eval (oninit)IPRA.$ip_evalexpr (oninit)runproc (oninit)udrlm_spl_execute (oninit)udrlm_exec_routine (oninit)udr_execute (oninit)exroutine (oninit)sq_exproc (oninit)sqmain (oninit)listen_verify (oninit)spawn_thread (oninit)startup Note, in my test case, the ptmap assertion is followed by an assertion like below "Thread exited with 1 buffers held" when the session shuts down after the ptmap: 12:53:57 Assert Failed: Thread exited with 1 buffers held. 12:53:57 Who: Session(2906, informix@server, 6685262, 70000002072a7e0) Thread(2962, sqlexec, 7000000206f1da0, 8) File: rsshmem.c Line: 2152 12:53:57 Results: Dynamic Server must abort 12:53:57 Raw hex dump of stack located in /opt/informix/tmp/af.f7a7b9 f.rawstk 12:53:57 Stack for thread: 2962 sqlexec base: 0x0700000025d13000 len: 135168 pc: 0x00000001000916ec tos: 0x0700000025d324c0 state: running vp: 8 (oninit)afstack (oninit)afhandler (oninit)afcrash_interface (oninit)rstcb_cleanup (oninit)destroy_session (oninit)sq_exit (oninit)sqmain (oninit)listen_verify (oninit)spawn_thread (oninit)startup | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * Users of highly-stressed in-table indexes * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description * **************************************************************** * RECOMMENDATION: * * Update to IBM Informix Server 11.70.xC9 * **************************************************************** | |
Local Fix: | |
One possible workaround would be to drop the primary key and its unique index, then recreate a unique index detached along with a new primary key that uses this detached index. | |
Solution | |
Problem Fixed In IBM Informix Server 11.70.xC9 | |
Workaround | |
not known / see Local fix | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 27.07.2015 09.06.2017 09.06.2017 |
Problem solved at the following versions (IBM BugInfos) | |
11.70.xC9 | |
Problem solved according to the fixlist(s) of the following version(s) |