LogoLogo
Back to Speedb.io⭐ GitHubDiscord
  • 👋About
    • Speedb Use Cases
    • Speedb Communication Channels
    • Release Cadence
    • Releases
    • Roadmap
  • 💻Getting started
    • Speedb Quick Start Example
    • Dependencies
    • How to Compile Speedb
    • Drop-in Replacement
    • Use prebuilt binaries
    • How to contribute
      • Contribute code
      • Feature request process
      • Submit a pull request
      • Add or update documentation
      • Report bugs and other issues
      • Help with new and ongoing feature development
    • Kafka Streams: How to use Speedb instead of RocksDB?
  • ✨Speedb Features
    • Memory Tracking
    • Speedb Tuning Function
    • Table Pinning Policy
    • Snapshot Optimization
    • On Thread Start Callback
    • Write Flow
    • Global Delayed write
    • Live Configuration Changes
    • Report Index Size per Column Family
    • Proactive Flushing
    • Sorted Hash Memtable
    • Paired Bloom Filter
  • ➕Enhancements
    • Range Delete Improvement
    • Dynamic Delayed Writes
    • Reduce switch memtable latency
  • 🛠️Tools
    • Log Parser
    • DB_bench: Groups
    • Beezcli Tool
  • 🔦RocksDB Basics
  • 📈Performance testing
Powered by GitBook
On this page
  • Objectives
  • How to enable it?
  • Technical Details

Was this helpful?

  1. Speedb Features

Memory Tracking

Objectives

The purpose of this feature is to provide insight about the memory consumption of each component. This should be useful when debugging memory issues

How to enable it?

In order to enable the memory reporting, you should add a compilation flag:

MEMORY_REPORTING=1 make -j $(NPROC)

Technical Details

An arena is a contiguous piece of memory, which Speedb allocates once and use part of the memory to minimize number of allocations requested from the OS

The memory counter is printed to the log by default every 10 minutes.

  • This is a configurable parameter, you can change it under:

options.stats_dump_period_sec (the default of this option is 600, 10 minutes),

In order to get prints more often, the counter should be reduced.

Counters info:

  • These metrics have been chosen to be part of the memory reporting feature because they represent most of the memory allocated in Speedb.

  • Under Arena stats, there is memory allocated by the Arena, The total usage and per component that allocates using Arena.

  • Each line under the Arena Stats describes the distribution of allocations requested (and not deallocated yet) per component in the code.

    • CF Stats - shows Memtable memory allocation per CF and summarizes all CFs together.

    • rocksdb.block-cache-usage - Total block cache usage reporting

    • rocksdb.estimate-table-readers-mem - How much memory is allocated to indexes and filter blocks

    • rocksdb.block-cache-pinned-usage - Pinned block cache usage

    • CacheAllocationUsage - Total memory allocated by BlockFetcher

Example for general output:

** Memory Reporting **

Arena Stats:

Total: 16M

ArenaWrappedDBIter: 0

FileIndexer::UpdateIndex: 0

MemTable::NewIterator: 0

LevelFileInit: 0

FindLevelFileTest::Add: 0

DoGenerateLevelFilesBrief: 0

TEST_GetLevelIterator: 0

Version::AddIteratorsForLevel: 0

Version::OverlapWithLevelIterator: 0

LogBuffer::AddLogToBuffer: 0

arena_test: 0

HashLinkList: 0

HashLinkListIterator: 0

HashLinkListDynamicIterator: 0

HashSkipList: 0

HashSkipListIterator: 0

HashSkipListDynamicIterator: 0

HashSpdb: 16M

HashSpdbIterator: 0

InlineSkipList: 0

SkipList: 0

SkipListIterator: 0

SkipListLookaheadIterator: 0

VectorMemtable: 0

CompactionMergingIterator: 0

NewErrorInternalIterator: 0

NewEmptyInternalIterator: 0

MergingIterator: 0

BlockBasedTableIterator: 0

BlockPrefixIndex::Builder: 0

CuckooTableIterator: 0

PlainTableBloomV1: 0

PlainTableIndexBuilder::FillIndexes: 0

PlainTableReader::NewIterator: 0

DynamicBloom: 0

DefaultMemtableImpl: 0

WriteBatchWithIndex: 0

CF Stats:

Total: 16M

[default]: 16M

rocksdb.block-cache-usage: 96

rocksdb.estimate-table-readers-mem: 659K

rocksdb.block-cache-pinned-usage: 96

Total CacheAllocationUsage: 655K

Jmalloc

In addition when Jemalloc is being used as an allocator for Speedb, there are more memory reporting metrics, in order to enable this dump please set option.dump_malloc_stats to true.

Allocated: 262920624, active: 264196096, metadata: 7739440 (n_thp 0), resident: 273063936, mapped: 307642368, retained: 79806464

Allocated - Number of bytes allocated by the Rocksdb

Active - Number of bytes allocated actively (includes the entire pages allocated size)

Metadata - Jemalloc itself metadata to manage memory allocation

Resident - Maximum overall size allocated includes zeroed pages including metadata (which may not reserve actual memory).

Mapped - Mapped is the sum of regions of virtual address space currently dedicated (internally) to serving some live allocation. - from jemalloc git

Retained - Freed memory that Jemalloc didnt return to the OS

Source: https://jemalloc.net/jemalloc.3.html#stats.allocated

PreviousSpeedb FeaturesNextSpeedb Tuning Function

Last updated 1 year ago

Was this helpful?

✨