Tuning and Sizing the Consolidation Server

Though the object graph is serialized on disk, it is also fully sent to memory for performance reasons.

This page discusses:

Tuning

Basic Tuning

In the Administration Console, you can adjust:

  • The number of aggregation threads in Consolidation > Advanced Settings. For example, if you set it to 4, you get 4 transformation workers, 4 aggregation workers, and 4 forwarders (* by number of forward rules), all potentially running in parallel for an incremental batch.

  • Your commit conditions to fit your current scenarios

Advanced Tuning

In your <DATADIR>/config/Consolidation.xml file, you can add an AdvancedConfig node to ConsolidationConfig to tweak internal queues used during aggregation. It might increase throughput with more buffering, but you must take it into account in your sizing.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<conso:ConsolidationConfigList version="0" xmlns:bee="exa:exa.bee" 
xmlns:edit="exa:com.exalead.editor.v10" xmlns:index="exa:com.exalead.mercury.mami.indexing.v10" 
xmlns:conso="exa:com.exalead.mercury.mami.consolidation.v10" xmlns:config="exa:exa.bee.config>
  <conso:ConsolidationConfig name="cc0_standard" nbThreads="4" 
maxNativeMemoryConsumptionThreshold="enabled" maxNativeMemoryConsumptionInMB="2048">
 ... 
    <conso:AdvancedConfig>
      <conso:AdvancedAggregationConfig impactQueueSize="8" aggregationQueueSize="8" 
forwardQueueSize="800" />
    </conso:AdvancedConfig>
  </conso:ConsolidationConfig>
</conso:ConsolidationConfigList>

Default values for AdvancedAggregationConfig are:

  • Impact Queue size / Aggregation Queue size = number of threads * 2

  • Forward Queue size = number of threads * 200

Sizing

Heap Sizing (Estimation)

Process

Sizing formula

Transformation

MAX_PAYLOAD_SIZE * NB_THREADS * 8192

Impact Detection

((VERTEX_SIZE + ((MAX_PATH_LENGTH * MAX_PATH_COUNT) * (VERTEX_SIZE + (MAX_ARC_COUNT_PER_VERTEX * ARC_SIZE)))) * NB_THREADS) + (IMPACT_QUEUE_SIZE * VERTEX_SIZE)

Aggregation

((MAX_PAYLOAD_SIZE + ((MAX_PATH_LENGTH * MAX_PATH_COUNT) * (VERTEX_SIZE + (MAX_ARC_COUNT_PER_VERTEX * ARC_SIZE)))) * NB_THREADS) + (AGGREGATION_QUEUE_SIZE * VERTEX_SIZE)

Forward

MAX_PAYLOAD_SIZE * (FORWARD_QUEUE_SIZE + (FORWARD_RULES_COUNT * 100))

Caching

10 MB * NB_THREADS

VERTEX_SIZE (in bytes)

URI_SIZE + (TYPE_COUNT * TYPE_SIZE)

ARC_SIZE (in bytes)

TARGET_URI_SIZE + ARC_TYPE_SIZE

PAYLOAD_SIZE (in bytes)

(META_COUNT * (META_KEY_SIZE + META_VALUE_SIZE)) + (DIRECTIVE_COUNT * (DIRECTIVE_KEY_SIZE + DIRECTIVE_VALUE_SIZE)) + (PART_COUNT * (PART_KEY_SIZE + PART_VALUE_SIZE))

Hardware Sizing

Your graph structure on disk MUST fit in your system memory. Check the size of your <DATADIR>/build/consolidation-INSTANCE/sdc-storage/objectgraph.