| Age | Commit message (Collapse) | Author |
|
atomic flag operations, simplify the world.
|
|
* It was possible for a balance pass to get into an infinite loop.
* Remove an overlapping flag constant
|
|
* Each participant now has a manager thread
* Each participant has a shared cache session
Refs issue #1176
|
|
Conflicts:
src/btree/bt_evict.c
src/conn/conn_cache.c
src/include/cache.h
|
|
always available.
|
|
connection close.
|
|
Refs #1116
|
|
Conflicts:
src/btree/bt_evict.c
|
|
|
|
|
|
WT_REF structure.
|
|
Conflicts:
src/btree/bt_evict.c
src/btree/bt_handle.c
src/btree/bt_page.c
src/btree/bt_slvg.c
src/btree/bt_walk.c
src/btree/col_srch.c
src/btree/rec_write.c
src/btree/row_srch.c
src/config/config_def.c
src/include/btree.i
src/include/cache.h
src/include/extern.h
src/include/flags.h
src/include/misc.h
src/include/txn.i
src/include/wiredtiger.in
|
|
|
|
Conflicts:
src/btree/bt_evict.c
src/include/cache.h
|
|
|
|
|
|
cause excessive eviction.
refs #829 (etc.)
|
|
The mode is triggered when we are force evicting pages, and the cache
is not yet full. If we don't merge internal pages while doing forced
eviction we can end up with very deep chains of WT_REC_SPLIT pages.
|
|
Move lang/java and lang/python into the public domain.
|
|
81d7c81584a1ffcc4d8b6912403c17ff97884767 fails this assertion:
btree/bt_discard.c, 45: !F_ISSET_ATOMIC(page, WT_PAGE_EVICT_LRU)
refs #735
|
|
pointer.
|
|
Conflicts:
src/include/cache.h
|
|
|
|
supposed to limit the pages we acquire for the LRU queue.
Replace the file counting mechanism for restarting at the same
spot in the dhandle list with a reference to a field of the
dhandle structure.
|
|
Used to limit when we clean up obsolete update lists.
|
|
monotonic variable, so we can never miss a page when scanning.
|
|
only sort the maximum number of entries we have actually seen.
|
|
candidates.
Application eviction used to poll, but it's hard to get the polling
interval right for all cases.
|
|
applications threads use it and there's no guarantee the eviction server has started.
|
|
|
|
The eviction server was using the cache_inuse routines on exit, which
don't complain if there are more bytes/pages evicted than are in memory,
and that's not correct, change it to do an exact comparison. This was
hiding some problems in our page count. Fix the page count problems by:
... adding an "allocate a new WT_PAGE" function that increments
the count of pages in the system and calling it from everywhere (we
weren't counting split-merge pages created during reconciliation, or the
pages we created when opening empty trees);
... change the split-merge collapse code to call __wt_page_out
to discard pages instead of freeing them explicitly;
... rename WT_CACHE.pages_read to be pages_inmem, matching the
bytes_inmem name and matching its new function of tracking all pages,
no matter their origin.
We were tracking cache "bytes in memory" in two variables: "bytes read"
was tracked in WT_CACHE.bytes_read and "bytes subsequently added in
memory" in WT_CACHE.bytes_inmem, and we added them together to get a
final answer. Change WT_CACHE.bytes_inmem to be the bytes in memory,
regardless of whether it was read in, a created page, or subsequently
added memory, by removing WT_CACHE.bytes_read and changing the
__wt_page_inmem function to call __wt_cache_page_inmem_incr instead of
having a separate __wt_cache_page_read function.
Change __wt_page_modify_init to increment the page's footprint when the
WT_PAGE_MODIFY structure is first allocated.
Add a reconciliation function to create split-merge pages: abstract out
the common code and set the page's memory footprint.
|
|
didn't get smaller, but with enough read pressure from application threads, that check was insufficient.
|
|
evict pages they have no chance of writing, there is no point counting failures in application threads. If the eviction server gives up without hitting its target, have the oldest transaction abort next time it tries to evict something.
|
|
|
|
|
|
Associated code changes, and some enhancements to the shared cache
balancing algorithm.
|
|
a shared cache.
|
|
Conflicts:
src/btree/bt_evict.c
src/include/cache.h
|
|
|
|
|
|
eviction server thread work. I think I'm fixing two problems:
First, the cache->disabled_eviction handling isn't sufficient (we
were emptying the LRU queue, but we weren't waiting for it to drain).
If a thread of control took a buffer off the LRU eviction queue and went
to sleep, it would be possible for it to race with a thread of control
during the internal-page phase of a checkpoint, and we can't allow any
pages at all to be written after the internal-page checkpoint phase
starts. The fix is to contact the eviction server at the start of the
internal-page phase of a checkpoint and have it wait for the LRU queue
to drain.
Second, we can't discard any page with a modified structure during
the internal-page checkpoint phase because that can race with the
checkpoint threads looking at the WT_REF structure for the page being
discarded, in other words, there's a state change in the internal page
just when the internal page is being read.
I also changed it so we don't turn off writes for the entire cache when
doing the internal-page phase of a checkpoint, we only need to turn off
writes for the file being checkpointed.
Move WT_SYNC_XXX flags into dist/flags.py, they're no longer specific
to an eviction server operation, they only place you see them all is in
the __wt_bt_cache_flush() function.
Reference #419.
|
|
than a certain threshold. This avoids taking a performance hit
when a huge page needs to be reconciled.
|
|
switch from an on/off field to using the WT_EVICT_* flags to disable eviction of dirty pages.
|
|
|
|
|
|
|
|
|
|
complicated because the cache pool can live longer than the connection
that initially creates it.
|
|
|
|
Update all uses of cache_size in our tree to be cache.size
Update cache pool implementation to no longer have a quota option.
Update cache pool implementation to have a minimum/initial size.
Update subconfig documentation tags, so the doc looks OK.
|