ITADN

Internal error: dictionary size 4303107232 overflow at dictend save

#4547Openmarcoberetta96 创建于 2026-05-04
bugwaiting
M
marcoberetta96commented
### Bug Description: # Description We are experiencing an intermittent crash in Manticore during query execution on an RT index. The crash is **not deterministic**: running the exact same query again immediately after the crash does **not reproduce the issue**. The failure happens with: ``` FATAL: INTERNAL ERROR: dictionary size 4303107232 overflow at dictend save ``` This leads to a segmentation fault (signal 11). --- # Environment * Manticore version: `13.13.0` * OS: Debian bookworm * Index type: RT * Table: `rt1` --- # Query ``` SELECT * FROM rt1 WHERE deleted = 0 AND message_id = '<xxx@g2email-c-dev4-7f5f5f49c8-rp546>' AND customer = 1 AND MATCH('((@ft_filter "dsl.external\@test365.onmicrosoft.com" | @ft_filter "dsl.external\@test365.onmicrosoft.com" | @ft_filter "dsl.external\@test365.onmicrosoft.com#1"))') AND ts_sent = 1774219011 LIMIT 0,100 OPTION max_matches=100 ``` --- # Observed Behavior * Crash occurs during normal operation (queries + background chunk merges). * Logs show ongoing RT chunk merges before the crash. * Error indicates a **dictionary size overflow (~4.3GB)**. * Immediately retrying the same query works fine. * Issue appears sporadic and not tied to a specific query pattern. --- # Relevant Logs ``` [Thu Apr 2 12:00:17.444 2026] [643979] rt: table rt_attachment: merged chunks /manticore/rt_attachment/sphinx.22037 and /manticore/rt_attachment/sphinx.22038 to /manticore/rt_attachment/sphinx.22040 in 28s (progressive mode). Remaining chunk count: 135 [Thu Apr 2 12:01:01.641 2026] [643894] rt: table rt_attachment: merged chunks /manticore/rt_attachment/sphinx.22036 and /manticore/rt_attachment/sphinx.22040 to /manticore/rt_attachment/sphinx.22041 in 44s (progressive mode). Remaining chunk count: 134 [Thu Apr 2 12:04:00.553 2026] [643886] rt: table rt1: diskchunk 73655(142), segments 26 saved in 3.241875 (3.507477) sec, RAM saved/new 53464755/784334 ratio 0.950000 (soft limit 510027366, conf limit 536870912) [Thu Apr 2 12:08:40.574 2026] [643955] rt: table rt1: diskchunk 73656(143), segments 28 saved in 3.371104 (3.487189) sec, RAM saved/new 61066372/607853 ratio 0.950000 (soft limit 510027366, conf limit 536870912) [Thu Apr 2 12:14:30.311 2026] [643973] FATAL: INTERNAL ERROR: dictionary size 4303107232 overflow at dictend save ------- FATAL: CRASH DUMP ------- [Thu Apr 2 12:14:30.194 2026] [643794] --- crashed SphinxQL request dump --- SELECT * FROM rt1 WHERE deleted = 0 AND message_id = '<xxx@g2email-c-dev4-7f5f5f49c8-rp546>' AND customer = 1 AND MATCH('((@ft_filter "dsl.external\@test365.onmicrosoft.com" | @ft_filter "dsl.external\@test365.onmicrosoft.com" | @ft_filter "dsl.external\@test365.onmicrosoft.com#1"))' ) AND ts_sent = 1774219011 LIMIT 0,100 OPTION max_matches=100 --- request dump end --- --- local index:rt1 Manticore 13.13.0 e5465fe44@25100704 (columnar 8.1.0 e1522a2@25100213) (secondary 8.1.0 e1522a2@25100213) (knn 8.1.0 e1522a2@25100213) (embeddings 1.0.1) Handling signal 11 -------------- backtrace begins here --------------- Program compiled with Clang 16.0.6 Configured with flags: Configured with these definitions: -DDISTR_BUILD=bookworm -DUSE_SYSLOG=1 -DWITH_GALERA=1 -DWITH_RE2=1 -DWITH_RE2_FORCE_STATIC=1 -DWITH_STEMMER=1 -DWITH_STEMMER_FORCE_STATIC=1 -DWITH_NLJSON=1 -DWITH_UNIALGO=1 -DWITH_ICU=1 -DWITH_ICU_FORCE_STATIC=1 -DWITH_JIEBA=1 -DWITH_SSL=1 -DWITH_ZLIB=1 -DWITH_ZSTD=1 -DDL_ZSTD=1 -DZSTD_LIB=libzstd.so.1 -DWITH_CURL=1 -DDL_CURL=1 -DCURL_LIB=libcurl.so.4 -DWITH_ODBC=1 -DDL_ODBC=1 -DODBC_LIB=libodbc.so.2 -DWITH_EXPAT=1 -DDL_EXPAT=1 -DEXPAT_LIB=libexpat.so.1 -DWITH_ICONV=1 -DWITH_MYSQL=1 -DDL_MYSQL=1 -DMYSQL_LIB=libmariadb.so.3 -DWITH_POSTGRESQL=1 -DDL_POSTGRESQL=1 -DPOSTGRESQL_LIB=libpq.so.5 -DLOCALDATADIR=/var/lib/manticore -DFULL_SHARE_DIR=/usr/share/manticore Built on Linux x86_64 (bookworm) (cross-compiled) Stack bottom = 0x7ef2ad5f6b00, thread stack size = 0x20000 Trying manual backtrace: Something wrong with thread stack, manual backtrace may be incorrect (fp=0x20000) Wrong stack limit or frame pointer, manual backtrace failed (fp=0x20000, stack=0x7ef2ad600000, stacksize=0x20000) Trying system backtrace: begin of system symbols: /usr/bin/searchd(_Z12sphBacktraceib+0x227)[0x560aa1b6e987] /usr/bin/searchd(_Z11HandleCrashi+0x2e3)[0x560aa188c0b3] /lib/x86_64-linux-gnu/libc.so.6(+0x3c050)[0x7fd70085a050] /lib/x86_64-linux-gnu/libc.so.6(__pthread_rwlock_rdlock+0x0)[0x7fd7008ac7b0] /usr/bin/searchd(_ZN8RwLock_t8ReadLockEv+0x36)[0x560aa1a34996] /usr/bin/searchd(_Z7IterateRSt8functionIFvPN7Threads15LowThreadDesc_tEEE+0x26)[0x560aa1da3c56] /usr/bin/searchd(_ZN7Threads13IterateActiveESt8functionIFvPNS_15LowThreadDesc_tEEE+0x71)[0x560aa1d7f4a1] /usr/bin/searchd(+0x14fd36d)[0x560aa1da536d] /usr/bin/searchd(_ZN6hazard16GetListOfPointedEOSt8functionIFPviEEi+0x2f)[0x560aa1da541f] /usr/bin/searchd(_ZN15SearchHandler_cD1Ev+0x46)[0x560aa18a1346] /usr/bin/searchd(_ZN15ClientSession_c7ExecuteESt4pairIPKciER11RowBuffer_i+0x1d9d)[0x560aa1a02aed] /usr/bin/searchd(_Z8SqlServeSt10unique_ptrI16AsyncNetBuffer_cSt14default_deleteIS0_EE+0x1b73)[0x560aa192a173] /usr/bin/searchd(_Z10MultiServeSt10unique_ptrI16AsyncNetBuffer_cSt14default_deleteIS0_EESt4pairIitE7Proto_e+0x43)[0x560aa1924c83] /usr/bin/searchd(+0x107d832)[0x560aa1925832] /usr/bin/searchd(_ZZN7Threads11CoRoutine_c13CreateContextESt8functionIFvvEESt4pairIN5boost7context13stack_contextENS_14StackFlavour_EEEENUlNS6_6detail10transfer_tEE_8__invokeESB_+0x1c)[0x560aa1a645dc] /usr/bin/searchd(make_fcontext+0x2f)[0x560aa2ffd57f] Trying boost backtrace: 0# sphBacktrace(int, bool) in /usr/bin/searchd 1# HandleCrash(int) in /usr/bin/searchd 2# 0x00007FD70085A050 in /lib/x86_64-linux-gnu/libc.so.6 3# __pthread_rwlock_rdlock in /lib/x86_64-linux-gnu/libc.so.6 4# RwLock_t::ReadLock() in /usr/bin/searchd 5# Iterate(std::function<void (Threads::LowThreadDesc_t*)>&) in /usr/bin/searchd 6# Threads::IterateActive(std::function<void (Threads::LowThreadDesc_t*)>) in /usr/bin/searchd 7# 0x0000560AA1DA536D in /usr/bin/searchd 8# hazard::GetListOfPointed(std::function<void* (int)>&&, int) in /usr/bin/searchd 9# SearchHandler_c::~SearchHandler_c() in /usr/bin/searchd 10# ClientSession_c::Execute(std::pair<char const*, int>, RowBuffer_i&) in /usr/bin/searchd 11# SqlServe(std::unique_ptr<AsyncNetBuffer_c, std::default_delete<AsyncNetBuffer_c> >) in /usr/bin/searchd 12# MultiServe(std::unique_ptr<AsyncNetBuffer_c, std::default_delete<AsyncNetBuffer_c> >, std::pair<int, unsigned short>, Proto_e) in /usr/bin/searchd 13# 0x0000560AA1925832 in /usr/bin/searchd 14# Threads::CoRoutine_c::CreateContext(std::function<void ()>, std::pair<boost::context::stack_context, Threads::StackFlavour_E>)::{lambda(boost::context::detail::transfer_t)#1}::__invoke(boost::context::detail::transfer_t) in /usr/bin/searchd 15# make_fcontext in /usr/bin/searchd -------------- backtrace ends here --------------- ``` ### Manticore Search Version: 13.13.0 ### Operating System Version: debian bookworm ### Have you tried the latest development version? None ### Internal Checklist: <sup>To be completed by the assignee. Check off tasks that have been completed or are not applicable.</sup> <details> - [ ] Implementation completed - [ ] Tests developed - [ ] Documentation updated - [ ] Documentation reviewed </details>
5 条评论