565 lines
27 KiB
Python
565 lines
27 KiB
Python
# Auto-generate statistics #defines, with initialization, clear and aggregate
|
|
# functions.
|
|
#
|
|
# NOTE: Statistics reports show individual objects as operations per second.
|
|
# All objects where that does not make sense should have the word 'currently'
|
|
# or the phrase 'in the cache' in their text description, for example, 'files
|
|
# currently open'.
|
|
# NOTE: All statistics descriptions must have a prefix string followed by ':'.
|
|
#
|
|
# Data-source statistics are normally aggregated across the set of underlying
|
|
# objects. Additional optionaly configuration flags are available:
|
|
# no_aggregate Ignore the value when aggregating statistics
|
|
# max_aggregate Take the maximum value when aggregating statistics
|
|
#
|
|
# Optional configuration flags:
|
|
# no_clear Value not cleared when statistics cleared
|
|
# no_scale Don't scale value per second in the logging tool script
|
|
#
|
|
# The no_clear flag is a little complicated: it means we don't clear the values
|
|
# when resetting statistics after each run (necessary when the WiredTiger engine
|
|
# is updating values that persist over multiple runs, for example the count of
|
|
# cursors), but it also causes the underlying display routines to not treat the
|
|
# change between displays as relative to the number of seconds, that is, it's an
|
|
# absolute value. The no_clear flag should be set in either case.
|
|
|
|
from operator import attrgetter
|
|
import sys
|
|
|
|
class Stat:
|
|
def __init__(self, name, tag, desc, flags=''):
|
|
self.name = name
|
|
self.desc = tag + ': ' + desc
|
|
self.flags = flags
|
|
|
|
def __cmp__(self, other):
|
|
return cmp(self.desc.lower(), other.desc.lower())
|
|
|
|
class AsyncStat(Stat):
|
|
prefix = 'async'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, AsyncStat.prefix, desc, flags)
|
|
class BlockStat(Stat):
|
|
prefix = 'block-manager'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, BlockStat.prefix, desc, flags)
|
|
class BtreeStat(Stat):
|
|
prefix = 'btree'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, BtreeStat.prefix, desc, flags)
|
|
class CacheStat(Stat):
|
|
prefix = 'cache'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, CacheStat.prefix, desc, flags)
|
|
class CompressStat(Stat):
|
|
prefix = 'compression'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, CompressStat.prefix, desc, flags)
|
|
class ConnStat(Stat):
|
|
prefix = 'connection'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, ConnStat.prefix, desc, flags)
|
|
class CursorStat(Stat):
|
|
prefix = 'cursor'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, CursorStat.prefix, desc, flags)
|
|
class DhandleStat(Stat):
|
|
prefix = 'data-handle'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, DhandleStat.prefix, desc, flags)
|
|
class JoinStat(Stat):
|
|
prefix = '' # prefix is inserted dynamically
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, JoinStat.prefix, desc, flags)
|
|
class LogStat(Stat):
|
|
prefix = 'log'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, LogStat.prefix, desc, flags)
|
|
class LSMStat(Stat):
|
|
prefix = 'LSM'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, LSMStat.prefix, desc, flags)
|
|
class RecStat(Stat):
|
|
prefix = 'reconciliation'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, RecStat.prefix, desc, flags)
|
|
class SessionStat(Stat):
|
|
prefix = 'session'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, SessionStat.prefix, desc, flags)
|
|
class TxnStat(Stat):
|
|
prefix = 'transaction'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, TxnStat.prefix, desc, flags)
|
|
class YieldStat(Stat):
|
|
prefix = 'thread-yield'
|
|
def __init__(self, name, desc, flags=''):
|
|
Stat.__init__(self, name, YieldStat.prefix, desc, flags)
|
|
|
|
##########################################
|
|
# Groupings of useful statistics:
|
|
# A pre-defined dictionary containing the group name as the key and the
|
|
# list of prefix tags that comprise that group.
|
|
##########################################
|
|
groups = {}
|
|
groups['cursor'] = [CursorStat.prefix, SessionStat.prefix]
|
|
groups['evict'] = [CacheStat.prefix, ConnStat.prefix, BlockStat.prefix]
|
|
groups['lsm'] = [LSMStat.prefix, TxnStat.prefix]
|
|
groups['memory'] = [CacheStat.prefix, ConnStat.prefix, RecStat.prefix]
|
|
groups['system'] = [ConnStat.prefix, DhandleStat.prefix, SessionStat.prefix]
|
|
|
|
##########################################
|
|
# CONNECTION statistics
|
|
##########################################
|
|
connection_stats = [
|
|
##########################################
|
|
# System statistics
|
|
##########################################
|
|
ConnStat('cond_wait', 'pthread mutex condition wait calls'),
|
|
ConnStat('file_open', 'files currently open', 'no_clear,no_scale'),
|
|
ConnStat('memory_allocation', 'memory allocations'),
|
|
ConnStat('memory_free', 'memory frees'),
|
|
ConnStat('memory_grow', 'memory re-allocations'),
|
|
ConnStat('read_io', 'total read I/Os'),
|
|
ConnStat('rwlock_read', 'pthread mutex shared lock read-lock calls'),
|
|
ConnStat('rwlock_write', 'pthread mutex shared lock write-lock calls'),
|
|
ConnStat('write_io', 'total write I/Os'),
|
|
|
|
##########################################
|
|
# Async API statistics
|
|
##########################################
|
|
AsyncStat('async_alloc_race', 'number of allocation state races'),
|
|
AsyncStat('async_alloc_view',
|
|
'number of operation slots viewed for allocation'),
|
|
AsyncStat('async_cur_queue', 'current work queue length'),
|
|
AsyncStat('async_flush', 'number of flush calls'),
|
|
AsyncStat('async_full', 'number of times operation allocation failed'),
|
|
AsyncStat('async_max_queue',
|
|
'maximum work queue length', 'no_clear,no_scale'),
|
|
AsyncStat('async_nowork', 'number of times worker found no work'),
|
|
AsyncStat('async_op_alloc', 'total allocations'),
|
|
AsyncStat('async_op_compact', 'total compact calls'),
|
|
AsyncStat('async_op_insert', 'total insert calls'),
|
|
AsyncStat('async_op_remove', 'total remove calls'),
|
|
AsyncStat('async_op_search', 'total search calls'),
|
|
AsyncStat('async_op_update', 'total update calls'),
|
|
|
|
##########################################
|
|
# Block manager statistics
|
|
##########################################
|
|
BlockStat('block_byte_map_read', 'mapped bytes read'),
|
|
BlockStat('block_byte_read', 'bytes read'),
|
|
BlockStat('block_byte_write', 'bytes written'),
|
|
BlockStat('block_map_read', 'mapped blocks read'),
|
|
BlockStat('block_preload', 'blocks pre-loaded'),
|
|
BlockStat('block_read', 'blocks read'),
|
|
BlockStat('block_write', 'blocks written'),
|
|
|
|
##########################################
|
|
# Cache and eviction statistics
|
|
##########################################
|
|
CacheStat('cache_bytes_dirty',
|
|
'tracked dirty bytes in the cache', 'no_clear,no_scale'),
|
|
CacheStat('cache_bytes_internal',
|
|
'tracked bytes belonging to internal pages in the cache',
|
|
'no_clear,no_scale'),
|
|
CacheStat('cache_bytes_inuse',
|
|
'bytes currently in the cache', 'no_clear,no_scale'),
|
|
CacheStat('cache_bytes_leaf',
|
|
'tracked bytes belonging to leaf pages in the cache',
|
|
'no_clear,no_scale'),
|
|
CacheStat('cache_bytes_max',
|
|
'maximum bytes configured', 'no_clear,no_scale'),
|
|
CacheStat('cache_bytes_overflow',
|
|
'tracked bytes belonging to overflow pages in the cache',
|
|
'no_clear,no_scale'),
|
|
CacheStat('cache_bytes_read', 'bytes read into cache'),
|
|
CacheStat('cache_bytes_write', 'bytes written from cache'),
|
|
CacheStat('cache_eviction_app', 'pages evicted by application threads'),
|
|
CacheStat('cache_eviction_checkpoint', 'checkpoint blocked page eviction'),
|
|
CacheStat('cache_eviction_clean', 'unmodified pages evicted'),
|
|
CacheStat('cache_eviction_deepen',
|
|
'page split during eviction deepened the tree'),
|
|
CacheStat('cache_eviction_dirty', 'modified pages evicted'),
|
|
CacheStat('cache_eviction_fail',
|
|
'pages selected for eviction unable to be evicted'),
|
|
CacheStat('cache_eviction_force',
|
|
'pages evicted because they exceeded the in-memory maximum'),
|
|
CacheStat('cache_eviction_force_delete',
|
|
'pages evicted because they had chains of deleted items'),
|
|
CacheStat('cache_eviction_force_fail',
|
|
'failed eviction of pages that exceeded the in-memory maximum'),
|
|
CacheStat('cache_eviction_hazard', 'hazard pointer blocked page eviction'),
|
|
CacheStat('cache_eviction_internal', 'internal pages evicted'),
|
|
CacheStat('cache_eviction_maximum_page_size',
|
|
'maximum page size at eviction', 'no_clear,no_scale'),
|
|
CacheStat('cache_eviction_queue_empty',
|
|
'eviction server candidate queue empty when topping up'),
|
|
CacheStat('cache_eviction_queue_not_empty',
|
|
'eviction server candidate queue not empty when topping up'),
|
|
CacheStat('cache_eviction_server_evicting',
|
|
'eviction server evicting pages'),
|
|
CacheStat('cache_eviction_server_not_evicting',
|
|
'eviction server populating queue, but not evicting pages'),
|
|
CacheStat('cache_eviction_slow',
|
|
'eviction server unable to reach eviction goal'),
|
|
CacheStat('cache_eviction_split_internal',
|
|
'internal pages split during eviction'),
|
|
CacheStat('cache_eviction_split_leaf', 'leaf pages split during eviction'),
|
|
CacheStat('cache_eviction_walk', 'pages walked for eviction'),
|
|
CacheStat('cache_eviction_worker_evicting',
|
|
'eviction worker thread evicting pages'),
|
|
CacheStat('cache_inmem_split', 'in-memory page splits'),
|
|
CacheStat('cache_inmem_splittable',
|
|
'in-memory page passed criteria to be split'),
|
|
CacheStat('cache_lookaside_insert', 'lookaside table insert calls'),
|
|
CacheStat('cache_lookaside_remove', 'lookaside table remove calls'),
|
|
CacheStat('cache_overhead', 'percentage overhead', 'no_clear,no_scale'),
|
|
CacheStat('cache_pages_dirty',
|
|
'tracked dirty pages in the cache', 'no_clear,no_scale'),
|
|
CacheStat('cache_pages_inuse',
|
|
'pages currently held in the cache', 'no_clear,no_scale'),
|
|
CacheStat('cache_read', 'pages read into cache'),
|
|
CacheStat('cache_read_lookaside',
|
|
'pages read into cache requiring lookaside entries'),
|
|
CacheStat('cache_write', 'pages written from cache'),
|
|
CacheStat('cache_write_lookaside',
|
|
'page written requiring lookaside records'),
|
|
CacheStat('cache_write_restore',
|
|
'pages written requiring in-memory restoration'),
|
|
|
|
##########################################
|
|
# Dhandle statistics
|
|
##########################################
|
|
DhandleStat('dh_conn_handle_count',
|
|
'connection data handles currently active', 'no_clear,no_scale'),
|
|
DhandleStat('dh_sweep_close', 'connection sweep dhandles closed'),
|
|
DhandleStat('dh_sweep_remove',
|
|
'connection sweep dhandles removed from hash list'),
|
|
DhandleStat('dh_sweep_ref', 'connection sweep candidate became referenced'),
|
|
DhandleStat('dh_sweep_tod', 'connection sweep time-of-death sets'),
|
|
DhandleStat('dh_sweeps', 'connection sweeps'),
|
|
DhandleStat('dh_session_handles', 'session dhandles swept'),
|
|
DhandleStat('dh_session_sweeps', 'session sweep attempts'),
|
|
|
|
##########################################
|
|
# Logging statistics
|
|
##########################################
|
|
LogStat('log_buffer_size', 'total log buffer size', 'no_clear,no_scale'),
|
|
LogStat('log_bytes_payload', 'log bytes of payload data'),
|
|
LogStat('log_bytes_written', 'log bytes written'),
|
|
LogStat('log_close_yields', 'yields waiting for previous log file close'),
|
|
LogStat('log_compress_len', 'total size of compressed records'),
|
|
LogStat('log_compress_mem', 'total in-memory size of compressed records'),
|
|
LogStat('log_compress_small', 'log records too small to compress'),
|
|
LogStat('log_compress_write_fails', 'log records not compressed'),
|
|
LogStat('log_compress_writes', 'log records compressed'),
|
|
LogStat('log_flush', 'log flush operations'),
|
|
LogStat('log_max_filesize', 'maximum log file size', 'no_clear,no_scale'),
|
|
LogStat('log_prealloc_files', 'pre-allocated log files prepared'),
|
|
LogStat('log_prealloc_max',
|
|
'number of pre-allocated log files to create', 'no_clear,no_scale'),
|
|
LogStat('log_prealloc_missed',
|
|
'pre-allocated log files not ready and missed'),
|
|
LogStat('log_prealloc_used', 'pre-allocated log files used'),
|
|
LogStat('log_release_write_lsn', 'log release advances write LSN'),
|
|
LogStat('log_scan_records', 'records processed by log scan'),
|
|
LogStat('log_scan_rereads', 'log scan records requiring two reads'),
|
|
LogStat('log_scans', 'log scan operations'),
|
|
LogStat('log_slot_closes', 'consolidated slot closures'),
|
|
LogStat('log_slot_coalesced', 'written slots coalesced'),
|
|
LogStat('log_slot_consolidated', 'logging bytes consolidated'),
|
|
LogStat('log_slot_joins', 'consolidated slot joins'),
|
|
LogStat('log_slot_races', 'consolidated slot join races'),
|
|
LogStat('log_slot_switch_busy', 'busy returns attempting to switch slots'),
|
|
LogStat('log_slot_transitions', 'consolidated slot join transitions'),
|
|
LogStat('log_slot_unbuffered', 'consolidated slot unbuffered writes'),
|
|
LogStat('log_sync', 'log sync operations'),
|
|
LogStat('log_sync_dir', 'log sync_dir operations'),
|
|
LogStat('log_write_lsn', 'log server thread advances write LSN'),
|
|
LogStat('log_writes', 'log write operations'),
|
|
LogStat('log_zero_fills', 'log files manually zero-filled'),
|
|
|
|
##########################################
|
|
# Reconciliation statistics
|
|
##########################################
|
|
RecStat('rec_pages', 'page reconciliation calls'),
|
|
RecStat('rec_page_delete', 'pages deleted'),
|
|
RecStat('rec_page_delete_fast', 'fast-path pages deleted'),
|
|
RecStat('rec_pages_eviction', 'page reconciliation calls for eviction'),
|
|
RecStat('rec_split_stashed_bytes',
|
|
'split bytes currently awaiting free', 'no_clear,no_scale'),
|
|
RecStat('rec_split_stashed_objects',
|
|
'split objects currently awaiting free', 'no_clear,no_scale'),
|
|
|
|
##########################################
|
|
# Transaction statistics
|
|
##########################################
|
|
TxnStat('txn_begin', 'transaction begins'),
|
|
TxnStat('txn_checkpoint', 'transaction checkpoints'),
|
|
TxnStat('txn_checkpoint_generation',
|
|
'transaction checkpoint generation', 'no_clear,no_scale'),
|
|
TxnStat('txn_checkpoint_running',
|
|
'transaction checkpoint currently running', 'no_clear,no_scale'),
|
|
TxnStat('txn_checkpoint_time_max',
|
|
'transaction checkpoint max time (msecs)', 'no_clear,no_scale'),
|
|
TxnStat('txn_checkpoint_time_min',
|
|
'transaction checkpoint min time (msecs)', 'no_clear,no_scale'),
|
|
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_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_snapshots_created', 'number of named snapshots created'),
|
|
TxnStat('txn_snapshots_dropped', 'number of named snapshots dropped'),
|
|
TxnStat('txn_rollback', 'transactions rolled back'),
|
|
TxnStat('txn_sync', 'transaction sync calls'),
|
|
|
|
##########################################
|
|
# LSM statistics
|
|
##########################################
|
|
LSMStat('lsm_checkpoint_throttle', 'sleep for LSM checkpoint throttle'),
|
|
LSMStat('lsm_merge_throttle', 'sleep for LSM merge throttle'),
|
|
LSMStat('lsm_rows_merged', 'rows merged in an LSM tree'),
|
|
LSMStat('lsm_work_queue_app',
|
|
'application work units currently queued', 'no_clear,no_scale'),
|
|
LSMStat('lsm_work_queue_manager',
|
|
'merge work units currently queued', 'no_clear,no_scale'),
|
|
LSMStat('lsm_work_queue_max', 'tree queue hit maximum'),
|
|
LSMStat('lsm_work_queue_switch',
|
|
'switch work units currently queued', 'no_clear,no_scale'),
|
|
LSMStat('lsm_work_units_created', 'tree maintenance operations scheduled'),
|
|
LSMStat('lsm_work_units_discarded',
|
|
'tree maintenance operations discarded'),
|
|
LSMStat('lsm_work_units_done', 'tree maintenance operations executed'),
|
|
|
|
##########################################
|
|
# Session operations
|
|
##########################################
|
|
SessionStat('session_cursor_open',
|
|
'open cursor count', 'no_clear,no_scale'),
|
|
SessionStat('session_open', 'open session count', 'no_clear,no_scale'),
|
|
|
|
##########################################
|
|
# Total cursor operations
|
|
##########################################
|
|
CursorStat('cursor_create', 'cursor create calls'),
|
|
CursorStat('cursor_insert', 'cursor insert calls'),
|
|
CursorStat('cursor_next', 'cursor next calls'),
|
|
CursorStat('cursor_prev', 'cursor prev calls'),
|
|
CursorStat('cursor_remove', 'cursor remove calls'),
|
|
CursorStat('cursor_reset', 'cursor reset calls'),
|
|
CursorStat('cursor_restart', 'cursor restarted searches'),
|
|
CursorStat('cursor_search', 'cursor search calls'),
|
|
CursorStat('cursor_search_near', 'cursor search near calls'),
|
|
CursorStat('cursor_truncate', 'truncate calls'),
|
|
CursorStat('cursor_update', 'cursor update calls'),
|
|
|
|
##########################################
|
|
# Yield statistics
|
|
##########################################
|
|
YieldStat('page_busy_blocked', 'page acquire busy blocked'),
|
|
YieldStat('page_forcible_evict_blocked', 'page acquire eviction blocked'),
|
|
YieldStat('page_locked_blocked', 'page acquire locked blocked'),
|
|
YieldStat('page_read_blocked', 'page acquire read blocked'),
|
|
YieldStat('page_sleep', 'page acquire time sleeping (usecs)'),
|
|
]
|
|
|
|
connection_stats = sorted(connection_stats, key=attrgetter('name'))
|
|
|
|
##########################################
|
|
# Data source statistics
|
|
##########################################
|
|
dsrc_stats = [
|
|
##########################################
|
|
# Session operations
|
|
##########################################
|
|
SessionStat('session_compact', 'object compaction'),
|
|
SessionStat('session_cursor_open',
|
|
'open cursor count', 'no_clear,no_scale'),
|
|
|
|
##########################################
|
|
# Cursor operations
|
|
##########################################
|
|
CursorStat('cursor_create', 'create calls'),
|
|
CursorStat('cursor_insert', 'insert calls'),
|
|
CursorStat('cursor_insert_bulk', 'bulk-loaded cursor-insert calls'),
|
|
CursorStat('cursor_insert_bytes',
|
|
'cursor-insert key and value bytes inserted'),
|
|
CursorStat('cursor_next', 'next calls'),
|
|
CursorStat('cursor_prev', 'prev calls'),
|
|
CursorStat('cursor_remove', 'remove calls'),
|
|
CursorStat('cursor_remove_bytes', 'cursor-remove key bytes removed'),
|
|
CursorStat('cursor_reset', 'reset calls'),
|
|
CursorStat('cursor_restart', 'restarted searches'),
|
|
CursorStat('cursor_search', 'search calls'),
|
|
CursorStat('cursor_search_near', 'search near calls'),
|
|
CursorStat('cursor_truncate', 'truncate calls'),
|
|
CursorStat('cursor_update', 'update calls'),
|
|
CursorStat('cursor_update_bytes', 'cursor-update value bytes updated'),
|
|
|
|
##########################################
|
|
# Btree statistics
|
|
##########################################
|
|
BtreeStat('btree_checkpoint_generation',
|
|
'btree checkpoint generation', 'no_clear,no_scale'),
|
|
BtreeStat('btree_column_deleted',
|
|
'column-store variable-size deleted values', 'no_scale'),
|
|
BtreeStat('btree_column_fix',
|
|
'column-store fixed-size leaf pages', 'no_scale'),
|
|
BtreeStat('btree_column_internal',
|
|
'column-store internal pages', 'no_scale'),
|
|
BtreeStat('btree_column_rle',
|
|
'column-store variable-size RLE encoded values', 'no_scale'),
|
|
BtreeStat('btree_column_variable',
|
|
'column-store variable-size leaf pages', 'no_scale'),
|
|
BtreeStat('btree_compact_rewrite', 'pages rewritten by compaction'),
|
|
BtreeStat('btree_entries', 'number of key/value pairs', 'no_scale'),
|
|
BtreeStat('btree_fixed_len', 'fixed-record size', 'no_aggregate,no_scale'),
|
|
BtreeStat('btree_maximum_depth',
|
|
'maximum tree depth', 'max_aggregate,no_scale'),
|
|
BtreeStat('btree_maxintlkey',
|
|
'maximum internal page key size', 'max_aggregate,no_scale'),
|
|
BtreeStat('btree_maxintlpage',
|
|
'maximum internal page size', 'max_aggregate,no_scale'),
|
|
BtreeStat('btree_maxleafkey',
|
|
'maximum leaf page key size', 'max_aggregate,no_scale'),
|
|
BtreeStat('btree_maxleafpage',
|
|
'maximum leaf page size', 'max_aggregate,no_scale'),
|
|
BtreeStat('btree_maxleafvalue',
|
|
'maximum leaf page value size', 'max_aggregate,no_scale'),
|
|
BtreeStat('btree_overflow', 'overflow pages', 'no_scale'),
|
|
BtreeStat('btree_row_internal', 'row-store internal pages', 'no_scale'),
|
|
BtreeStat('btree_row_leaf', 'row-store leaf pages', 'no_scale'),
|
|
|
|
##########################################
|
|
# LSM statistics
|
|
##########################################
|
|
LSMStat('bloom_count', 'bloom filters in the LSM tree', 'no_scale'),
|
|
LSMStat('bloom_false_positive', 'bloom filter false positives'),
|
|
LSMStat('bloom_hit', 'bloom filter hits'),
|
|
LSMStat('bloom_miss', 'bloom filter misses'),
|
|
LSMStat('bloom_page_evict', 'bloom filter pages evicted from cache'),
|
|
LSMStat('bloom_page_read', 'bloom filter pages read into cache'),
|
|
LSMStat('bloom_size', 'total size of bloom filters', 'no_scale'),
|
|
LSMStat('lsm_checkpoint_throttle', 'sleep for LSM checkpoint throttle'),
|
|
LSMStat('lsm_chunk_count', 'chunks in the LSM tree', 'no_scale'),
|
|
LSMStat('lsm_generation_max',
|
|
'highest merge generation in the LSM tree', 'max_aggregate,no_scale'),
|
|
LSMStat('lsm_lookup_no_bloom',
|
|
'queries that could have benefited ' +
|
|
'from a Bloom filter that did not exist'),
|
|
LSMStat('lsm_merge_throttle', 'sleep for LSM merge throttle'),
|
|
|
|
##########################################
|
|
# Block manager statistics
|
|
##########################################
|
|
BlockStat('allocation_size',
|
|
'file allocation unit size', 'no_aggregate,no_scale'),
|
|
BlockStat('block_alloc', 'blocks allocated'),
|
|
BlockStat('block_checkpoint_size', 'checkpoint size', 'no_scale'),
|
|
BlockStat('block_extension', 'allocations requiring file extension'),
|
|
BlockStat('block_free', 'blocks freed'),
|
|
BlockStat('block_magic', 'file magic number', 'no_aggregate,no_scale'),
|
|
BlockStat('block_major',
|
|
'file major version number', 'no_aggregate,no_scale'),
|
|
BlockStat('block_minor', 'minor version number', 'no_aggregate,no_scale'),
|
|
BlockStat('block_reuse_bytes', 'file bytes available for reuse'),
|
|
BlockStat('block_size', 'file size in bytes', 'no_scale'),
|
|
|
|
##########################################
|
|
# Cache and eviction statistics
|
|
##########################################
|
|
CacheStat('cache_bytes_read', 'bytes read into cache'),
|
|
CacheStat('cache_bytes_write', 'bytes written from cache'),
|
|
CacheStat('cache_eviction_checkpoint', 'checkpoint blocked page eviction'),
|
|
CacheStat('cache_eviction_clean', 'unmodified pages evicted'),
|
|
CacheStat('cache_eviction_deepen',
|
|
'page split during eviction deepened the tree'),
|
|
CacheStat('cache_eviction_dirty', 'modified pages evicted'),
|
|
CacheStat('cache_eviction_fail',
|
|
'data source pages selected for eviction unable to be evicted'),
|
|
CacheStat('cache_eviction_hazard', 'hazard pointer blocked page eviction'),
|
|
CacheStat('cache_eviction_internal', 'internal pages evicted'),
|
|
CacheStat('cache_eviction_split_internal',
|
|
'internal pages split during eviction'),
|
|
CacheStat('cache_eviction_split_leaf', 'leaf pages split during eviction'),
|
|
CacheStat('cache_inmem_split', 'in-memory page splits'),
|
|
CacheStat('cache_inmem_splittable',
|
|
'in-memory page passed criteria to be split'),
|
|
CacheStat('cache_overflow_value',
|
|
'overflow values cached in memory', 'no_scale'),
|
|
CacheStat('cache_read', 'pages read into cache'),
|
|
CacheStat('cache_read_lookaside',
|
|
'pages read into cache requiring lookaside entries'),
|
|
CacheStat('cache_read_overflow', 'overflow pages read into cache'),
|
|
CacheStat('cache_write', 'pages written from cache'),
|
|
CacheStat('cache_write_lookaside',
|
|
'page written requiring lookaside records'),
|
|
CacheStat('cache_write_restore',
|
|
'pages written requiring in-memory restoration'),
|
|
|
|
##########################################
|
|
# Compression statistics
|
|
##########################################
|
|
CompressStat('compress_raw_fail',
|
|
'raw compression call failed, no additional data available'),
|
|
CompressStat('compress_raw_fail_temporary',
|
|
'raw compression call failed, additional data available'),
|
|
CompressStat('compress_raw_ok', 'raw compression call succeeded'),
|
|
CompressStat('compress_read', 'compressed pages read'),
|
|
CompressStat('compress_write', 'compressed pages written'),
|
|
CompressStat('compress_write_fail', 'page written failed to compress'),
|
|
CompressStat('compress_write_too_small',
|
|
'page written was too small to compress'),
|
|
|
|
##########################################
|
|
# Reconciliation statistics
|
|
##########################################
|
|
RecStat('rec_dictionary', 'dictionary matches'),
|
|
RecStat('rec_multiblock_internal', 'internal page multi-block writes'),
|
|
RecStat('rec_multiblock_leaf', 'leaf page multi-block writes'),
|
|
RecStat('rec_multiblock_max',
|
|
'maximum blocks required for a page', 'max_aggregate,no_scale'),
|
|
RecStat('rec_overflow_key_internal', 'internal-page overflow keys'),
|
|
RecStat('rec_overflow_key_leaf', 'leaf-page overflow keys'),
|
|
RecStat('rec_overflow_value', 'overflow values written'),
|
|
RecStat('rec_page_delete', 'pages deleted'),
|
|
RecStat('rec_page_delete_fast', 'fast-path pages deleted'),
|
|
RecStat('rec_page_match', 'page checksum matches'),
|
|
RecStat('rec_pages', 'page reconciliation calls'),
|
|
RecStat('rec_pages_eviction', 'page reconciliation calls for eviction'),
|
|
RecStat('rec_prefix_compression',
|
|
'leaf page key bytes discarded using prefix compression'),
|
|
RecStat('rec_suffix_compression',
|
|
'internal page key bytes discarded using suffix compression'),
|
|
|
|
##########################################
|
|
# Transaction statistics
|
|
##########################################
|
|
TxnStat('txn_update_conflict', 'update conflicts'),
|
|
]
|
|
|
|
dsrc_stats = sorted(dsrc_stats, key=attrgetter('name'))
|
|
|
|
##########################################
|
|
# Cursor Join statistics
|
|
##########################################
|
|
join_stats = [
|
|
JoinStat('accesses', 'accesses'),
|
|
JoinStat('actual_count', 'actual count of items'),
|
|
JoinStat('bloom_false_positive', 'bloom filter false positives'),
|
|
]
|
|
|
|
join_stats = sorted(join_stats, key=attrgetter('name'))
|