summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorKeith Bostic <keith.bostic@mongodb.com>2017-07-04 00:21:36 -0400
committerAlex Gorrod <alexander.gorrod@mongodb.com>2017-07-04 14:21:36 +1000
commit9dc10078d78f2d16983c80c6f75faa6e55944c3a (patch)
tree9120019262c04b18fe129fb9397a00b0a3053010 /tools
parent8c0a978d2803b5413f8862bd70e2e0bb3729570f (diff)
downloadmongo-9dc10078d78f2d16983c80c6f75faa6e55944c3a.tar.gz
WT-3402 Move cached overflow records to the update list. (#3493)
Cached overflow records are large value items that are being written after being updated in a committed transaction (which implies freeing and the potential reuse of their backing disk blocks), but which also must be kept available because an older reader in the system may want to read the previous value. Historically, we maintained a separate cache of these overflow values in the WT_PAGE_MODIFY.WT_OVFL_TXNC structure, with a set of functions to maintain that list. The reason was because we wanted to be able to remove overflow items from the cache based on updated transactional information, that is, once any older readers exited the system, we could discard the overflow values from the cache. Since that code was written, we've added support for removing items from key/value WT_UPDATE lists when they're no longer needed by earlier readers in the system, making the WT_UPDATE lists sufficient to replace the separate overflow values cache. Rather than enter overflow values into the separate cache, append the value to the WT_UPDATE list, with an impossibly low transaction ID to ensure global visibility. * Remove a diagnostic printf. * sort statistics lists. * Delete the data-source and connection statistic cache_overflow_value. It doesn't tell us anything useful other than "there were older readers in the system", and there are better sources of that information. * The cached remove information is a WT_CELL, no reason to hide that. * Increment the page footprint based on __wt_update_alloc's return of the size, don't roll our own. * There's special-case code in reconciliation to handle an overflow value being removed, the overflow value being cached because of an older reader in the system, and then the page going through an update/restore reconciliation. The idea is that if we cache an overflow value for an older reader in the system, then do a page update/restore eviction, re-instantiating the page in-memory means we'll no longer find the removed overflow value in the cache because the index for the cache is the on-page disk address of the overflow value, which doesn't appear in a re-instantiated page. The fix was to take a copy of the original overflow value from the cache and append it to the key's WT_UPDATE list. With the move of the overflow cache from a separate list to the key's WT_UPDATE list, that special-case code is no longer needed. Now, if an overflow value is removed and cached, the cache is the key's WT_UPDATE list, and subsequent reconciliations will always see a globally visible entry. * Document the removal of the cache_overflow_value statistic. * Add WT_UPDATE_DATA_VALUE macro, it flags a WT_UPDATE structure that includes a standalone chunk of data, in other words, "standard" or "deleted", but not "reserved", or in the future, "modified". * Use "no transaction ID" instead of "impossibly low transaction ID".
Diffstat (limited to 'tools')
-rw-r--r--tools/wtstats/stat_data.py2
1 files changed, 0 insertions, 2 deletions
diff --git a/tools/wtstats/stat_data.py b/tools/wtstats/stat_data.py
index 09fca2b9525..9bb6413e477 100644
--- a/tools/wtstats/stat_data.py
+++ b/tools/wtstats/stat_data.py
@@ -13,7 +13,6 @@ no_scale_per_second_list = [
'cache: hazard pointer maximum array length',
'cache: maximum bytes configured',
'cache: maximum page size at eviction',
- 'cache: overflow values cached in memory',
'cache: pages currently held in the cache',
'cache: percentage overhead',
'cache: tracked bytes belonging to internal pages in the cache',
@@ -94,7 +93,6 @@ no_scale_per_second_list = [
'btree: row-store internal pages',
'btree: row-store leaf pages',
'cache: bytes currently in the cache',
- 'cache: overflow values cached in memory',
'cache: tracked dirty bytes in the cache',
'cache_walk: Average difference between current eviction generation when the page was last considered',
'cache_walk: Average on-disk page image size seen',