public class EnvironmentStats
extends java.lang.Object
implements java.io.Serializable
Each statistic has a name and a getter method in this class. For example,
the cacheTotalBytes
stat is returned by the getCacheTotalBytes()
method. Statistics are categorized into several
groups, for example, cacheTotalBytes
is in the Cache
group. Each stat and group has a name and a description.
Viewing the statistics through toString()
shows the stat names
and values organized by group. Viewing the stats with toStringVerbose()
additionally shows the description of each stat and
group.
Statistics are periodically output in CSV format to the je.stat.csv file
(see EnvironmentConfig.STATS_COLLECT
). The column header in the .csv
file has group:stat
format, where 'group' is the group name and
'stat' is the stat name. In Oracle NoSQL DB, in the addition to the .csv
file, JE stats are output in the .stat files.
Stat values may also be obtained via JMX using the JEMonitor mbean.
In Oracle NoSQL DB, JE stats are obtained via a different JMX interface in
JSON format. The JSON format uses property names of the form group_stat
where 'group' is the group name and 'stat' is the stat name.
The stat groups are listed below. Each group name links to a summary of the statistics in the group.
Group Name | Description |
---|---|
"Cache" | "The main cache resides in the Java heap and holds data, keys, Btree internal nodes, locks and JE metadata." |
"OffHeap" | "The optional off-heap cache resides outside the Java heap and serves as an overflow area for the main cache." |
"I/O" | "The I/O portion of the append-only storage system includes access to data files and caching of file handles." |
"Cleaning" | "Log cleaning involves garbage collection of data files in the append-only storage system." |
"Node Compression" | "Deleted records are removed from Btree internal nodes asynchronously and nodes are deleted when they become empty." |
"Checkpoints" | "Dirty Btree internal nodes are written to the data log periodically to bound recovery time." |
"Locks" | "Record locking is used to provide transactional capabilities." |
"Environment" | "Miscellaneous environment wide statistics." |
The following sections describe each group of stats along with some common strategies for using them for monitoring and performance tuning.
Group Name: "Cache"
Description: "The main cache resides in the Java heap and holds data, keys, Btree internal nodes, locks and JE metadata."
Group Name: "OffHeap"
Description: "The optional off-heap cache resides outside the Java heap and serves as an overflow area for the main cache."
The JE cache consists of the main (in-heap) cache and and optional off-heap cache. The vast majority of the cache is occupied by Btree nodes, including internal nodes (INs) and leaf nodes (LNs). INs contain record keys while LNs contain record data.
Each IN refers to a configured maximum number of child nodes (EnvironmentConfig.NODE_MAX_ENTRIES
). The INs form a Btree of at least 2
levels. With a large data set the Btree will normally have 4 or 5 levels.
The top level is a single node, the root IN. Levels are numbered from the
bottom up, starting with level 1 for bottom level INs (BINs). Levels are
added at the top when the root IN splits.
When an off-heap cache is configured, it serves as an overflow for the
main cache. See EnvironmentConfig.MAX_OFF_HEAP_MEMORY
.
Operation performance is often directly proportional to how much of the
active data set is cached. BINs and LNs form the vast majority of the cache.
Caching of BINs and LNs have different performance impacts, and behavior
varies depending on whether an off-heap cache is configured and which CacheMode
is used.
Main cache current usage is indicated by the following stats. Note that there is currently no stat for the number of LNs in the main cache.
Off-heap cache current usage is indicated by:
A cache miss is considered a miss only when the object is not found in either cache. Misses often result in file I/O and are a primary indicator of cache performance. Fetches (access requests) and misses are indicated by:
getNLNsFetch()
getNLNsFetchMiss()
getNBINsFetch()
getNBINsFetchMiss()
getNBINDeltasFetchMiss()
getNFullBINsMiss()
getNUpperINsFetch()
getNUpperINsFetchMiss()
When the number of LN misses (nLNsFetchMiss
) or the number of
BIN misses (nBINsFetchMiss + nFullBINsMiss
) are significant, the
JE cache may be undersized, as discussed below. But note that it is not
practical to correlate the number of fetches and misses directly to
application operations, because LNs are sometimes
embedded
, BINs are sometimes
accessed multiple times per operation, and internal Btree accesses are
included in the stat values.
Ideally, all BINs and LNs for the active data set should fit in cache so
that operations do not result in fetch misses, which often perform random
read I/O. When this is not practical, which is often the case for large
data sets, the next best thing is to ensure that all BINs fit in cache,
so that an operation will perform at most one random read I/O to fetch
the LN. The DbCacheSize
javadoc describes how to size the cache
to ensure that all BINs and/or LNs fit in cache.
Normally EnvironmentConfig.MAX_MEMORY_PERCENT
determines the JE
cache size as a value relative to the JVM heap size, i.e., the heap size
determines the cache size.
For configuring cache size and behavior, see:
EnvironmentConfig.MAX_MEMORY_PERCENT
EnvironmentConfig.MAX_MEMORY
EnvironmentConfig.MAX_OFF_HEAP_MEMORY
EnvironmentMutableConfig.setCacheMode(CacheMode)
CacheMode
DbCacheSize
When using Oracle NoSQL DB, a sizing exercise and DbCacheSize
are
used to determine the cache size needed to hold all BINs in memory. The
memory available to each node is divided between a 32 GB heap for the JVM
process (so that CompressedOops may be used) and the off-heap cache (when
more than 32 GB of memory is available).
It is also important not to configured the cache size too large, relative
to the JVM heap size. If there is not enough free space in the heap, Java
GC pauses may become a problem. Increasing the default value for MAX_MEMORY_PERCENT
, or setting MAX_MEMORY
(which overrides MAX_MEMORY_PERCENT
), should be done carefully.
Java GC performance may also be improved by using CacheMode.EVICT_LN
. Record data sizes should also be kept below 1 MB to
avoid "humongous objects" (see Java GC documentation).
When using Oracle NoSQL DB, by default, MAX_MEMORY_PERCENT
is
set to 70% and CacheMode.EVICT_LN
is used. The LOB (large object)
API is implemented using multiple JE records per LOB where the data size of
each record is 1 MB or less.
When a shared cache is configured, the main and off-heap cache may be shared by multiple JE Environments in a single JVM process. See:
When using Oracle NoSQL DB, the JE shared cache feature is not used because each node only uses a single JE Environment.
Since a large portion of an IN consists of record keys, JE uses
key prefix compression
.
Ideally, key suffixes are small enough to be stored using the compact key format
. The
following stat indicates the number of INs using this compact format:
Configuration params impacting key prefixing and the compact key format are:
Enabling key prefixing for all databases is strongly recommended. When using Oracle NoSQL DB, key prefixing is always enabled.
Another configuration param impacting BIN cache size is TREE_MAX_EMBEDDED_LN
. There is currently no stat indicating the number of
embedded LNs. See:
Although the Btree normally occupies the vast majority of the cache, it is possible that record locks occupy unexpected amounts of cache when large transactions are used, or when cursors or transactions are left open due to application bugs. The following stat indicates the amount of cache used by record locks:
To reduce the amount of memory used for record locks:
LockMode.READ_COMMITTED
isolation or use a null Transaction (which
implies ReadCommitted). With ReadCommitted isolation, locks are
released after each read operation. Using LockMode.READ_UNCOMMITTED
will also avoid record locks, but does not
provide any transactional guarantees.Note that the above guidelines are also important for reducing contention when records are accessed concurrently from multiple threads and transactions. When using Oracle NoSQL DB, the application should avoid performing a large number of write operations in a single request. For read operations, NoSQL DB uses ReadCommitted isolation to avoid accumulation of locks.
Another unexpected use of cache is possible when using a DiskOrderedCursor
or when calling Database.count()
. The amount of
cache used by these operations is indicated by:
DiskOrderedCursor
and Database.count
should normally be
explicitly constrained to use a maximum amount of cache memory. See:
Oracle NoSQL DB does not currently use DiskOrderedCursor
or
Database.count
.
Eviction is removal of Btree node from the cache in order to make room
for newly added nodes. See CacheMode
for a description of
eviction.
Normally eviction is performed via background threads in the eviction thread pools. Disabling the eviction pool threads is not recommended.
Eviction stats are important indicator of cache efficiency and provide a deeper understanding of cache behavior. Main cache eviction is indicated by:
Note that objects evicted from the main cache are moved to the off-heap cache whenever possible.
Off-heap cache eviction is indicated by:
getOffHeapLNsEvicted()
getOffHeapNodesMutated()
getOffHeapNodesEvicted()
getOffHeapDirtyNodesEvicted()
When analyzing Java GC performance, the most relevant stats are NLNsEvicted
, NNodesMutated
and NNodesEvicted
, which all
indicate eviction from the main cache based on LRU. Large values for these
stats indicate that many old generation Java objects are being GC'd, which
is often a cause of GC pauses.
Note that CacheMode.EVICT_LN
is used or when LNs are embedded
, NLNsEvicted
will
be close to zero because LNs are not evicted based on LRU. And if an
off-heap cache is configured, NNodesMutated
will be close to zero
because BIN mutation takes place in the off-heap cache. If any of the three
values are large, this points to a potential GC performance problem. The GC
logs should be consulted to confirm this.
Large values for NDirtyNodesEvicted
or OffHeapDirtyNodesEvicted
indicate that the cache is severely undersized and
there is a risk of using all available disk space and severe performance
problems. Dirty nodes are evicted last (after evicting all non-dirty nodes)
because they must be written to disk. This causes excessive writing and JE
log cleaning may be unproductive.
Note that when an off-heap cache is configured, NDirtyNodesEvicted
will be zero because dirty nodes in the main cache are
moved to the off-heap cache if they don't fit in the main cache, and are
evicted completely and written to disk only when they don't fit in the
off-heap cache.
Another type of eviction tuning for the main cache involves changing the number of bytes evicted each time an evictor thread is awoken:
If the number of bytes is too large, it may cause a noticeable spike in eviction activity, reducing resources available to other threads. If the number of bytes is too small, the overhead of waking the evictor threads more often may be noticeable. The default values for this parameter is generally a good compromise. This parameter also impacts critical eviction, which is described next.
Note that the corresponding parameter for the off-heap cache, EnvironmentConfig.OFFHEAP_EVICT_BYTES
, works differently and is described
in the next section.
The following stats indicate that critical eviction is occurring:
getNBytesEvictedCritical()
getNBytesEvictedCacheMode()
getNBytesEvictedDeamon()
getNBytesEvictedEvictorThread()
getNBytesEvictedManual()
getOffHeapCriticalNodesTargeted()
getOffHeapNodesTargeted()
Eviction is performed by eviction pool threads, calls to Environment.evictMemory()
in application background threads, or via CacheMode.EVICT_LN
or CacheMode.EVICT_BIN
. If these mechanisms are
not sufficient to evict memory from cache as quickly as CRUD operations are
adding memory to cache, then critical eviction comes into play. Critical
eviction is performed in-line in the thread performing the CRUD operation,
which is very undesirable since it increases operation latency.
Critical eviction in the main cache is indicated by large values for
NBytesEvictedCritical
, as compared to the other NBytesEvictedXXX
stats. Critical eviction in the off-heap cache is
indicated by large values for OffHeapCriticalNodesTargeted
compared
to OffHeapNodesTargeted
.
Additional stats indicating that background eviction threads may be insufficient are:
Critical eviction can sometimes be reduced by changing EnvironmentConfig.EVICTOR_CRITICAL_PERCENTAGE
or modifying the eviction
thread pool parameters.
EnvironmentConfig.EVICTOR_CRITICAL_PERCENTAGE
EnvironmentConfig.EVICTOR_CORE_THREADS
EnvironmentConfig.EVICTOR_MAX_THREADS
EnvironmentConfig.EVICTOR_KEEP_ALIVE
EnvironmentConfig.OFFHEAP_CORE_THREADS
EnvironmentConfig.OFFHEAP_MAX_THREADS
EnvironmentConfig.OFFHEAP_KEEP_ALIVE
When using Oracle NoSQL DB, EVICTOR_CRITICAL_PERCENTAGE
is set to
20% rather than using the JE default of 0%.
In the main cache, critical eviction uses the same parameter as background eviction for determining how many bytes to evict at one time:
Be careful when increasing this value, since this will cause longer operation latencies when critical eviction is occurring in the main cache.
The corresponding parameter for the off-heap cache, OFFHEAP_EVICT_BYTES
, works differently:
Unlike in the main cache, OFFHEAP_EVICT_BYTES
defines the goal
for background eviction to be below MAX_OFF_HEAP_MEMORY
. The
background evictor threads for the off-heap cache attempt to maintain the
size of the off-heap cache at MAX_OFF_HEAP_MEMORY -
OFFHEAP_EVICT_BYTES
. If the off-heap cache size grows larger than MAX_OFF_HEAP_MEMORY
, critical off-heap eviction will occur. The default
value for OFFHEAP_EVICT_BYTES
is fairly large to ensure that
critical eviction does not occur. Be careful when lowering this value.
This approach is intended to prevent the off-heap cache from exceeding
its maximum size. If the maximum is exceeded, there is a danger that the
JVM process will be killed by the OS. See getOffHeapAllocFailures()
.
Another common tuning issue involves thread contention on the cache LRU lists, although there is no stat to indicate such contention. Since each time a node is accessed it must be moved to the end of the LRU list, a single LRU list would cause contention among threads performing CRUD operations. By default there are 4 LRU lists for each cache. If contention is noticeable on internal Evictor.LRUList or OffHeapCache.LRUList methods, consider increasing the number of LRU lists:
However, note that increasing the number of LRU lists will decrease the accuracy of the LRU.
The following cache stats are unlikely to be needed for monitoring or tuning, but are sometimes useful for debugging and testing.
getDataBytes()
getAdminBytes()
getDataAdminBytes()
getNNodesTargeted()
getNNodesStripped()
getNNodesPutBack()
getNNodesMovedToDirtyLRU()
getNNodesSkipped()
getNRootNodesEvicted()
getNBINsFetchMissRatio()
getNINSparseTarget()
getNINNoTarget()
getMixedLRUSize()
getDirtyLRUSize()
getOffHeapAllocFailures()
getOffHeapAllocOverflows()
getOffHeapNodesStripped()
getOffHeapNodesSkipped()
getOffHeapLNsLoaded()
getOffHeapLNsStored()
getOffHeapBINsLoaded()
getOffHeapBINsStored()
getOffHeapTotalBlocks()
getOffHeapLRUSize()
Likewise, the following cache configuration params are unlikely to be needed for tuning, but are sometimes useful for debugging and testing.
Modifier and Type | Method and Description |
---|---|
long |
getActiveLogSize()
"Bytes used by all active data files: files required for basic JE operation."
|
long |
getAdminBytes()
"Number of bytes of JE main cache used for cleaner and checkpointer metadata, in bytes."
|
long |
getAvailableLogSize()
"Bytes available for write operations when unprotected reserved files are deleted: free space + reservedLogSize - protectedLogSize."
|
long |
getAvgBatchCacheMode()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getAvgBatchCritical()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getAvgBatchDaemon()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getAvgBatchEvictorThread()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getAvgBatchManual()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getBufferBytes()
The total memory currently consumed by log buffers, in bytes.
|
long |
getCacheDataBytes()
Deprecated.
Please use
getDataBytes() to get the amount of cache
used for data and use getAdminBytes() , getLockBytes() and
getBufferBytes() to get other components of the total cache usage
(getCacheTotalBytes() ). |
long |
getCacheTotalBytes()
"Total amount of JE main cache in use, in bytes."
|
int |
getCleanerBacklog()
Deprecated.
in 7.0, always returns zero. Use
getCurrentMinUtilization() and getCurrentMaxUtilization() to
monitor cleaner behavior. |
float |
getCorrectedAvgLNSize()
Deprecated.
in JE 5.0.56, use
getCorrectedAvgLNSize() instead. |
int |
getCurrentMaxUtilization()
"The current maximum (upper bound) log utilization as a percentage."
|
int |
getCurrentMinUtilization()
"The current minimum (lower bound) log utilization as a percentage."
|
long |
getCursorsBins()
The number of BINs encountered by the INCompressor that had cursors
referring to them when the compressor ran.
|
long |
getDataAdminBytes()
"Amount of JE main cache used for holding per-database cleaner utilization metadata, in bytes."
|
long |
getDataBytes()
"Amount of JE main cache used for holding data, keys and internal Btree nodes, in bytes."
|
long |
getDbClosedBins()
The number of BINs encountered by the INCompressor that had their
database closed between the time they were put on the compressor queue
and when the compressor ran.
|
long |
getDirtyLRUSize()
"Number of INs in the dirty/priority-2 LRU "
|
long |
getDOSBytes()
"Amount of JE main cache consumed by disk-ordered cursor and Database.count operations, in bytes."
|
long |
getEndOfLog()
The location of the next entry to be written to the log.
|
long |
getEnvironmentCreationTime()
The time the Environment was created.
|
float |
getEstimatedAvgLNSize()
Deprecated.
in JE 5.0.56, use
getCorrectedAvgLNSize() instead. |
int |
getFileDeletionBacklog()
Deprecated.
in 7.5, always returns zero. Use
getProtectedLogSize() getProtectedLogSizeMap() to monitor
file protection. |
long |
getFSyncMaxTime()
The maximum number of milliseconds used to perform a single fsync.
|
long |
getFSyncTime()
The total number of milliseconds used to perform fsyncs.
|
long |
getInCompQueueSize()
The number of entries in the INCompressor queue when the getStats()
call was made.
|
long |
getLastCheckpointEnd()
The location in the log of the last checkpoint end.
|
long |
getLastCheckpointId()
The Id of the last checkpoint.
|
long |
getLastCheckpointInterval()
Byte length from last checkpoint start to the previous checkpoint start.
|
long |
getLastCheckpointStart()
The location in the log of the last checkpoint start.
|
int |
getLastKnownUtilization()
Deprecated.
in JE 6.5, use
getCurrentMinUtilization() or
getCurrentMaxUtilization() instead. |
float |
getLNSizeCorrectionFactor()
Deprecated.
in JE 6.3. Adjustments are no longer needed because LN log
sizes have been stored in the Btree since JE 6.0.
|
long |
getLockBytes()
"Number of bytes of JE cache used for holding locks and transactions, in bytes."
|
long |
getMixedLRUSize()
"Number of INs in the mixed/priority-1 LRU "
|
int |
getNAcquiresNoWaiters()
Number of acquires of lock table latch with no contention.
|
int |
getNAcquiresNoWaitSuccessful()
Number of successful no-wait acquires of the lock table latch.
|
int |
getNAcquiresNoWaitUnSuccessful()
Number of unsuccessful no-wait acquires of the lock table latch.
|
int |
getNAcquiresSelfOwned()
Number of acquires of lock table latch when it was already owned
by the caller.
|
int |
getNAcquiresWithContention()
Number of acquires of lock table latch when it was already owned by
another thread.
|
long |
getNBatchesCacheMode()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBatchesCritical()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBatchesDaemon()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBatchesEvictorThread()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBatchesManual()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBINDeltaBlindOps()
"The number of operations performed blindly in BIN deltas"
|
long |
getNBinDeltaDeleteOps()
The number of user (non-internal) Cursor and Database delete operations
performed in BIN deltas.
|
long |
getNBinDeltaGetOps()
The number of user (non-internal) Cursor and Database get operations
performed in BIN deltas.
|
long |
getNBinDeltaInsertOps()
The number of user (non-internal) Cursor and Database insert operations
performed in BIN deltas (these are insertions performed via the various
put methods).
|
long |
getNBINDeltasCleaned()
"Accumulated number of BIN-deltas cleaned."
|
long |
getNBINDeltasDead()
"Accumulated number of BIN-deltas that were not found in the tree anymore (deleted)."
|
long |
getNBINDeltasFetchMiss()
"Number of BIN-deltas (partial BINs) fetched to satisfy btree operations that were not in main cache."
|
long |
getNBINDeltasMigrated()
"Accumulated number of BIN-deltas migrated."
|
long |
getNBINDeltasObsolete()
"Accumulated number of BIN-deltas obsolete."
|
long |
getNBinDeltaUpdateOps()
The number of user (non-internal) Cursor and Database update operations
performed in BIN deltas (these are updates performed via the various
put methods).
|
long |
getNBINsEvictedCacheMode()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBINsEvictedCritical()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBINsEvictedDaemon()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBINsEvictedEvictorThread()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBINsEvictedManual()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNBINsFetch()
"Number of BINs (bottom internal nodes) and BIN-deltas requested by btree operations."
|
long |
getNBINsFetchMiss()
"Number of full BINs (bottom internal nodes) and BIN-deltas fetched to satisfy btree operations that were not in main cache."
|
float |
getNBINsFetchMissRatio()
"The BIN fetch miss ratio (nBINsFetchMiss / nBINsFetch)"
|
long |
getNBINsMutated()
Deprecated.
Use
getNNodesMutated() instead. |
long |
getNBINsStripped()
Deprecated.
Use
getNNodesStripped() instead. |
long |
getNBytesEvictedCacheMode()
"Number of bytes evicted by operations for which CacheMode.EVICT_BIN is specified."
|
long |
getNBytesEvictedCritical()
"Number of bytes evicted in the application thread because the cache is over budget."
|
long |
getNBytesEvictedDeamon()
"Number of bytes evicted by JE deamon threads."
|
long |
getNBytesEvictedEvictorThread()
"Number of bytes evicted by evictor pool threads."
|
long |
getNBytesEvictedManual()
"Number of bytes evicted by the Environment.evictMemory or during Environment startup."
|
long |
getNBytesReadFromWriteQueue()
The number of bytes read to fulfill file read operations by reading out
of the pending write queue.
|
long |
getNBytesWrittenFromWriteQueue()
The number of bytes written from the pending write queue.
|
long |
getNCachedBINDeltas()
"Number of BIN-deltas (partial BINs) in main cache. This is a subset of the nCachedBINs value."
|
long |
getNCachedBINs()
"Number of BINs (bottom internal nodes) and BIN-deltas in main cache."
|
long |
getNCachedUpperINs()
"Number of upper INs (non-bottom internal nodes) in main cache."
|
long |
getNCacheMiss()
The total number of requests for database objects which were not in
memory.
|
long |
getNCheckpoints()
The total number of checkpoints run so far.
|
long |
getNCleanerDeletions()
"Number of cleaner file deletions."
|
long |
getNCleanerDiskRead()
"Number of disk reads by the cleaner."
|
long |
getNCleanerEntriesRead()
"Accumulated number of log entries read by the cleaner."
|
long |
getNCleanerProbeRuns()
Deprecated.
in JE 6.3, always returns zero.
|
long |
getNCleanerRevisalRuns()
"Number of cleaner runs that ended in revising expiration info, but not in any cleaning."
|
long |
getNCleanerRuns()
"Number of cleaner runs, including two-pass runs."
|
long |
getNCleanerTwoPassRuns()
"Number of cleaner two-pass runs."
|
long |
getNClusterLNsProcessed()
"Accumulated number of LNs processed because they qualify for clustering."
|
long |
getNDeltaINFlush()
The accumulated number of Delta INs flushed to the log.
|
long |
getNDirtyNodesEvicted()
"Number of dirty target nodes logged and evicted."
|
long |
getNEvictionRuns()
"Number of times the background eviction thread is awoken."
|
long |
getNEvictPasses()
Deprecated.
Use
getNEvictionRuns() instead. |
int |
getNFileOpens()
The number of times a log file has been opened.
|
long |
getNFSyncRequests()
The number of fsyncs requested through the group commit manager.
|
long |
getNFSyncs()
The number of fsyncs issued through the group commit manager.
|
long |
getNFSyncTimeouts()
The number of fsync requests submitted to the group commit manager which
timed out.
|
long |
getNFullBINFlush()
The accumulated number of full BINs flushed to the log.
|
long |
getNFullBINsMiss()
"Number of times a BIN-delta had to be mutated to a full BIN (and as a result a full BIN had to be read in from the log)."
|
long |
getNFullINFlush()
The accumulated number of full INs flushed to the log.
|
long |
getNINCompactKeyIN()
"Number of INs that use a compact key representation to minimize the key object representation overhead."
|
long |
getNINNoTarget()
"Number of INs that use a compact representation when none of its child nodes are in the main cache."
|
long |
getNINsCleaned()
"Accumulated number of INs cleaned."
|
long |
getNINsDead()
"Accumulated number of INs that were not found in the tree anymore (deleted)."
|
long |
getNINsMigrated()
"Accumulated number of INs migrated."
|
long |
getNINsObsolete()
"Accumulated number of INs obsolete."
|
long |
getNINSparseTarget()
"Number of INs that use a compact sparse array representation to point to child nodes in the main cache."
|
long |
getNLNQueueHits()
"Accumulated number of LNs processed without a tree lookup."
|
long |
getNLNsCleaned()
"Accumulated number of LNs cleaned."
|
long |
getNLNsDead()
"Accumulated number of LNs that were not found in the tree anymore (deleted)."
|
long |
getNLNsEvicted()
"Number of LNs evicted as a result of LRU-based eviction (but not CacheMode.EVICT_LN)."
|
long |
getNLNsExpired()
"Accumulated number of obsolete LNs that were expired."
|
long |
getNLNsFetch()
"Number of LNs (data records) requested by btree operations."
|
long |
getNLNsFetchMiss()
"Number of LNs (data records) requested by btree operations that were not in main cache."
|
long |
getNLNsLocked()
"Accumulated number of LNs encountered that were locked."
|
long |
getNLNsMarked()
"Accumulated number of LNs in temporary DBs that were dirtied by the cleaner and subsequently logging during checkpoint/eviction."
|
long |
getNLNsMigrated()
"Accumulated number of LNs that were migrated forward in the log by the cleaner."
|
long |
getNLNsObsolete()
"Accumulated number of LNs obsolete."
|
int |
getNLogBuffers()
The number of log buffers currently instantiated.
|
long |
getNLogFSyncs()
The total number of fsyncs of the JE log.
|
long |
getNMarkedLNsProcessed()
"Accumulated number of LNs processed because they were previously marked for migration."
|
long |
getNNodesEvicted()
"Number of target nodes (INs) evicted from the main cache."
|
long |
getNNodesExplicitlyEvicted()
Deprecated.
Use
getNNodesEvicted() instead. |
long |
getNNodesMovedToDirtyLRU()
"Number of nodes (INs) moved from the mixed/priority-1 to the dirty/priority-2 LRU list."
|
long |
getNNodesMutated()
"Number of target BINs mutated to BIN-deltas."
|
long |
getNNodesPutBack()
"Number of target nodes (INs) moved to the cold end of the LRU list without any action taken on them."
|
long |
getNNodesScanned()
Deprecated.
This statistic has no meaning after the implementation
of the new evictor in JE 6.0. The method returns 0 always.
|
long |
getNNodesSelected()
Deprecated.
use
getNNodesTargeted() instead. |
long |
getNNodesSkipped()
"Number of nodes (INs) that did not require any action."
|
long |
getNNodesStripped()
"Number of target BINs whose child LNs were evicted (stripped)."
|
long |
getNNodesTargeted()
"Number of nodes (INs) selected as eviction targets."
|
long |
getNNotResident()
The number of requests for database objects not contained within the
in memory data structures.
|
long |
getNonEmptyBins()
The number of BINs encountered by the INCompressor that were not
actually empty when the compressor ran.
|
int |
getNOpenFiles()
The number of files currently open in the file cache.
|
int |
getNOwners()
Total lock owners in lock table.
|
long |
getNPendingLNsLocked()
"Accumulated number of pending LNs that could not be locked for migration because of a long duration application lock."
|
long |
getNPendingLNsProcessed()
"Accumulated number of LNs processed because they were previously locked."
|
long |
getNRandomReadBytes()
The number of bytes read which required repositioning the disk head
more than 1MB from the previous file position.
|
long |
getNRandomReads()
The number of disk reads which required repositioning the disk head
more than 1MB from the previous file position.
|
long |
getNRandomWriteBytes()
The number of bytes written which required repositioning the disk head
more than 1MB from the previous file position.
|
long |
getNRandomWrites()
The number of disk writes which required repositioning the disk head by
more than 1MB from the previous file position.
|
int |
getNReadLocks()
Total read locks currently held.
|
long |
getNReadsFromWriteQueue()
The number of file read operations which were fulfilled by reading out
of the pending write queue.
|
int |
getNReleases()
Number of releases of the lock table latch.
|
long |
getNRepeatFaultReads()
The number of reads which had to be repeated when faulting in an object
from disk because the read chunk size controlled by je.log.faultReadSize
is too small.
|
long |
getNRepeatIteratorReads()
"Number of attempts to read a log entry larger than the read buffer size during which the log buffer couldn\'t be grown enough to accommodate the object."
|
long |
getNRequests()
Total number of lock requests to date.
|
long |
getNRootNodesEvicted()
"Number of database root nodes (INs) evicted."
|
long |
getNSequentialReadBytes()
The number of bytes read which did not require repositioning the disk
head more than 1MB from the previous file position.
|
long |
getNSequentialReads()
The number of disk reads which did not require repositioning the disk
head more than 1MB from the previous file position.
|
long |
getNSequentialWriteBytes()
The number of bytes written which did not require repositioning the
disk head more than 1MB from the previous file position.
|
long |
getNSequentialWrites()
The number of disk writes which did not require repositioning the disk
head by more than 1MB from the previous file position.
|
int |
getNSharedCacheEnvironments()
"Number of Environments sharing the main cache."
|
long |
getNTempBufferWrites()
The number of writes which had to be completed using the temporary
marshalling buffer because the fixed size log buffers specified by
je.log.totalBufferBytes and je.log.numBuffers were not large enough.
|
long |
getNThreadUnavailable()
"Number of eviction tasks that were submitted to the background evictor pool, but were refused because all eviction threads were busy."
|
long |
getNToBeCleanedLNsProcessed()
"Accumulated number of LNs processed because they are soon to be cleaned."
|
int |
getNTotalLocks()
Total locks currently in lock table.
|
long |
getNUpperINsEvictedCacheMode()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNUpperINsEvictedCritical()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNUpperINsEvictedDaemon()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNUpperINsEvictedEvictorThread()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNUpperINsEvictedManual()
Deprecated.
This statistic has been removed. The method returns 0
always.
|
long |
getNUpperINsFetch()
"Number of Upper INs (non-bottom internal nodes) requested by btree operations."
|
long |
getNUpperINsFetchMiss()
"Number of Upper INs (non-bottom internal nodes) requested by btree operations that were not in main cache."
|
int |
getNWaiters()
Total transactions waiting for locks.
|
long |
getNWaits()
Total number of lock waits to date.
|
int |
getNWriteLocks()
Total write locks currently held.
|
long |
getNWriteQueueOverflow()
The number of writes operations which would overflow the Write Queue.
|
long |
getNWriteQueueOverflowFailures()
The number of writes operations which would overflow the Write Queue
and could not be queued.
|
long |
getNWritesFromWriteQueue()
The number of file writes operations executed from the pending write
queue.
|
long |
getOffHeapAllocFailures()
"Number of off-heap allocation failures due to lack of system memory."
|
long |
getOffHeapAllocOverflows()
"Number of off-heap allocation attempts that exceeded the cache size."
|
long |
getOffHeapBINsLoaded()
"Number of BINs loaded from the off-heap cache."
|
long |
getOffHeapBINsStored()
"Number of BINs stored into the off-heap cache."
|
int |
getOffHeapCachedBINDeltas()
"Number of BIN-deltas residing in the off-heap cache."
|
int |
getOffHeapCachedBINs()
"Number of BINs (full BINs and BIN-deltas) residing in the off-heap cache."
|
int |
getOffHeapCachedLNs()
"Number of LNs residing in the off-heap cache."
|
long |
getOffHeapCriticalNodesTargeted()
"Number of nodes targeted in \'critical eviction\' mode."
|
long |
getOffHeapDirtyNodesEvicted()
"Number of target BINs evicted from the off-heap cache that were dirty and therefore were logged."
|
long |
getOffHeapLNsEvicted()
"Number of LNs evicted from the off-heap cache as a result of BIN stripping."
|
long |
getOffHeapLNsLoaded()
"Number of LNs loaded from the off-heap cache."
|
long |
getOffHeapLNsStored()
"Number of LNs stored into the off-heap cache."
|
long |
getOffHeapLRUSize()
"Number of LRU entries used for the off-heap cache."
|
long |
getOffHeapNodesEvicted()
"Number of target BINs (including BIN-deltas) evicted from the off-heap cache."
|
long |
getOffHeapNodesMutated()
"Number of off-heap target BINs mutated to BIN-deltas."
|
long |
getOffHeapNodesSkipped()
"Number of off-heap target BINs on which no action was taken."
|
long |
getOffHeapNodesStripped()
"Number of target BINs whose off-heap child LNs were evicted (stripped)."
|
long |
getOffHeapNodesTargeted()
"Number of BINs selected as off-heap eviction targets."
|
long |
getOffHeapThreadUnavailable()
"Number of eviction tasks that were submitted to the background off-heap evictor pool, but were refused because all eviction threads were busy."
|
long |
getOffHeapTotalBlocks()
"Total number of memory blocks in off-heap cache."
|
long |
getOffHeapTotalBytes()
"Total number of estimated bytes in off-heap cache."
|
int |
getPendingLNQueueSize()
"Number of LNs pending because they were locked and could not be migrated."
|
long |
getPriDeleteFailOps()
Number of failed primary DB deletion operations.
|
long |
getPriDeleteOps()
Number of successful primary DB deletion operations.
|
long |
getPriInsertFailOps()
Number of failed primary DB insertion operations.
|
long |
getPriInsertOps()
Number of successful primary DB insertion operations.
|
long |
getPriPositionOps()
Number of successful primary DB position operations.
|
long |
getPriSearchFailOps()
Number of failed primary DB key search operations.
|
long |
getPriSearchOps()
Number of successful primary DB key search operations.
|
long |
getPriUpdateOps()
Number of successful primary DB update operations.
|
long |
getProcessedBins()
The number of BINs that were successfully processed by the IN
Compressor.
|
long |
getProtectedLogSize()
"Bytes used by all protected data files: the subset of reserved files that are temporarily protected and cannot be deleted."
|
java.util.SortedMap<java.lang.String,java.lang.Long> |
getProtectedLogSizeMap()
"A breakdown of protectedLogSize as a map of protecting entity name to protected size in bytes."
|
long |
getRelatchesRequired()
Returns the number of latch upgrades (relatches) required while
operating on this Environment.
|
long |
getRequiredEvictBytes()
Deprecated.
The method returns 0 always.
|
long |
getReservedLogSize()
"Bytes used by all reserved data files: files that have beencleaned and can be deleted if they are not protected."
|
long |
getSecDeleteOps()
Number of successful secondary DB deletion operations.
|
long |
getSecInsertOps()
Number of successful secondary DB insertion operations.
|
long |
getSecPositionOps()
Number of successful secondary DB position operations.
|
long |
getSecSearchFailOps()
Number of failed secondary DB key search operations.
|
long |
getSecSearchOps()
Number of successful secondary DB key search operations.
|
long |
getSecUpdateOps()
Number of successful secondary DB update operations.
|
long |
getSharedCacheTotalBytes()
"Total amount of the shared JE main cache in use, in bytes."
|
long |
getSplitBins()
The number of BINs encountered by the INCompressor that were split
between the time they were put on the compressor queue and when the
compressor ran.
|
long |
getTotalLogSize()
"Total bytes used by data files on disk: activeLogSize + reservedLogSize."
|
java.lang.String |
toString()
Returns a String representation of the stats in the form of
<stat>=<value>
|
java.lang.String |
toStringVerbose()
Returns a String representation of the stats which includes stats
descriptions in addition to <stat>=<value>
|
public long getCursorsBins()
public long getEnvironmentCreationTime()
public long getDbClosedBins()
public long getInCompQueueSize()
public long getNonEmptyBins()
public long getProcessedBins()
public long getSplitBins()
public long getLastCheckpointId()
public long getNCheckpoints()
public long getNFullINFlush()
public long getNFullBINFlush()
public long getNDeltaINFlush()
public long getLastCheckpointInterval()
public long getLastCheckpointStart()
public long getLastCheckpointEnd()
public int getCleanerBacklog()
getCurrentMinUtilization()
and getCurrentMaxUtilization()
to
monitor cleaner behavior.public int getFileDeletionBacklog()
getProtectedLogSize()
getProtectedLogSizeMap()
to monitor
file protection.public int getCurrentMinUtilization()
"The current minimum (lower bound) log utilization as a percentage."
Group: "Cleaning"
Name: "minUtilization"
The log utilization is the percentage of the total log size (all .jdb
files) that is utilized or active. The remaining portion of the log
is obsolete. The log cleaner is responsible for keeping the log
utilization below the configured threshold,
EnvironmentConfig.CLEANER_MIN_UTILIZATION
.
This statistic is computed every time the log cleaner examines the
utilization of the log, in order to determine whether cleaning is
needed. The frequency can be configured using
EnvironmentConfig.CLEANER_BYTES_INTERVAL
.
The obsolete portion of the log includes data that has expired at the
time the statistic was last computed. An expiration histogram is stored
for each file and used to compute the expired size. The minimum and
maximum utilization are the lower and upper bounds of computed
utilization, which may be different when some data has expired. See
getNCleanerTwoPassRuns()
for more information.
Note that the size of the utilized data in the log is always greater than the amount of user data (total size of keys and data). The active Btree internal nodes and other metadata are also included.
public int getCurrentMaxUtilization()
"The current maximum (upper bound) log utilization as a percentage."
Group: "Cleaning"
Name: "maxUtilization"
The log utilization is the percentage of the total log size (all .jdb
files) that is utilized or active. The remaining portion of the log
is obsolete. The log cleaner is responsible for keeping the log
utilization below the configured threshold,
EnvironmentConfig.CLEANER_MIN_UTILIZATION
.
This statistic is computed every time the log cleaner examines the
utilization of the log, in order to determine whether cleaning is
needed. The frequency can be configured using
EnvironmentConfig.CLEANER_BYTES_INTERVAL
.
The obsolete portion of the log includes data that has expired at the
time the statistic was last computed. An expiration histogram is stored
for each file and used to compute the expired size. The minimum and
maximum utilization are the lower and upper bounds of computed
utilization, which may be different when some data has expired. See
getNCleanerTwoPassRuns()
for more information.
Note that the size of the utilized data in the log is always greater than the amount of user data (total size of keys and data). The active Btree internal nodes and other metadata are also included.
public int getLastKnownUtilization()
getCurrentMinUtilization()
or
getCurrentMaxUtilization()
instead.public float getLNSizeCorrectionFactor()
public float getCorrectedAvgLNSize()
getCorrectedAvgLNSize()
instead.public float getEstimatedAvgLNSize()
getCorrectedAvgLNSize()
instead.public long getNCleanerRuns()
"Number of cleaner runs, including two-pass runs."
Group: "Cleaning"
Name: "nCleanerRuns"
two-pass runs
but not including revisal runs
. The minimum
and
maximum
utilization values are used
to drive cleaning.public long getNCleanerTwoPassRuns()
"Number of cleaner two-pass runs."
Group: "Cleaning"
Name: "nTwoPassRuns"
total cleaner runs
. The minimum
and maximum
utilization values are used to
drive cleaning.
The obsolete portion of the log includes data that has expired. An expiration histogram is stored for each file and used to compute the expired size. The minimum and maximum utilization are the lower and upper bounds of computed utilization. They are different only when the TTL feature is used, and some data in the file has expired while other data has become obsolete for other reasons, such as record updates, record deletions or checkpoints. In this case the strictly obsolete size and the expired size may overlap because they are maintained separately.
If they overlap completely then the minimum utilization is correct, while if there is no overlap then the maximum utilization is correct. Both utilization values trigger cleaning, but when there is significant overlap, the cleaner will perform two-pass cleaning.
In the first pass of two-pass cleaning, the file is read to recompute obsolete and expired sizes, but the file is not cleaned. As a result of recomputing the expired sizes, the strictly obsolete and expired sizes will no longer overlap, and the minimum and maximum utilization will be equal. If the file should still be cleaned, based on the recomputed utilization, it is cleaned as usual, and in this case the number of two-pass runs (this statistic) is incremented.
If the file should not be cleaned because its recomputed utilization is
higher than expected, the file will not be cleaned. Instead, its
recomputed expiration histogram, which has size information that now
does not overlap with the strictly obsolete data, is stored for future
use. By storing the revised histogram, the cleaner can select the most
appropriate files for cleaning in the future. In this case the number of
revisal runs
is incremented, and the
number of total runs
is not incremented.
public long getNCleanerRevisalRuns()
"Number of cleaner runs that ended in revising expiration info, but not in any cleaning."
Group: "Cleaning"
Name: "nRevisalRuns"
getNCleanerTwoPassRuns()
,
Cleaner Statisticspublic long getNCleanerProbeRuns()
public long getNCleanerDeletions()
"Number of cleaner file deletions."
Group: "Cleaning"
Name: "nCleanerDeletions"
public int getPendingLNQueueSize()
"Number of LNs pending because they were locked and could not be migrated."
Group: "Cleaning"
Name: "pendingLNQueueSize"
public long getNCleanerDiskRead()
"Number of disk reads by the cleaner."
Group: "Cleaning"
Name: "nCleanerDisksReads"
public long getNCleanerEntriesRead()
"Accumulated number of log entries read by the cleaner."
Group: "Cleaning"
Name: "nCleanerEntriesRead"
public long getNINsObsolete()
"Accumulated number of INs obsolete."
Group: "Cleaning"
Name: "nINsObsolete"
public long getNINsCleaned()
"Accumulated number of INs cleaned."
Group: "Cleaning"
Name: "nINsCleaned"
public long getNINsDead()
"Accumulated number of INs that were not found in the tree anymore (deleted)."
Group: "Cleaning"
Name: "nINsDead"
public long getNINsMigrated()
"Accumulated number of INs migrated."
Group: "Cleaning"
Name: "nINsMigrated"
public long getNBINDeltasObsolete()
"Accumulated number of BIN-deltas obsolete."
Group: "Cleaning"
Name: "nBINDeltasObsolete"
public long getNBINDeltasCleaned()
"Accumulated number of BIN-deltas cleaned."
Group: "Cleaning"
Name: "nBINDeltasCleaned"
public long getNBINDeltasDead()
"Accumulated number of BIN-deltas that were not found in the tree anymore (deleted)."
Group: "Cleaning"
Name: "nBINDeltasDead"
public long getNBINDeltasMigrated()
"Accumulated number of BIN-deltas migrated."
Group: "Cleaning"
Name: "nBINDeltasMigrated"
public long getNLNsObsolete()
"Accumulated number of LNs obsolete."
Group: "Cleaning"
Name: "nLNsObsolete"
public long getNLNsExpired()
"Accumulated number of obsolete LNs that were expired."
Group: "Cleaning"
Name: "nLNsExpired"
EnvironmentConfig.TREE_MAX_EMBEDDED_LN
), because embedded LNs
are always considered obsolete.public long getNLNsCleaned()
"Accumulated number of LNs cleaned."
Group: "Cleaning"
Name: "nLNsCleaned"
public long getNLNsDead()
"Accumulated number of LNs that were not found in the tree anymore (deleted)."
Group: "Cleaning"
Name: "nLNsDead"
public long getNLNsLocked()
"Accumulated number of LNs encountered that were locked."
Group: "Cleaning"
Name: "nLNsLocked"
public long getNLNsMigrated()
"Accumulated number of LNs that were migrated forward in the log by the cleaner."
Group: "Cleaning"
Name: "nLNsMigrated"
public long getNLNsMarked()
"Accumulated number of LNs in temporary DBs that were dirtied by the cleaner and subsequently logging during checkpoint/eviction."
Group: "Cleaning"
Name: "nLNsMarked"
public long getNLNQueueHits()
"Accumulated number of LNs processed without a tree lookup."
Group: "Cleaning"
Name: "nLNQueueHits"
public long getNPendingLNsProcessed()
"Accumulated number of LNs processed because they were previously locked."
Group: "Cleaning"
Name: "nPendingLNsProcessed"
public long getNMarkedLNsProcessed()
"Accumulated number of LNs processed because they were previously marked for migration."
Group: "Cleaning"
Name: "nMarkLNsProcessed"
public long getNToBeCleanedLNsProcessed()
"Accumulated number of LNs processed because they are soon to be cleaned."
Group: "Cleaning"
Name: "nToBeCleanedLNsProcessed"
public long getNClusterLNsProcessed()
"Accumulated number of LNs processed because they qualify for clustering."
Group: "Cleaning"
Name: "nClusterLNsProcessed"
public long getNPendingLNsLocked()
"Accumulated number of pending LNs that could not be locked for migration because of a long duration application lock."
Group: "Cleaning"
Name: "nPendingLNsLocked"
public long getNRepeatIteratorReads()
"Number of attempts to read a log entry larger than the read buffer size during which the log buffer couldn\'t be grown enough to accommodate the object."
Group: "Cleaning"
Name: "nRepeatIteratorReads"
public long getActiveLogSize()
"Bytes used by all active data files: files required for basic JE operation."
Group: "Cleaning"
Name: "activeLogSize"
The log utilization
is the
percentage of activeLogSize that is currently referenced or active.
public long getReservedLogSize()
"Bytes used by all reserved data files: files that have beencleaned and can be deleted if they are not protected."
Group: "Cleaning"
Name: "reservedLogSize"
Deletion of reserved files may be postponed for several reasons.
This occurs if an active file is protected (by a backup, for example),
and then the file is cleaned and becomes a reserved file. See
getProtectedLogSizeMap()
for more information. In a
standalone JE environment, reserved files are normally deleted very
soon after being cleaned.
In an HA environment, reserved files are retained because they might
be used for replication to electable nodes that have been offline
for the ReplicationConfig.FEEDER_TIMEOUT
interval or longer, or to offline secondary nodes. The replication
stream position of these nodes is unknown, so whether these files could
be used to avoid a network restore, when bringing these nodes online,
is also unknown. The files are retained just in case they can be used
for such replication. Files are reserved for replication on both master
and replicas, since a replica may become a master at a future time.
Such files will be deleted (oldest file first) to make room for a
write operation, if the write operation would have caused a disk limit
to be violated.
In NoSQL DB, this retention of reserved files has the additional benefit of supplying the replication stream to subscribers of the Stream API, when such subscribers need to replay the stream from an earlier point in time.
public long getProtectedLogSize()
"Bytes used by all protected data files: the subset of reserved files that are temporarily protected and cannot be deleted."
Group: "Cleaning"
Name: "protectedLogSize"
Reserved files are protected for reasons described by getProtectedLogSizeMap()
.
public java.util.SortedMap<java.lang.String,java.lang.Long> getProtectedLogSizeMap()
"A breakdown of protectedLogSize as a map of protecting entity name to protected size in bytes."
Group: "Cleaning"
Name: "protectedLogSizeMap"
Reserved
data files are temporarily
protected
for a number of reasons. The
keys in the protected log size map are the names of the protecting
entities, and the values are the number of bytes protected by each
entity. The type and format of the entity names are as follows:
Backup-N DatabaseCount-N DiskOrderedCursor-N Syncup-N Feeder-N NetworkRestore-N
Where:
Backup-N
represents a DbBackup
in progress,
i.e., for which DbBackup.startBackup()
has been called
and DbBackup.endBackup()
has not yet been called. All
active files are initially protected by the backup, but these
are not reserved files ond only appear in the map if they are
cleaned and become reserved after the backup starts. Files
are not protected if they have been copied and
DbBackup.removeFileProtection(String)
has been called.
N
is a sequentially assigned integer.
DatabaseCount-N
represents an outstanding call to
Database.count()
.
All active files are initially protected by this method, but
these are not reserved files ond only appear in the map if
they are cleaned and become reserved during the execution of
Database.count
.
N
is a sequentially assigned integer.
DiskOrderedCursor-N
represents a
DiskOrderedCursor
that has not yet been closed by
DiskOrderedCursor.close()
.
All active files are initially protected when the cursor is
opened, but these are not reserved files ond only appear in
the map if they are cleaned and become reserved while the
cursor is open.
N
is a sequentially assigned integer.
Syncup-N
represents an in-progress negotiation between
a master and replica node in an HA replication group to
establish a replication stream. This is a normally a very short
negotiation and occurs when a replica joins the group or after
an election is held. During syncup, all reserved files are
protected.
N
is the node name of the other node involved in the
syncup, i.e, if this node is a master then it is the name of
the replica, and vice versa.
Feeder-N
represents an HA master node that is supplying
the replication stream to a replica. Normally data in active
files is being supplied and this data is not in the reserved
or protected categories. But if the replica is lagging, data
from reserved files may be supplied, and in that case will be
protected and appear in the map.
N
is the node name of the replica receiving the
replication stream.
NetworkRestore-N
represents an HA replica or master
node that is supplying files to a node that is performing a
NetworkRestore
. The files supplied
are all active files plus the two most recently written
reserved files. The two reserved files will appear in the map,
as well as any of the active files that were cleaned and became
reserved during the network restore. Files that have already
been copied by the network restore are not protected.
N
is the name of the node performing the
NetworkRestore
.
When more than one entity is included in the map, in general the
largest value points to the entity primarily responsible for
preventing reclamation of disk space. Note that the values normally
sum to more than getProtectedLogSize()
, since protection often
overlaps.
The string format of this stat consists of name=size
pairs
separated by semicolons, where name is the entity name described
above and size is the number of protected bytes.
public long getAvailableLogSize()
"Bytes available for write operations when unprotected reserved files are deleted: free space + reservedLogSize - protectedLogSize."
Group: "Cleaning"
Name: "availableLogSize"
This is the amount that can be logged by write operations, and
other JE activity such as checkpointing, without violating a disk
limit. The files making up reservedLogSize
can be deleted to
make room for these write operations, so availableLogSize
is
the sum of the current disk free space and the reserved size that is not
protected (reservedLogSize
- protectedLogSize
). The
current disk free space is calculated using the disk volume's free
space, EnvironmentConfig.MAX_DISK
and EnvironmentConfig.FREE_DISK
.
Note that when a record is written, the number of bytes includes JE overheads for the record. Also, this causes Btree metadata to be written during checkpoints, and other metadata is also written by JE. So the space occupied on disk by a given set of records cannot be calculated by simply summing the key/data sizes.
Also note that availableLogSize
will be negative when a disk
limit has been violated, representing the amount that needs to be freed
before write operations are allowed.
EnvironmentConfig.MAX_DISK
,
EnvironmentConfig.FREE_DISK
public long getTotalLogSize()
"Total bytes used by data files on disk: activeLogSize + reservedLogSize."
Group: "Cleaning"
Name: "totalLogSize"
public long getNCacheMiss()
public long getEndOfLog()
Note that the log entries prior to this position may not yet have been flushed to disk. Flushing can be forced using a Sync or WriteNoSync commit, or a checkpoint.
public long getNFSyncs()
public long getNFSyncRequests()
public long getNFSyncTimeouts()
public long getFSyncTime()
toString()
and
appeared in the je.stat.csv file in earlier versions.public long getFSyncMaxTime()
public long getNLogFSyncs()
public int getNLogBuffers()
public long getNRandomReads()
This number is approximate and may differ from the actual number of random disk reads depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNRandomReadBytes()
This number is approximate vary depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNRandomWrites()
This number is approximate and may differ from the actual number of random disk writes depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNRandomWriteBytes()
This number is approximate vary depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNSequentialReads()
This number is approximate and may differ from the actual number of sequential disk reads depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNSequentialReadBytes()
This number is approximate vary depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNSequentialWrites()
This number is approximate and may differ from the actual number of sequential disk writes depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNSequentialWriteBytes()
This number is approximate vary depending on the type of disks and file system, disk geometry, and file system cache size.
public long getNBytesReadFromWriteQueue()
public long getNBytesWrittenFromWriteQueue()
public long getNReadsFromWriteQueue()
public long getNWritesFromWriteQueue()
public long getNWriteQueueOverflow()
public long getNWriteQueueOverflowFailures()
public long getBufferBytes()
public long getNNotResident()
public long getNRepeatFaultReads()
public long getNTempBufferWrites()
public int getNFileOpens()
public int getNOpenFiles()
public long getRequiredEvictBytes()
public long getNNodesScanned()
public long getNEvictPasses()
getNEvictionRuns()
instead.public long getNNodesSelected()
getNNodesTargeted()
instead.public long getNNodesExplicitlyEvicted()
getNNodesEvicted()
instead.public long getNBINsStripped()
getNNodesStripped()
instead.public long getNBINsMutated()
getNNodesMutated()
instead.public long getNEvictionRuns()
"Number of times the background eviction thread is awoken."
Group: "Cache"
Name: "nEvictionRuns"
When an evictor thread is awoken it performs eviction until
getCacheTotalBytes()
is at least
EnvironmentConfig.EVICTOR_EVICT_BYTES
less than the
total cache size
.
See CacheMode
for a description of eviction.
public long getNNodesTargeted()
"Number of nodes (INs) selected as eviction targets."
Group: "Cache"
Name: "nNodesTargeted"
An eviction target may actually be evicted, or skipped, or put back
to the LRU, potentially after partial eviction (stripping) or
BIN-delta mutation is done on it.
See CacheMode
for a description of eviction.
public long getNNodesEvicted()
"Number of target nodes (INs) evicted from the main cache."
Group: "Cache"
Name: "nNodesEvicted"
Does not include LN eviction
or
BIN-delta mutation
.
Includes eviction of dirty nodes
and
root nodes
.
See CacheMode
for a description of eviction.
public long getNRootNodesEvicted()
"Number of database root nodes (INs) evicted."
Group: "Cache"
Name: "nRootNodesEvicted"
The root node of a Database is only evicted after all other nodes in
the Database, so this implies that the entire Database has fallen out of
cache and is probably closed.
See CacheMode
for a description of eviction.
public long getNDirtyNodesEvicted()
"Number of dirty target nodes logged and evicted."
Group: "Cache"
Name: "nDirtyNodesEvicted"
When a dirty IN is evicted from main cache and no off-heap cache is
configured, the IN must be logged. When an off-heap cache is configured,
dirty INs can be moved from main cache to off-heap cache based on LRU,
but INs are only logged when they are evicted from off-heap cache.
Therefore, this stat is always zero when an off-heap cache is configured.
See CacheMode
for a description of eviction.
public long getNLNsEvicted()
"Number of LNs evicted as a result of LRU-based eviction (but not CacheMode.EVICT_LN)."
Group: "Cache"
Name: "nLNsEvicted"
When a BIN is considered for eviction based on LRU, if the BIN
contains resident LNs in main cache, it is stripped of the LNs rather
than being evicted. This stat reflects LNs evicted in this manner, but
not LNs evicted as a result of using CacheMode.EVICT_LN
. Also
note that embedded
LNs
are evicted immediately and are not reflected in this stat value.
See CacheMode
for a description of eviction.
public long getNNodesStripped()
"Number of target BINs whose child LNs were evicted (stripped)."
Group: "Cache"
Name: "nNodesStripped"
BINs are stripped in order to evict LNs
.
See CacheMode
for a description of eviction.
public long getNNodesMutated()
"Number of target BINs mutated to BIN-deltas."
Group: "Cache"
Name: "nNodesMutated"
When a BIN is considered for eviction based on LRU, if the BIN
can be mutated to a BIN-delta, it is mutated rather than being evicted.
Note that when an off-heap cache is configured, this stat value will be
zero because BIN mutation will take place only in the off-heap cache;
see getOffHeapNodesMutated()
.
See CacheMode
for a description of eviction.
public long getNNodesPutBack()
"Number of target nodes (INs) moved to the cold end of the LRU list without any action taken on them."
Group: "Cache"
Name: "nNodesPutBack"
Reasons for putting back a target IN are:
EnvironmentConfig.TREE_MIN_MEMORY
.See CacheMode
for a description of eviction.
public long getNNodesMovedToDirtyLRU()
"Number of nodes (INs) moved from the mixed/priority-1 to the dirty/priority-2 LRU list."
Group: "Cache"
Name: "nNodesMovedToDirtyLRU"
When an off-cache is not configured, dirty nodes are evicted last
from the main cache by moving them to a 2nd priority LRU list. When an
off-cache is configured, level-2 INs that reference off-heap BINs are
evicted last from the main cache, using the same approach.
See CacheMode
for a description of eviction.
public long getNNodesSkipped()
"Number of nodes (INs) that did not require any action."
Group: "Cache"
Name: "nNodesSkipped"
Reasons for skipping a target IN are:
See CacheMode
for a description of eviction.
public long getNThreadUnavailable()
"Number of eviction tasks that were submitted to the background evictor pool, but were refused because all eviction threads were busy."
Group: "Cache"
Name: "nThreadUnavailable"
public int getNSharedCacheEnvironments()
"Number of Environments sharing the main cache."
Group: "Cache"
Name: "nSharedCacheEnvironments"
This method says nothing about whether this environment is using the shared cache or not.
public long getNLNsFetch()
"Number of LNs (data records) requested by btree operations."
Group: "Cache"
Name: "nLNsFetch"
Note that the number of LN fetches does not necessarily correspond
to the number of records accessed, since some LNs may be
embedded
.
public long getNBINsFetch()
"Number of BINs (bottom internal nodes) and BIN-deltas requested by btree operations."
Group: "Cache"
Name: "nBINsFetch"
public long getNUpperINsFetch()
"Number of Upper INs (non-bottom internal nodes) requested by btree operations."
Group: "Cache"
Name: "nUpperINsFetch"
public long getNLNsFetchMiss()
"Number of LNs (data records) requested by btree operations that were not in main cache."
Group: "Cache"
Name: "nLNsFetchMiss"
Note that the number of LN fetches does not necessarily correspond
to the number of records accessed, since some LNs may be
embedded
.
public long getNBINsFetchMiss()
"Number of full BINs (bottom internal nodes) and BIN-deltas fetched to satisfy btree operations that were not in main cache."
Group: "Cache"
Name: "nBINsFetchMiss"
This is the portion of getNBINsFetch()
that resulted in a
fetch miss. The fetch may be for a full BIN or BIN-delta
(getNBINDeltasFetchMiss()
), depending on whether a BIN-delta
currently exists (see EnvironmentConfig.TREE_BIN_DELTA
).
However, additional full BIN fetches occur when mutating a BIN-delta to
a full BIN (getNFullBINsMiss()
) whenever this is necessary for
completing an operation.
Therefore, the total number of BIN fetch misses (including BIN-deltas) is:
nFullBINsMiss + nBINsFetchMiss
And the total number of full BIN (vs BIN-delta) fetch misses is:
nFullBINsMiss + nBINsFetchMiss -
nBINDeltasFetchMiss
public long getNBINDeltasFetchMiss()
"Number of BIN-deltas (partial BINs) fetched to satisfy btree operations that were not in main cache."
Group: "Cache"
Name: "nBINDeltasFetchMiss"
This represents the portion of nBINsFetchMiss()
that fetched
BIN-deltas rather than full BINs. See getNBINsFetchMiss()
.
public long getNFullBINsMiss()
"Number of times a BIN-delta had to be mutated to a full BIN (and as a result a full BIN had to be read in from the log)."
Group: "Cache"
Name: "nFullBINsMiss"
Note that this stat does not include full BIN misses that are
not due to BIN-delta mutations. See
getNBINsFetchMiss()
public long getNUpperINsFetchMiss()
"Number of Upper INs (non-bottom internal nodes) requested by btree operations that were not in main cache."
Group: "Cache"
Name: "nUpperINsFetchMiss"
public float getNBINsFetchMissRatio()
"The BIN fetch miss ratio (nBINsFetchMiss / nBINsFetch)"
Group: "Cache"
Name: "nBINsFetchMissRatio"
This stat can be misleading because it does not include the number
of full BIN fetch misses resulting from BIN-delta mutations (getNFullBINsMiss()
. It may be improved, or perhaps deprecated, in a
future release.
public long getNBINDeltaBlindOps()
"The number of operations performed blindly in BIN deltas"
Group: "Cache"
Name: "nBinDeltaBlindOps"
Note that this stat is misplaced. It should be in the "Environment" group and will probably be moved there in a future release.
public long getNCachedUpperINs()
"Number of upper INs (non-bottom internal nodes) in main cache."
Group: "Cache"
Name: "nCachedUpperINs"
When used on shared environment caches, zero is returned when fast stats
are requested.
public long getNCachedBINs()
"Number of BINs (bottom internal nodes) and BIN-deltas in main cache."
Group: "Cache"
Name: "nCachedBINs"
When used on shared environment caches, zero is returned when fast stats
are requested.
public long getNCachedBINDeltas()
"Number of BIN-deltas (partial BINs) in main cache. This is a subset of the nCachedBINs value."
Group: "Cache"
Name: "nCachedBINDeltas"
When used on shared environment caches, zero is returned when fast stats
are requested.
public long getNINSparseTarget()
"Number of INs that use a compact sparse array representation to point to child nodes in the main cache."
Group: "Cache"
Name: "nINSparseTarget"
Each IN contains an array of references to child INs or LNs. When
there are between one and four children resident, the size of the array
is reduced to four. This saves a significant amount of cache memory for
BINs when CacheMode.EVICT_LN
is used, because there are
typically only a small number of LNs resident in main cache.
public long getNINNoTarget()
"Number of INs that use a compact representation when none of its child nodes are in the main cache."
Group: "Cache"
Name: "nINNoTarget"
Each IN contains an array of references to child INs or LNs. When
there are no children resident, no array is allocated. This saves a
significant amount of cache memory for BINs when CacheMode.EVICT_LN
is used, because there are typically only a small
number of LNs resident in main cache.
public long getNINCompactKeyIN()
"Number of INs that use a compact key representation to minimize the key object representation overhead."
Group: "Cache"
Name: "nINCompactKey"
public long getDirtyLRUSize()
"Number of INs in the dirty/priority-2 LRU "
Group: "Cache"
Name: "lruDirtySize"
public long getMixedLRUSize()
"Number of INs in the mixed/priority-1 LRU "
Group: "Cache"
Name: "lruMixedSize"
public long getNBINsEvictedEvictorThread()
public long getNBINsEvictedManual()
public long getNBINsEvictedCritical()
public long getNBINsEvictedCacheMode()
public long getNBINsEvictedDaemon()
public long getNUpperINsEvictedEvictorThread()
public long getNUpperINsEvictedManual()
public long getNUpperINsEvictedCritical()
public long getNUpperINsEvictedCacheMode()
public long getNUpperINsEvictedDaemon()
public long getNBatchesEvictorThread()
public long getNBatchesManual()
public long getNBatchesCacheMode()
public long getNBatchesCritical()
public long getNBatchesDaemon()
public long getNBytesEvictedEvictorThread()
"Number of bytes evicted by evictor pool threads."
Group: "Cache"
Name: "nBytesEvictedEVICTORTHREAD"
public long getNBytesEvictedManual()
"Number of bytes evicted by the Environment.evictMemory or during Environment startup."
Group: "Cache"
Name: "nBytesEvictedMANUAL"
public long getNBytesEvictedCacheMode()
"Number of bytes evicted by operations for which CacheMode.EVICT_BIN is specified."
Group: "Cache"
Name: "nBytesEvictedCACHEMODE"
public long getNBytesEvictedCritical()
"Number of bytes evicted in the application thread because the cache is over budget."
Group: "Cache"
Name: "nBytesEvictedCRITICAL"
public long getNBytesEvictedDeamon()
"Number of bytes evicted by JE deamon threads."
Group: "Cache"
Name: "nBytesEvictedDAEMON"
public long getAvgBatchEvictorThread()
public long getAvgBatchManual()
public long getAvgBatchCacheMode()
public long getAvgBatchCritical()
public long getAvgBatchDaemon()
public long getSharedCacheTotalBytes()
"Total amount of the shared JE main cache in use, in bytes."
Group: "Cache"
Name: "sharedCacheTotalBytes"
If this
environment uses the shared cache, this method returns the total size of
the shared cache, i.e., the sum of the getCacheTotalBytes()
for
all environments that are sharing the cache. If this environment does
not use the shared cache, this method returns zero.
To get the configured maximum cache size, see EnvironmentMutableConfig.getCacheSize()
.
public long getCacheTotalBytes()
"Total amount of JE main cache in use, in bytes."
Group: "Cache"
Name: "cacheTotalBytes"
This method returns the sum of getDataBytes()
, getAdminBytes()
, getLockBytes()
and getBufferBytes()
.
If this environment uses the shared cache, this method returns only the amount used by this environment.
To get the configured maximum cache size, see EnvironmentMutableConfig.getCacheSize()
.
public long getDataBytes()
"Amount of JE main cache used for holding data, keys and internal Btree nodes, in bytes."
Group: "Cache"
Name: "dataBytes"
The value returned by this method includes the amount returned by
getDataAdminBytes()
.
If this environment uses the shared cache, this method returns only the amount used by this environment.
public long getDataAdminBytes()
"Amount of JE main cache used for holding per-database cleaner utilization metadata, in bytes."
Group: "Cache"
Name: "dataAdminBytes"
If this environment uses the shared cache, this method returns only the amount used by this environment.
public long getDOSBytes()
"Amount of JE main cache consumed by disk-ordered cursor and Database.count operations, in bytes."
Group: "Cache"
Name: "DOSBytes"
If this environment uses the shared cache, this method returns only the amount used by this environment.
public long getAdminBytes()
"Number of bytes of JE main cache used for cleaner and checkpointer metadata, in bytes."
Group: "Cache"
Name: "adminBytes"
If this environment uses the shared cache, this method returns only the amount used by this environment.
public long getLockBytes()
"Number of bytes of JE cache used for holding locks and transactions, in bytes."
Group: "Cache"
Name: "lockBytes"
If this environment uses the shared cache, this method returns only the amount used by this environment.
public long getCacheDataBytes()
getDataBytes()
to get the amount of cache
used for data and use getAdminBytes()
, getLockBytes()
and
getBufferBytes()
to get other components of the total cache usage
(getCacheTotalBytes()
).public long getOffHeapAllocFailures()
"Number of off-heap allocation failures due to lack of system memory."
Group: "OffHeap"
Name: "offHeapAllocFailure"
Currently, with the default off-heap allocator, an allocation
failure occurs only when OutOfMemoryError is thrown by Unsafe.allocateMemory
. This might be considered a fatal error, since it
means that no memory is available on the machine or VM. In practice,
we have not seen this occur because Linux will automatically kill
processes that are rapidly allocating memory when available memory is
very low.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapAllocOverflows()
"Number of off-heap allocation attempts that exceeded the cache size."
Group: "OffHeap"
Name: "offHeapAllocOverflow"
Currently, with the default off-heap allocator, this never happens because the allocator will perform the allocation as long as any memory is available. Even so, the off-heap evictor normally prevents overflowing of the off-heap cache by freeing memory before it is needed.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapThreadUnavailable()
"Number of eviction tasks that were submitted to the background off-heap evictor pool, but were refused because all eviction threads were busy."
Group: "OffHeap"
Name: "offHeapThreadUnavailable"
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapNodesTargeted()
"Number of BINs selected as off-heap eviction targets."
Group: "OffHeap"
Name: "offHeapNodesTargeted"
Nodes are selected as targets by the evictor based on LRU, always selecting from the cold end of the LRU list. First, non-dirty nodes and nodes referring to off-heap LNs are selected based on LRU. When there are no more such nodes then dirty nodes with no off-heap LNs are selected, based on LRU.
An eviction target may actually be evicted, or skipped, or put back to the LRU, potentially after stripping child LNs or mutation to a BIN-delta.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapCriticalNodesTargeted()
"Number of nodes targeted in \'critical eviction\' mode."
Group: "OffHeap"
Name: "offHeapCriticalNodesTargeted"
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapNodesEvicted()
"Number of target BINs (including BIN-deltas) evicted from the off-heap cache."
Group: "OffHeap"
Name: "offHeapNodesEvicted"
An evicted BIN is completely removed from the off-heap cache and LRU list. If it is dirty, it must be logged. A BIN is evicted only if it has no off-heap child LNs and it cannot be mutated to a BIN-delta.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapDirtyNodesEvicted()
"Number of target BINs evicted from the off-heap cache that were dirty and therefore were logged."
Group: "OffHeap"
Name: "offHeapDirtyNodesEvicted"
This stat value is a subset of getOffHeapNodesEvicted()
.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapNodesStripped()
"Number of target BINs whose off-heap child LNs were evicted (stripped)."
Group: "OffHeap"
Name: "offHeapNodesStripped"
When a BIN is stripped, all off-heap LNs that the BIN refers to are
evicted. The getOffHeapLNsEvicted()
stat is incremented
accordingly.
A stripped BIN could be a BIN in main cache that is stripped of off-heap LNs, or a BIN that is off-heap and also refers to off-heap LNs. When a main cache BIN is stripped, it is removed from the off-heap LRU. When an off-heap BIN is stripped, it is either modified in place to remove the LN references (this is done when a small number of LNs are referenced and the wasted space is small), or is copied to a new, smaller off-heap block with no LN references.
After stripping an off-heap BIN, it is moved to the hot end of the LRU list. Off-heap BINs are only mutated to BIN-deltas or evicted completely when they do not refer to any off-heap LNs. This gives BINs precedence over LNs in the cache.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapNodesMutated()
"Number of off-heap target BINs mutated to BIN-deltas."
Group: "OffHeap"
Name: "offHeapNodesMutated"
Mutation to a BIN-delta is performed for full BINs that do not
refer to any off-heap LNs and can be represented as BIN-deltas in
cache and on disk (see EnvironmentConfig.TREE_BIN_DELTA
).
When a BIN is mutated, it is is copied to a new, smaller off-heap
block. After mutating an off-heap BIN, it is moved to the hot end of
the LRU list.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapNodesSkipped()
"Number of off-heap target BINs on which no action was taken."
Group: "OffHeap"
Name: "offHeapNodesSkipped"
For example, a node will be skipped if it has been moved to the hot end of the LRU list by another thread, or more rarely, already processed by another evictor thread. This can occur because there is a short period of time where a targeted node has been removed from the LRU by the evictor thread, but not yet latched.
The number of skipped nodes is normally very small, compared to the number of targeted nodes.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapLNsEvicted()
"Number of LNs evicted from the off-heap cache as a result of BIN stripping."
Group: "OffHeap"
Name: "offHeapLNsEvicted"
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapLNsLoaded()
"Number of LNs loaded from the off-heap cache."
Group: "OffHeap"
Name: "offHeapLNsLoaded"
LNs are loaded when requested by CRUD operations or other internal btree operations.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapLNsStored()
"Number of LNs stored into the off-heap cache."
Group: "OffHeap"
Name: "offHeapLNsStored"
LNs are stored off-heap when they are evicted from the main cache.
Note that when CacheMode.EVICT_LN
is used, the LN resides in
the main cache for a very short period since it is evicted after the
CRUD operation is complete.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapBINsLoaded()
"Number of BINs loaded from the off-heap cache."
Group: "OffHeap"
Name: "offHeapBINsLoaded"
BINs are loaded when needed by CRUD operations or other internal btree operations.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapBINsStored()
"Number of BINs stored into the off-heap cache."
Group: "OffHeap"
Name: "offHeapBINsStored"
BINs are stored off-heap when they are evicted from the main cache.
Note that when CacheMode.EVICT_BIN
is used, the BIN resides
in the main cache for a very short period since it is evicted after
the CRUD operation is complete.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public int getOffHeapCachedLNs()
"Number of LNs residing in the off-heap cache."
Group: "OffHeap"
Name: "offHeapCachedLNs"
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public int getOffHeapCachedBINs()
"Number of BINs (full BINs and BIN-deltas) residing in the off-heap cache."
Group: "OffHeap"
Name: "offHeapCachedBINs"
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public int getOffHeapCachedBINDeltas()
"Number of BIN-deltas residing in the off-heap cache."
Group: "OffHeap"
Name: "offHeapCachedBINDeltas"
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapTotalBytes()
"Total number of estimated bytes in off-heap cache."
Group: "OffHeap"
Name: "offHeapTotalBytes"
This includes the estimated overhead for off-heap memory blocks, as well as their contents.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
To get the configured maximum off-heap cache size, see EnvironmentMutableConfig.getOffHeapCacheSize()
.
public long getOffHeapTotalBlocks()
"Total number of memory blocks in off-heap cache."
Group: "OffHeap"
Name: "offHeapTotalBlocks"
There is one block for each off-heap BIN and one for each off-heap
LN. So the total number of blocks is the sum of
getOffHeapCachedLNs()
and getOffHeapCachedBINs()
.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getOffHeapLRUSize()
"Number of LRU entries used for the off-heap cache."
Group: "OffHeap"
Name: "offHeapLruSize"
The off-heap LRU list is stored in the Java heap. Each entry occupies 20 bytes of memory when compressed oops are used, or 24 bytes otherwise. This memory is not considered part of the JE main cache, and is not included in main cache statistics.
There is one LRU entry for each off-heap BIN, and one for each BIN in main cache that refers to one or more off-heap LNs. The latter approach avoids an LRU entry per off-heap LN, which would use excessive amounts of space in the Java heap. Similarly, when an off-heap BIN refers to off-heap LNs, only one LRU entry (for the BIN) is used.
If this environment uses the shared cache, the return value is the total for all environments that are sharing the cache.
public long getRelatchesRequired()
public int getNOwners()
Environment.getStats
is
called in "slow" mode.public int getNReadLocks()
Environment.getStats
is
called in "slow" mode.public int getNTotalLocks()
Environment.getStats
is
called in "slow" mode.public int getNWaiters()
Environment.getStats
is
called in "slow" mode.public int getNWriteLocks()
Environment.getStats
is
called in "slow" mode.public long getNRequests()
public long getNWaits()
public int getNAcquiresNoWaiters()
public int getNAcquiresSelfOwned()
public int getNAcquiresWithContention()
public int getNAcquiresNoWaitSuccessful()
public int getNAcquiresNoWaitUnSuccessful()
public int getNReleases()
public long getNBinDeltaGetOps()
public long getNBinDeltaInsertOps()
public long getNBinDeltaUpdateOps()
public long getNBinDeltaDeleteOps()
public long getPriSearchOps()
This operation corresponds to one of the following API calls:
Cursor.get
or Database.get
call with Get.SEARCH
, Get.SEARCH_GTE
, Get.SEARCH_BOTH
, or Get.SEARCH_BOTH_GTE
.
SecondaryCursor.get
or SecondaryDatabase.get
call
when the primary data is requested (via the data
param).
This call internally performs a key search operation in the
primary DB in order to return the data.
public long getPriSearchFailOps()
This operation corresponds to a call to Cursor.get
or Database.get
with Get.SEARCH
, Get.SEARCH_GTE
, Get.SEARCH_BOTH
, or Get.SEARCH_BOTH_GTE
, when the specified key is not found in the DB.
public long getSecSearchOps()
This operation corresponds to a successful call to SecondaryCursor.get
or SecondaryDatabase.get
with
Get.SEARCH
, Get.SEARCH_GTE
, Get.SEARCH_BOTH
, or
Get.SEARCH_BOTH_GTE
.
Note: Operations are currently counted as secondary DB (rather than primary DB) operations only if the DB has been opened by the application as a secondary DB. In particular the stats may be confusing on an HA replica node if a secondary DB has not been opened by the application on the replica.
public long getSecSearchFailOps()
This operation corresponds to a call to SecondaryCursor.get
or SecondaryDatabase.get
with Get.SEARCH
, Get.SEARCH_GTE
, Get.SEARCH_BOTH
, or Get.SEARCH_BOTH_GTE
, when the specified key is not found in the DB.
Note: Operations are currently counted as secondary DB (rather than primary DB) operations only if the DB has been opened by the application as a secondary DB. In particular the stats may be confusing on an HA replica node if a secondary DB has not been opened by the application on the replica.
public long getPriPositionOps()
This operation corresponds to a successful call to Cursor.get
or Database.get
with Get.FIRST
, Get.LAST
,
Get.NEXT
, Get.NEXT_DUP
, Get.NEXT_NO_DUP
,
Get.PREV
, Get.PREV_DUP
or Get.PREV_NO_DUP
.
public long getSecPositionOps()
This operation corresponds to a successful call to SecondaryCursor.get
or SecondaryDatabase.get
with
Get.FIRST
, Get.LAST
,
Get.NEXT
, Get.NEXT_DUP
, Get.NEXT_NO_DUP
,
Get.PREV
, Get.PREV_DUP
or Get.PREV_NO_DUP
.
Note: Operations are currently counted as secondary DB (rather than primary DB) operations only if the DB has been opened by the application as a secondary DB. In particular the stats may be confusing on an HA replica node if a secondary DB has not been opened by the application on the replica.
public long getPriInsertOps()
This operation corresponds to a successful call to Cursor.put
or Database.put
in one of the following cases:
Put.NO_OVERWRITE
or Put.NO_DUP_DATA
is
specified.
Put.OVERWRITE
is specified and the key was inserted
because it previously did not exist in the DB.
public long getPriInsertFailOps()
This operation corresponds to a call to Cursor.put
or Database.put
with Put.NO_OVERWRITE
or Put.NO_DUP_DATA
, when the key could not be inserted because it
previously existed in the DB.
public long getSecInsertOps()
This operation corresponds to a successful call to Cursor.put
or Database.put
, for a primary DB with an associated
secondary DB. A secondary record is inserted when inserting a primary
record with a non-null secondary key, or when updating a primary record
and the secondary key is changed to to a non-null value that is
different than the previously existing value.
Note: Operations are currently counted as secondary DB (rather than primary DB) operations only if the DB has been opened by the application as a secondary DB. In particular the stats may be confusing on an HA replica node if a secondary DB has not been opened by the application on the replica.
public long getPriUpdateOps()
This operation corresponds to a successful call to Cursor.put
or Database.put
in one of the following cases:
Put.OVERWRITE
is specified and the key previously
existed in the DB.
Cursor.put
with Put.CURRENT
.
public long getSecUpdateOps()
This operation corresponds to a successful call to Cursor.put
or Database.put
, when a primary record is updated and its
TTL is changed. The associated secondary records must also be updated to
reflect the change in the TTL.
Note: Operations are currently counted as secondary DB (rather than primary DB) operations only if the DB has been opened by the application as a secondary DB. In particular the stats may be confusing on an HA replica node if a secondary DB has not been opened by the application on the replica.
public long getPriDeleteOps()
This operation corresponds to a successful call to Cursor.delete
, Database.delete
, SecondaryCursor.delete
or SecondaryDatabase.delete
.
public long getPriDeleteFailOps()
This operation corresponds to a call to Database.delete
or SecondaryDatabase.delete
, when the key could not be deleted because it
did not previously exist in the DB.
public long getSecDeleteOps()
This operation corresponds to one of the following API calls:
Cursor.delete
or
Database.delete
, that deletes a primary record
containing a non-null secondary key.
SecondaryCursor.delete
or SecondaryDatabase.delete
.
Cursor.put
or Database.put
that updates a primary record and
changes its previously non-null secondary key to null.
Note: Operations are currently counted as secondary DB (rather than primary DB) operations only if the DB has been opened by the application as a secondary DB. In particular the stats may be confusing on an HA replica node if a secondary DB has not been opened by the application on the replica.
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String toStringVerbose()
Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.