When a large number of concurrent queries with large $in arrays are executed they may bottleneck on the allocator; typical stacks below.
Thread 1140 (Thread 0x2b451dae6700 (LWP 81974)): #0 0x00000000014a6f85 in base::internal::SpinLockDelay(int volatile*, int, int) () #1 0x00000000014a6e57 in SpinLock::SlowLock() () #2 0x00000000014a9393 in tcmalloc::CentralFreeList::RemoveRange(void**, void**, int) () #3 0x00000000014b4d2a in tcmalloc::ThreadCache::FetchFromCentralCache(unsigned long, unsigned long) () #4 0x0000000001c11bd8 in tc_new () #5 0x0000000000d0097d in std::_Rb_tree<mongo::BSONElement, mongo::BSONElement, std::_Identity<mongo::BSONElement>, mongo::BSONElementCmpWithoutField, std::allocator<mongo::BSONElement> >::_M_copy(std::_Rb_tree_node<mongo::BSONElement> const*, std::_Rb_tree_node<mongo::BSONElement>*) () #6 0x0000000000d009e8 in std::_Rb_tree<mongo::BSONElement, mongo::BSONElement, std::_Identity<mongo::BSONElement>, mongo::BSONElementCmpWithoutField, std::allocator<mongo::BSONElement> >::_M_copy(std::_Rb_tree_node<mongo::BSONElement> const*, std::_Rb_tree_node<mongo::BSONElement>*) () #7 0x0000000000cff349 in mongo::ArrayFilterEntries::copyTo(mongo::ArrayFilterEntries&) const () #8 0x0000000000cff4e7 in mongo::InMatchExpression::copyTo(mongo::InMatchExpression*) const () #9 0x0000000000cff579 in mongo::InMatchExpression::shallowClone() const () #10 0x0000000000d13878 in mongo::AndMatchExpression::shallowClone() const () #11 0x0000000000ecc26b in mongo::QueryPlanner::planFromCache(mongo::CanonicalQuery const&, mongo::QueryPlannerParams const&, mongo::CachedSolution const&, mongo::QuerySolution**) () #12 0x0000000000e7c4e7 in mongo::(anonymous namespace)::prepareExecution(mongo::OperationContext*, mongo::Collection*, mongo::WorkingSet*, mongo::CanonicalQuery*, unsigned long, mongo::PlanStage**, mongo::QuerySolution**) () #13 0x0000000000e7d434 in mongo::getExecutor(mongo::OperationContext*, mongo::Collection*, std::unique_ptr<mongo::CanonicalQuery, std::default_delete<mongo::CanonicalQuery> >, mongo::PlanExecutor::YieldPolicy, unsigned long) () #14 0x0000000000e7dfbb in mongo::getExecutorFind(mongo::OperationContext*, mongo::Collection*, mongo::NamespaceString const&, std::unique_ptr<mongo::CanonicalQuery, std::default_delete<mongo::CanonicalQuery> >, mongo::PlanExecutor::YieldPolicy) () #15 0x0000000000b4af7e in mongo::FindCmd::run(mongo::OperationContext*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, mongo::BSONObj&, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, mongo::BSONObjBuilder&) () Thread 1072 (Thread 0x2b4522d38700 (LWP 82047)): #0 0x00000000014a6f85 in base::internal::SpinLockDelay(int volatile*, int, int) () #1 0x00000000014a6e57 in SpinLock::SlowLock() () #2 0x00000000014a8efd in tcmalloc::CentralFreeList::InsertRange(void*, void*, int) () #3 0x00000000014b4ed8 in tcmalloc::ThreadCache::ReleaseToCentralCache(tcmalloc::ThreadCache::FreeList*, unsigned long, int) () #4 0x00000000014b4f7d in tcmalloc::ThreadCache::ListTooLong(tcmalloc::ThreadCache::FreeList*, unsigned long) () #5 0x0000000001c12080 in tc_delete () #6 0x0000000000b40a1b in std::_Rb_tree<mongo::BSONElement, mongo::BSONElement, std::_Identity<mongo::BSONElement>, mongo::BSONElementCmpWithoutField, std::allocator<mongo::BSONElement> >::_M_erase(std::_Rb_tree_node<mongo::BSONElement>*) () #7 0x0000000000b40a0f in std::_Rb_tree<mongo::BSONElement, mongo::BSONElement, std::_Identity<mongo::BSONElement>, mongo::BSONElementCmpWithoutField, std::allocator<mongo::BSONElement> >::_M_erase(std::_Rb_tree_node<mongo::BSONElement>*) () #8 0x0000000000b40a0f in std::_Rb_tree<mongo::BSONElement, mongo::BSONElement, std::_Identity<mongo::BSONElement>, mongo::BSONElementCmpWithoutField, std::allocator<mongo::BSONElement> >::_M_erase(std::_Rb_tree_node<mongo::BSONElement>*) () #9 0x0000000000d007aa in mongo::InMatchExpression::~InMatchExpression() () #10 0x0000000000d1110a in mongo::ListOfMatchExpression::~ListOfMatchExpression() () #11 0x0000000000d135df in mongo::AndMatchExpression::~AndMatchExpression() () #12 0x0000000000eca1f6 in mongo::QueryPlanner::plan(mongo::CanonicalQuery const&, mongo::QueryPlannerParams const&, std::vector<mongo::QuerySolution*, std::allocator<mongo::QuerySolution*> >*) () #13 0x0000000000e7bf48 in mongo::(anonymous namespace)::prepareExecution(mongo::OperationContext*, mongo::Collection*, mongo::WorkingSet*, mongo::CanonicalQuery*, unsigned long, mongo::PlanStage**, mongo::QuerySolution**) () #14 0x0000000000e7d434 in mongo::getExecutor(mongo::OperationContext*, mongo::Collection*, std::unique_ptr<mongo::CanonicalQuery, std::default_delete<mongo::CanonicalQuery> >, mongo::PlanExecutor::YieldPolicy, unsigned long) () #15 0x0000000000e7dfbb in mongo::getExecutorFind(mongo::OperationContext*, mongo::Collection*, mongo::NamespaceString const&, std::unique_ptr<mongo::CanonicalQuery, std::default_delete<mongo::CanonicalQuery> >, mongo::PlanExecutor::YieldPolicy) () #16 0x0000000000b4af7e in mongo::FindCmd::run(mongo::OperationContext*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, mongo::BSONObj&, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, mongo::BSONObjBuilder&) ()
- related to
-
SERVER-35693 Parsing of $in takes quadratic time due to O(n^2) boost::flat_set constructor
- Closed
-
SERVER-35699 Avoid holding locks during query parsing
- Backlog
-
SERVER-37176 IndexBoundsBuilder::unionize() can be skipped for $in
- Closed