diff options
author | Luke Chen <luke.chen@mongodb.com> | 2018-01-05 22:07:41 +1100 |
---|---|---|
committer | Luke Chen <luke.chen@mongodb.com> | 2018-01-05 22:07:41 +1100 |
commit | bd9ed5bbe07754221ad014dceefc0ebdb0ecab32 (patch) | |
tree | 622a3cc94249954a7bf0757231c40792c9ef5378 /src/third_party/wiredtiger/dist | |
parent | 2158ea8d6c84c9a68b50f76c9dd23b8a193b65f8 (diff) | |
download | mongo-bd9ed5bbe07754221ad014dceefc0ebdb0ecab32.tar.gz |
Import wiredtiger: 9e5044823185feffa71e56a6593cfb92e0741a41 from branch mongodb-3.8
ref: 1a29eac4dc..9e50448231
for: 3.7.1
WT-2705 High throughput cache bound many threaded workloads can experience long latencies
WT-3725 Add statistics to locks around timestamp structures
WT-3750 Fast-path fs_directory_list of a single file.
WT-3768 Lookaside optimization: birthmarks
WT-3769 Fix a bug in reverse cursor walks with particular delete patterns and prefix compression enabled
WT-3779 Add support for string formats with WT_CURSOR::modify
WT-3800 test_wt2834_join_bloom_fix hang
WT-3806 Make sure rdtsc values move forward in time
WT-3807 clang static analysis updates
WT-3810 wt_rdtsc calibration needs to be longer and verify validity
WT-3812 debugging page output should handle complex key/value items.
WT-3816 Enable prefix compression on the lookaside table
WT-3819 clang static analysis improvements
WT-3820 Add a WT_SESSION.breakpoint method for Python debugging.
WT-3822 Update WiredTiger copyrights to 2018
WT-3824 tsc_nsec_ratio can compute to zero and cause divide by zero bug
Diffstat (limited to 'src/third_party/wiredtiger/dist')
-rw-r--r-- | src/third_party/wiredtiger/dist/api_data.py | 2 | ||||
-rwxr-xr-x | src/third_party/wiredtiger/dist/s_c_test_create | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/s_clang-scan | 50 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/s_clang-tidy | 84 | ||||
-rwxr-xr-x | src/third_party/wiredtiger/dist/s_copyright | 3 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/s_define.list | 7 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/s_funcs.list | 1 | ||||
-rwxr-xr-x | src/third_party/wiredtiger/dist/s_stat | 12 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/s_string.ok | 1 | ||||
-rwxr-xr-x | src/third_party/wiredtiger/dist/s_void | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/stat_data.py | 65 |
11 files changed, 216 insertions, 12 deletions
diff --git a/src/third_party/wiredtiger/dist/api_data.py b/src/third_party/wiredtiger/dist/api_data.py index ac4e80aedcf..c0afe3ae041 100644 --- a/src/third_party/wiredtiger/dist/api_data.py +++ b/src/third_party/wiredtiger/dist/api_data.py @@ -550,7 +550,7 @@ connection_runtime_config = [ Maintain database statistics, which may impact performance. Choosing "all" maintains all statistics regardless of cost, "fast" maintains a subset of statistics that are relatively - inexpensive, "none" turns off all statistics. The "clear" + inexpensive, "none" turns off all statistics. The "clear" configuration resets statistics after they are gathered, where appropriate (for example, a cache size statistic is not cleared, while the count of cursor insert operations will diff --git a/src/third_party/wiredtiger/dist/s_c_test_create b/src/third_party/wiredtiger/dist/s_c_test_create index 1d379664e75..66d1e24ec87 100755 --- a/src/third_party/wiredtiger/dist/s_c_test_create +++ b/src/third_party/wiredtiger/dist/s_c_test_create @@ -35,7 +35,7 @@ mkdir $CSUITE_DIRECTORY/$TEST_NAME (cat <<EOF /*- - * Public Domain 2014-2017 MongoDB, Inc. + * Public Domain 2014-2018 MongoDB, Inc. * Public Domain 2008-2014 WiredTiger, Inc. * * This is free and unencumbered software released into the public domain. diff --git a/src/third_party/wiredtiger/dist/s_clang-scan b/src/third_party/wiredtiger/dist/s_clang-scan new file mode 100644 index 00000000000..33d6f3e7d9e --- /dev/null +++ b/src/third_party/wiredtiger/dist/s_clang-scan @@ -0,0 +1,50 @@ +#! /bin/sh + +t=__wt.$$ +trap 'rm -rf $t /tmp/scan-build-*' 0 1 2 3 13 15 + +# Installation of the clang development package isn't standard, list a +# couple of the places we're using. +export PATH=$PATH:/usr/local/clang50/bin:/usr/local/llvm-devel/bin + +# Remove old reports. +rm -rf /tmp/scan-build-* + +# Find the top-level WiredTiger directory and move to there. +p="$PWD" +while test "$p" != "/" ; do + if test -d "$p/build_posix"; then + break; + fi + p=`dirname $p` +done +test "$p" != "/" || { + echo "$0: cannot find the WiredTiger top-level directory" + exit 1 +} + +cd $p || exit 1 +echo "$0: running scan-build in $p..." + +sh autogen.sh > /dev/null || exit 1 + +args="--use-cc=clang40 -no-failure-reports" +args="$args -disable-checker core.NullDereference" +scan-build $args ./configure 'CFLAGS=-g -Wall' \ + --disable-shared --enable-diagnostic --enable-strict > /dev/null +scan-build $args make -j 8 wt 2>&1 > $t + +make -j 8 distclean > /dev/null + +grep 'No bugs found' $t > /dev/null || { + echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" + echo 'unexpected scan-build output' + echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" + sed -e '/^--- /d' \ + -e '/^\/bin\/sh /d' \ + -e '/^depbase=/d' \ + -e '/^libtool: /d' < $t + exit 1 +} + +exit 0 diff --git a/src/third_party/wiredtiger/dist/s_clang-tidy b/src/third_party/wiredtiger/dist/s_clang-tidy new file mode 100644 index 00000000000..209d6f7d5d5 --- /dev/null +++ b/src/third_party/wiredtiger/dist/s_clang-tidy @@ -0,0 +1,84 @@ +#! /bin/sh + +t=__wt.$$ +trap 'rm -rf $t' 0 1 2 3 13 15 + +# Installation of the clang development package isn't standard, list a +# couple of the places we're using. +export PATH=$PATH:/usr/local/clang50/bin:/usr/local/llvm-devel/bin + +# Remove old reports. +rm -rf /tmp/scan-build-* + +# Find the top-level WiredTiger directory and move to there. +p="$PWD" +while test "$p" != "/" ; do + if test -d "$p/build_posix"; then + break; + fi + p=`dirname $p` +done +test "$p" != "/" || { + echo "$0: cannot find the WiredTiger top-level directory" + exit 1 +} + +cd $p || exit 1 +echo "$0: running clang-tidy in $p..." + +sh autogen.sh > /dev/null || exit 1 + +./configure --enable-diagnostic --enable-strict > /dev/null + +# We need a custom wiredtiger_config.h, clang-tidy doesn't know where to +# find the x86intrin.h include file. +echo '!!!!' +echo 'Modifying wiredtiger_config.h' +echo '!!!!' +cp wiredtiger_config.h $t +sed '/HAVE_X86INTRIN_H/d' < $t > wiredtiger_config.h + +# XXX +# clang-tidy doesn't like verify_build at the moment. +echo '!!!!' +echo 'Modifying src/include/verify_build.h' +echo '!!!!' +echo '#define WT_STATIC_ASSERT(a)' > src/include/verify_build.h + +def="-D_GNU_SOURCE" +inc="-I. -Isrc/include" + +args="-checks=*" +args="$args,-android-cloexec-fopen" +args="$args,-clang-analyzer-core.NullDereference" +args="$args,-clang-analyzer-optin.performance.Padding" +args="$args,-google-readability-braces-around-statements" +args="$args,-hicpp-braces-around-statements" +args="$args,-hicpp-no-assembler" +args="$args,-hicpp-signed-bitwise" +args="$args,-llvm-header-guard" +args="$args,-llvm-include-order" +args="$args,-readability-braces-around-statements" +args="$args,-readability-inconsistent-declaration-parameter-name" +args="$args,-readability-named-parameter" +args="$args,-readability-non-const-parameter" + +# clang-tidy gets unhappy if we toss the whole tree at it, so run +# through a file at a time. +# Only specify -header once. +( +clang-tidy src/btree/bt_compact.c \ + "-header-filter=.*" "$args" -- $def $inc 2>&1 +for i in src/[a-np-z]*/*.c src/os_posix/*.c; do + clang-tidy $i "$args" -- $def $inc 2>&1 +done +) > $t + +echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" +echo 'clang-tidy output' +echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" +sed -e '/ warnings generated/d' \ + -e '/Suppressed.*warnings/d' \ + -e '/Use -header-filter/d' < $t + +exit 0 diff --git a/src/third_party/wiredtiger/dist/s_copyright b/src/third_party/wiredtiger/dist/s_copyright index 4a93be73fb6..170dba3efff 100755 --- a/src/third_party/wiredtiger/dist/s_copyright +++ b/src/third_party/wiredtiger/dist/s_copyright @@ -110,7 +110,8 @@ fi -o -name '*.cxx' \ -o -name '*.in' \ -o -name '*.java' \ - -o -name '*.py' | + -o -name '*.py' \ + -o -name '*.swig' | sed -e '/Makefile.in/d' \ -e '/^build_posix\//d' \ -e '/api\/leveldb\/basho\//d' \ diff --git a/src/third_party/wiredtiger/dist/s_define.list b/src/third_party/wiredtiger/dist/s_define.list index 5a5af9dd5d7..16f06da383c 100644 --- a/src/third_party/wiredtiger/dist/s_define.list +++ b/src/third_party/wiredtiger/dist/s_define.list @@ -13,6 +13,7 @@ TXN_API_END WIN32_LEAN_AND_MEAN WT_ALIGN_CHECK WT_ATOMIC_CAS +WT_ATOMIC_CAS_FUNC WT_ATOMIC_FUNC WT_BLOCK_DESC_SIZE WT_BLOCK_HEADER_SIZE @@ -22,8 +23,6 @@ WT_CACHE_LINE_PAD_END WT_CONN_CHECK_PANIC WT_DEADLOCK WT_DEBUG_BYTE -WT_SINGLE_THREAD_CHECK_START -WT_SINGLE_THREAD_CHECK_STOP WT_ERR_ERROR_OK WT_EXT_FOREACH_OFF WT_HANDLE_CLOSED @@ -47,6 +46,8 @@ WT_SESSION_LOCKED_CHECKPOINT WT_SESSION_LOCKED_TABLE_READ WT_SESSION_LOCKED_TABLE_WRITE WT_SESSION_LOCKED_TURTLE +WT_SINGLE_THREAD_CHECK_START +WT_SINGLE_THREAD_CHECK_STOP WT_SIZE_CHECK WT_STATS_FIELD_TO_OFFSET WT_STATS_SLOT_ID @@ -62,11 +63,11 @@ WT_STAT_INCRV_ATOMIC_BASE WT_STAT_INCRV_BASE WT_STAT_WRITE WT_TIMEDIFF_US -WT_TSCDIFF_NS WT_TRACK_OP WT_TRACK_OP_END WT_TRACK_OP_INIT WT_TRET_ERROR_OK +WT_TSCDIFF_NS WT_UPDATE_SIZE WT_WITH_LOCK_NOWAIT WT_WITH_LOCK_WAIT diff --git a/src/third_party/wiredtiger/dist/s_funcs.list b/src/third_party/wiredtiger/dist/s_funcs.list index 42eacf9c068..a7653e5b497 100644 --- a/src/third_party/wiredtiger/dist/s_funcs.list +++ b/src/third_party/wiredtiger/dist/s_funcs.list @@ -27,6 +27,7 @@ __wt_log_scan __wt_nlpo2 __wt_nlpo2_round __wt_print_huffman_code +__wt_session_breakpoint __wt_stat_join_aggregate __wt_stat_join_clear_all __wt_stream_set_no_buffer diff --git a/src/third_party/wiredtiger/dist/s_stat b/src/third_party/wiredtiger/dist/s_stat index cf9303e5f95..32cf16fd3d4 100755 --- a/src/third_party/wiredtiger/dist/s_stat +++ b/src/third_party/wiredtiger/dist/s_stat @@ -25,6 +25,10 @@ cat << UNUSED_STAT_FIELDS lock_checkpoint_count lock_checkpoint_wait_application lock_checkpoint_wait_internal +lock_commit_timestamp_read_count +lock_commit_timestamp_wait_application +lock_commit_timestamp_wait_internal +lock_commit_timestamp_write_count lock_dhandle_read_count lock_dhandle_wait_application lock_dhandle_wait_internal @@ -32,6 +36,10 @@ lock_dhandle_write_count lock_metadata_count lock_metadata_wait_application lock_metadata_wait_internal +lock_read_timestamp_read_count +lock_read_timestamp_wait_application +lock_read_timestamp_wait_internal +lock_read_timestamp_write_count lock_schema_count lock_schema_wait_application lock_schema_wait_internal @@ -39,6 +47,10 @@ lock_table_read_count lock_table_wait_application lock_table_wait_internal lock_table_write_count +lock_txn_global_read_count +lock_txn_global_wait_application +lock_txn_global_wait_internal +lock_txn_global_write_count UNUSED_STAT_FIELDS echo "$search" diff --git a/src/third_party/wiredtiger/dist/s_string.ok b/src/third_party/wiredtiger/dist/s_string.ok index 80f6bdca186..1f025013fe7 100644 --- a/src/third_party/wiredtiger/dist/s_string.ok +++ b/src/third_party/wiredtiger/dist/s_string.ok @@ -996,6 +996,7 @@ nsnap nul nullptr nuls +num numSymbols numbare offpage diff --git a/src/third_party/wiredtiger/dist/s_void b/src/third_party/wiredtiger/dist/s_void index 78a3340e3bf..4a0e73e1c0d 100755 --- a/src/third_party/wiredtiger/dist/s_void +++ b/src/third_party/wiredtiger/dist/s_void @@ -64,6 +64,7 @@ func_ok() -e '/int __wt_lsm_manager_pop_entry$/d' \ -e '/int __wt_once$/d' \ -e '/int __wt_posix_directory_list_free$/d' \ + -e '/int __wt_session_breakpoint$/d' \ -e '/int __wt_spin_init$/d' \ -e '/int __wt_spin_trylock$/d' \ -e '/int __wt_stat_connection_desc$/d' \ diff --git a/src/third_party/wiredtiger/dist/stat_data.py b/src/third_party/wiredtiger/dist/stat_data.py index bbb581e904e..9c828f66cef 100644 --- a/src/third_party/wiredtiger/dist/stat_data.py +++ b/src/third_party/wiredtiger/dist/stat_data.py @@ -84,6 +84,10 @@ class LSMStat(Stat): prefix = 'LSM' def __init__(self, name, desc, flags=''): Stat.__init__(self, name, LSMStat.prefix, desc, flags) +class PerfHistStat(Stat): + prefix = 'perf' + def __init__(self, name, desc, flags=''): + Stat.__init__(self, name, PerfHistStat.prefix, desc, flags) class RecStat(Stat): prefix = 'reconciliation' def __init__(self, name, desc, flags=''): @@ -128,6 +132,7 @@ groups['memory'] = [ groups['system'] = [ ConnStat.prefix, DhandleStat.prefix, + PerfHistStat.prefix, SessionStat.prefix, ThreadStat.prefix ] @@ -309,6 +314,10 @@ connection_stats = [ LockStat('lock_checkpoint_count', 'checkpoint lock acquisitions'), LockStat('lock_checkpoint_wait_application', 'checkpoint lock application thread wait time (usecs)'), LockStat('lock_checkpoint_wait_internal', 'checkpoint lock internal thread wait time (usecs)'), + LockStat('lock_commit_timestamp_read_count', 'commit timestamp queue read lock acquisitions'), + LockStat('lock_commit_timestamp_wait_application', 'commit timestamp queue lock application thread time waiting for the dhandle lock (usecs)'), + LockStat('lock_commit_timestamp_wait_internal', 'commit timestamp queue lock internal thread time waiting for the dhandle lock (usecs)'), + LockStat('lock_commit_timestamp_write_count', 'commit timestamp queue write lock acquisitions'), LockStat('lock_dhandle_read_count', 'dhandle read lock acquisitions'), LockStat('lock_dhandle_wait_application', 'dhandle lock application thread time waiting for the dhandle lock (usecs)'), LockStat('lock_dhandle_wait_internal', 'dhandle lock internal thread time waiting for the dhandle lock (usecs)'), @@ -316,6 +325,10 @@ connection_stats = [ LockStat('lock_metadata_count', 'metadata lock acquisitions'), LockStat('lock_metadata_wait_application', 'metadata lock application thread wait time (usecs)'), LockStat('lock_metadata_wait_internal', 'metadata lock internal thread wait time (usecs)'), + LockStat('lock_read_timestamp_read_count', 'read timestamp queue read lock acquisitions'), + LockStat('lock_read_timestamp_wait_application', 'read timestamp queue lock application thread time waiting for the dhandle lock (usecs)'), + LockStat('lock_read_timestamp_wait_internal', 'read timestamp queue lock internal thread time waiting for the dhandle lock (usecs)'), + LockStat('lock_read_timestamp_write_count', 'read timestamp queue write lock acquisitions'), LockStat('lock_schema_count', 'schema lock acquisitions'), LockStat('lock_schema_wait_application', 'schema lock application thread wait time (usecs)'), LockStat('lock_schema_wait_internal', 'schema lock internal thread wait time (usecs)'), @@ -323,6 +336,10 @@ connection_stats = [ LockStat('lock_table_wait_application', 'table lock application thread time waiting for the table lock (usecs)'), LockStat('lock_table_wait_internal', 'table lock internal thread time waiting for the table lock (usecs)'), LockStat('lock_table_write_count', 'table write lock acquisitions'), + LockStat('lock_txn_global_read_count', 'txn global read lock acquisitions'), + LockStat('lock_txn_global_wait_application', 'txn global lock application thread time waiting for the dhandle lock (usecs)'), + LockStat('lock_txn_global_wait_internal', 'txn global lock internal thread time waiting for the dhandle lock (usecs)'), + LockStat('lock_txn_global_write_count', 'txn global write lock acquisitions'), ########################################## # Logging statistics @@ -389,6 +406,32 @@ connection_stats = [ LSMStat('lsm_work_units_done', 'tree maintenance operations executed'), ########################################## + # Performance Histogram Stats + ########################################## + PerfHistStat('perf_hist_fsread_latency_gt1000', 'file system read latency histogram (bucket 6) - 1000ms+'), + PerfHistStat('perf_hist_fsread_latency_lt50', 'file system read latency histogram (bucket 1) - 10-49ms'), + PerfHistStat('perf_hist_fsread_latency_lt100', 'file system read latency histogram (bucket 2) - 50-99ms'), + PerfHistStat('perf_hist_fsread_latency_lt250', 'file system read latency histogram (bucket 3) - 100-249ms'), + PerfHistStat('perf_hist_fsread_latency_lt500', 'file system read latency histogram (bucket 4) - 250-499ms'), + PerfHistStat('perf_hist_fsread_latency_lt1000', 'file system read latency histogram (bucket 5) - 500-999ms'), + PerfHistStat('perf_hist_fswrite_latency_gt1000', 'file system write latency histogram (bucket 6) - 1000ms+'), + PerfHistStat('perf_hist_fswrite_latency_lt50', 'file system write latency histogram (bucket 1) - 10-49ms'), + PerfHistStat('perf_hist_fswrite_latency_lt100', 'file system write latency histogram (bucket 2) - 50-99ms'), + PerfHistStat('perf_hist_fswrite_latency_lt250', 'file system write latency histogram (bucket 3) - 100-249ms'), + PerfHistStat('perf_hist_fswrite_latency_lt500', 'file system write latency histogram (bucket 4) - 250-499ms'), + PerfHistStat('perf_hist_fswrite_latency_lt1000', 'file system write latency histogram (bucket 5) - 500-999ms'), + PerfHistStat('perf_hist_opread_latency_gt10000', 'operation read latency histogram (bucket 5) - 10000us+'), + PerfHistStat('perf_hist_opread_latency_lt250', 'operation read latency histogram (bucket 1) - 100-249us'), + PerfHistStat('perf_hist_opread_latency_lt500', 'operation read latency histogram (bucket 2) - 250-499us'), + PerfHistStat('perf_hist_opread_latency_lt1000', 'operation read latency histogram (bucket 3) - 500-999us'), + PerfHistStat('perf_hist_opread_latency_lt10000', 'operation read latency histogram (bucket 4) - 1000-9999us'), + PerfHistStat('perf_hist_opwrite_latency_gt10000', 'operation write latency histogram (bucket 5) - 10000us+'), + PerfHistStat('perf_hist_opwrite_latency_lt250', 'operation write latency histogram (bucket 1) - 100-249us'), + PerfHistStat('perf_hist_opwrite_latency_lt500', 'operation write latency histogram (bucket 2) - 250-499us'), + PerfHistStat('perf_hist_opwrite_latency_lt1000', 'operation write latency histogram (bucket 3) - 500-999us'), + PerfHistStat('perf_hist_opwrite_latency_lt10000', 'operation write latency histogram (bucket 4) - 1000-9999us'), + +########################################## # Reconciliation statistics ########################################## RecStat('rec_page_delete', 'pages deleted'), @@ -447,19 +490,29 @@ connection_stats = [ TxnStat('txn_checkpoint_time_recent', 'transaction checkpoint most recent time (msecs)', 'no_clear,no_scale'), TxnStat('txn_checkpoint_time_total', 'transaction checkpoint total time (msecs)', 'no_clear,no_scale'), TxnStat('txn_commit', 'transactions committed'), - TxnStat('txn_commit_queue_head', 'transactions commit timestamp queue inserts to head'), - TxnStat('txn_commit_queue_inserts', 'transactions commit timestamp queue inserts total'), - TxnStat('txn_commit_queue_len', 'transactions commit timestamp queue length'), + TxnStat('txn_commit_queue_empty', 'commit timestamp queue insert to empty'), + TxnStat('txn_commit_queue_head', 'commit timestamp queue inserts to head'), + TxnStat('txn_commit_queue_inserts', 'commit timestamp queue inserts total'), + TxnStat('txn_commit_queue_len', 'commit timestamp queue length'), TxnStat('txn_fail_cache', 'transaction failures due to cache overflow'), TxnStat('txn_pinned_checkpoint_range', 'transaction range of IDs currently pinned by a checkpoint', 'no_clear,no_scale'), TxnStat('txn_pinned_range', 'transaction range of IDs currently pinned', 'no_clear,no_scale'), TxnStat('txn_pinned_snapshot_range', 'transaction range of IDs currently pinned by named snapshots', 'no_clear,no_scale'), TxnStat('txn_pinned_timestamp', 'transaction range of timestamps currently pinned', 'no_clear,no_scale'), TxnStat('txn_pinned_timestamp_oldest', 'transaction range of timestamps pinned by the oldest timestamp', 'no_clear,no_scale'), - TxnStat('txn_read_queue_head', 'transactions read timestamp queue inserts to head'), - TxnStat('txn_read_queue_inserts', 'transactions read timestamp queue inserts total'), - TxnStat('txn_read_queue_len', 'transactions read timestamp queue length'), + TxnStat('txn_query_ts', 'query timestamp calls'), + TxnStat('txn_read_queue_empty', 'read timestamp queue insert to empty'), + TxnStat('txn_read_queue_head', 'read timestamp queue inserts to head'), + TxnStat('txn_read_queue_inserts', 'read timestamp queue inserts total'), + TxnStat('txn_read_queue_len', 'read timestamp queue length'), TxnStat('txn_rollback', 'transactions rolled back'), + TxnStat('txn_set_ts', 'set timestamp calls'), + TxnStat('txn_set_ts_commit', 'set timestamp commit calls'), + TxnStat('txn_set_ts_commit_upd', 'set timestamp commit updates'), + TxnStat('txn_set_ts_oldest', 'set timestamp oldest calls'), + TxnStat('txn_set_ts_oldest_upd', 'set timestamp oldest updates'), + TxnStat('txn_set_ts_stable', 'set timestamp stable calls'), + TxnStat('txn_set_ts_stable_upd', 'set timestamp stable updates'), TxnStat('txn_snapshots_created', 'number of named snapshots created'), TxnStat('txn_snapshots_dropped', 'number of named snapshots dropped'), TxnStat('txn_sync', 'transaction sync calls'), |