Application threads start to do eviction when the eviction triggers are reached. They use their own snapshot to do eviction. However, when their snapshot is old, it cannot make progress in eviction and throws ebusy.
/* * If eviction didn't use any updates and didn't split or delete the page, it didn't make * progress. Give up rather than silently succeeding in doing no work: this way threads know to * back off forced eviction rather than spinning. * * Do not return an error if we are syncing the file with eviction disabled or as part of a * checkpoint. */ if (ret == 0 && !(btree->evict_disabled > 0 || !F_ISSET(btree->dhandle, WT_DHANDLE_OPEN)) && F_ISSET(r, WT_REC_EVICT) && !WT_PAGE_IS_INTERNAL(r->page) && r->multi_next == 1 && F_ISSET(r, WT_REC_CALL_URGENT) && !r->update_used && r->cache_write_restore) ret = __wt_set_return(session, EBUSY);
This sometimes cause the application thread to stuck in the eviction loop. It keeps doing eviction but not making any progress.
- causes
-
WT-11857 Skip the new test test_app_thread_evict01 from the hooks timestamp
- Closed
- is depended on by
-
WT-12240 Unnecessary check in __wt_txn_visible_all
- Backlog
- is related to
-
WT-11997 Revert "WT-11398 Refresh application thread snapshot when it is triggered to perform eviction."
- Closed
- related to
-
WT-11972 Refresh application thread snapshot if eviction didn't make progress
- Closed