---
title: "Options Reference - Configuration"
url: "https://nsta1.github.io/Orleans.Lattice/docs/lattice/configuration/options-reference.html"
source: "https://github.com/NSTA1/Orleans.Lattice/blob/release/9.9/docs/lattice/configuration.md?plain=1#L127-L279"
package: "Orleans.Lattice"
version: "9.9.0"
documents: "Orleans.Lattice 9.9.0 (release line 9.9)"
built: "2026-10-04"
all-pages: "https://nsta1.github.io/Orleans.Lattice/llms.txt"
bundle: "https://nsta1.github.io/Orleans.Lattice/docs/lattice/llms-full.txt"
---
# Options Reference

Part of [Configuration](../configuration.md).

| Option | Type | Default | Safe to change after data exists? |
|---|---|---|---|
| [`ActivationReadyTimeout`](options-reference-3.md#activationreadytimeout) | `TimeSpan` | 15 seconds | Yes (on next seed) |
| [`AdmissionAdvisoryBytes`](options-reference-1.md#admissionadvisorybytes) | `long?` | `null` (advisory dry-run off) | Yes |
| [`AdmissionAdvisoryLiveKeys`](options-reference-1.md#admissionadvisorylivekeys) | `long?` | `null` (advisory dry-run off) | Yes |
| [`AtomicActionRetention`](options-reference-1.md#atomicactionretention) | `TimeSpan` | 48 hours | Yes (global; read from the default options) |
| [`AtomicWriteRetention`](options-reference-1.md#atomicwriteretention) | `TimeSpan` | 48 hours | Yes |
| [`AutoSplitEnabled`](options-reference-1.md#autosplitenabled) | `bool` | `true` | Yes |
| [`AutoSplitMinTreeAge`](options-reference-1.md#autosplitmintreeage) | `TimeSpan` | 60 seconds | Yes |
| [`BackgroundDrainLeavesPerPass`](options-reference-1.md#backgrounddrainleavesperpass) | `int` | 64 | Yes |
| [`BackgroundDrainMaxDuration`](options-reference-1.md#backgrounddrainmaxduration) | `TimeSpan` | 10 seconds | Yes |
| [`CacheTtl`](options-reference-1.md#cachettl) | `TimeSpan` | `TimeSpan.Zero` (refresh on every cross-silo read) | Yes |
| [`CompactionLeafBatchSize`](options-reference-1.md#compactionleafbatchsize) | `int` | 64 | Yes |
| [`CompactionShardTickInterval`](options-reference-1.md#compactionshardtickinterval) | `TimeSpan` | 500 milliseconds | Yes |
| [`CompactionTriggerCooldown`](../tombstone-compaction.md) | `TimeSpan` | 5 minutes | Yes |
| [`ConsolidationDrainBatchSize`](options-reference-1.md#consolidationdrainbatchsize) | `int` | 1024 | Yes |
| [`ConsolidationDrainLeavesPerPass`](options-reference-1.md#consolidationdrainleavesperpass) | `int` | 16 | Yes |
| [`CursorIdleTtl`](options-reference-1.md#cursoridlettl) | `TimeSpan` | 48 hours | Yes |
| [`DefaultLockLeaseDuration`](options-reference-1.md#defaultlockleaseduration) | `TimeSpan` | 30 seconds | Yes (global; read from the default options) |
| [`DiagnosticsCacheTtl`](options-reference-1.md#diagnosticscachettl) | `TimeSpan` | 5 seconds | Yes |
| [`DigestCoalescingWindowMs`](options-reference-1.md#digestcoalescingwindowms) | `int` | 5 (measured sweet spot) | Yes (on each leaf's next activation) |
| [`DigestPublishTimeout`](options-reference-3.md#digestpublishtimeout) | `TimeSpan` | 15 seconds | Yes (on each node's next activation) |
| [`DirtyLeafFlushIntervalMs`](../tombstone-compaction.md#dirtyleafflushintervalms) | `int` | 50 (ms) | Yes |
| [`EventStreamProviderName`](options-reference-1.md#eventstreamprovidername) | `string` | `"Default"` | Yes (on next publish) |
| [`HotShardConsolidationSkewRatio`](options-reference-1.md#hotshardconsolidationskewratio) | `double` | 1.15 | Yes |
| [`HotShardMinShardEntries`](options-reference-1.md#hotshardminshardentries) | `int` | 1024 | Yes |
| [`HotShardMinSkewRatio`](options-reference-1.md#hotshardminskewratio) | `double` | 1.5 | Yes |
| [`HotShardOpsPerSecondThreshold`](options-reference-1.md#hotshardopspersecondthreshold) | `int` | 200 | Yes |
| [`HotShardSampleInterval`](options-reference-1.md#hotshardsampleinterval) | `TimeSpan` | 30 seconds | Yes |
| [`HotShardSplitCooldown`](options-reference-1.md#hotshardsplitcooldown) | `TimeSpan` | 2 minutes | Yes |
| [`KeysPageSize`](options-reference-1.md#keyspagesize) | `int` | 512 | Yes |
| [`LeafAccessModelFlushIntervalMs`](options-reference-1.md#leafcacheprewarmcount) | `int` | 30000 (ms) | Yes (on next activation) |
| [`LeafCachePreWarmCount`](options-reference-1.md#leafcacheprewarmcount) | `int` | 8 (enabled) | Yes (on next activation) |
| [`LeafHydrationResidentBytes`](options-reference-1.md#leafhydrationresidentbytes) | `long` | 1 MiB | Yes (on next activation) |
| [`LeafPartialHydrationEnabled`](options-reference-1.md#leafpartialhydrationenabled) | `bool` | `true` | Yes (on next activation) |
| [`LeafProjectionRetention`](options-reference-1.md#leafprojectionretention) | `TimeSpan` | 7 days | Yes |
| [`LeafRetirementRetryDeadline`](options-reference-1.md#leafretirementretrydeadline) | `TimeSpan` | 2 seconds | Yes |
| [`LeafSnapshotBinaryEncodingEnabled`](options-reference-1.md#leafsnapshotbinaryencodingenabled) | `bool` | `true` | Yes (write side only; reads are always dual) |
| [`LeafSnapshotMargin`](../projection-rebuild.md) | `double` | 0.30 | Yes |
| [`LeafSnapshotMaxCoverageLagSeconds`](options-reference-1.md#leafsnapshotmaxcoveragelagseconds) | `int` | 300 | Yes |
| [`LeafSnapshotReClassifyEveryNCheckpoints`](../projection-rebuild.md) | `int` | 64 | Yes |
| [`LeafSnapshotSegmentBytes`](options-reference-1.md#leafsnapshotsegmentbytes) | `long` | 4 MiB | Yes (next capture; set it globally - see below) |
| [`MaintainProjectionDigest`](options-reference-1.md#maintainprojectiondigest) | `bool` | `true` | Yes |
| [`MaterialiserCheckpointEntries`](options-reference-1.md#materialisercheckpointentries) | `int` | 5000 | Yes |
| [`MaterialiserCheckpointInterval`](options-reference-2.md#materialisercheckpointinterval) | `TimeSpan` | 5 seconds | Yes |
| [`MaxAtomicActionArgsBytes`](options-reference-2.md#maxatomicactionargsbytes) | `int` | 32 KiB (32 768) | Yes (global; read from the default options) |
| [`MaxAtomicActionSteps`](options-reference-2.md#maxatomicactionsteps) | `int` | 64 | Yes (global; read from the default options) |
| [`MaxCacheValueBytes`](options-reference-2.md#maxcachevaluebytes) | `long?` | `null` (unbounded mirror) | Yes |
| [`MaxConcurrentAutoSplits`](options-reference-2.md#maxconcurrentautosplits) | `int` | 2 | Yes |
| [`MaxClusterConcurrentAutoSplits`](options-reference-2.md#maxclusterconcurrentautosplits) | `int?` | `null` (gate disabled) | Yes |
| [`MaxConcurrentDrains`](options-reference-2.md#maxconcurrentdrains) | `int` | 4 | Yes |
| [`MaxConcurrentMigrations`](options-reference-2.md#maxconcurrentmigrations) | `int` | 4 | Yes |
| [`MaxConcurrentShardConsolidations`](options-reference-2.md#maxconcurrentshardconsolidations) | `int` | 1 | Yes |
| [`MaxConcurrentSnapshotBaselineFolds`](options-reference-2.md#maxconcurrentsnapshotbaselinefolds) | `int` | 4 | Yes |
| [`MaxConcurrentSnapshotCaptures`](options-reference-2.md#maxconcurrentsnapshotcaptures) | `int` | 4 | Yes |
| [`MaxConcurrentStorageUsageSurfaces`](options-reference-2.md#maxconcurrentstorageusagesurfaces) | `int` | 16 | Yes |
| [`MaxConcurrentStorageUsageTrees`](options-reference-2.md#maxconcurrentstorageusagetrees) | `int` | 8 | Yes (cluster-wide; read from the default options) |
| [`MaxCursorSnapshotPinTtl`](options-reference-2.md#maxcursorsnapshotpinttl) | `TimeSpan` | 7 days | Yes |
| [`MaxDurableUnresolvedReplayWork`](options-reference-2.md#maxdurableunresolvedreplaywork) | `int` | 1 024 | Yes |
| [`MaxEstimatedBytes`](options-reference-2.md#maxestimatedbytes) | `long?` | `null` (unbounded) | Yes |
| [`MaxKeyLength`](options-reference-2.md#maxkeylength) | `int?` | `null` (unbounded) | Yes |
| [`MaxLeafBytes`](options-reference-2.md#maxleafbytes) | `long` | 64 MiB | Yes (on next activation) |
| [`MaxLeafEntriesBeforeForcedCompaction`](options-reference-2.md#maxleafentriesbeforeforcedcompaction) | `int` | 0 (disabled) | Yes |
| [`MaxLeafReplayEntries`](options-reference-2.md#maxleafreplayentries) | `int` | 10 000 | Yes |
| [`MaxLiveKeys`](options-reference-2.md#maxlivekeys) | `long?` | `null` (unbounded) | Yes |
| [`MaxLockLeaseDuration`](options-reference-1.md#maxlockleaseduration) | `TimeSpan` | 5 minutes | Yes (global; read from the default options) |
| [`MaxLeavesPerScanPage`](options-reference-2.md#maxleavesperscanpage) | `int` | 64 | Yes |
| [`MaxPhysicalShardsPerTree`](options-reference-2.md#maxphysicalshardspertree) | `int` | 256 | Yes |
| [`MaxPinnedSagaDecisions`](options-reference-2.md#maxpinnedsagadecisions) | `int` | 100 000 | Yes |
| [`MaxScanPageDuration`](options-reference-2.md#maxscanpageduration) | `TimeSpan` | 5 seconds | Yes |
| [`MaxScanPageStallDuration`](options-reference-2.md#maxscanpagestallduration) | `TimeSpan?` | `null` (derived from `ResponseTimeout`) | Yes |
| [`MaxScanRetries`](options-reference-2.md#maxscanretries) | `int` | 3 | Yes |
| [`MaxSnapshotReplayEntries`](../snapshot-cursors.md) | `long` | 10 000 000 | Yes |
| [`MaxValueSizeBytes`](options-reference-2.md#maxvaluesizebytes) | `int?` | `null` (unbounded) | Yes |
| [`MinTombstoneRatioForCompaction`](../tombstone-compaction.md) | `double` | 0.0 (disabled) | Yes |
| [`OptimisticShardRootPointReads`](options-reference-2.md#optimisticshardrootpointreads) | `bool` | `true` | Yes (on next activation) |
| [`PrefetchEntriesScan`](options-reference-2.md#prefetchentriesscan) | `bool` | `false` | Yes |
| [`PrefetchKeysScan`](options-reference-2.md#prefetchkeysscan) | `bool` | `false` | Yes |
| [`ProjectionRebuildPolicy`](options-reference-2.md#projectionrebuildpolicy) | `ProjectionRebuildPolicy` | `SnapshotThenWal` | Yes |
| [`PublishEvents`](options-reference-2.md#publishevents) | `bool` | `false` | Yes |
| [`QueueCapacity`](../queues.md) | `int?` | `null` (unbounded) | Yes |
| [`RetryPolicy`](../configuration.md#retry-policy-options) | `ILatticeRetryPolicy?` | `null` (no retry) | Yes |
| [`ShardForwardTimeout`](options-reference-2.md#shardforwardtimeout) | `TimeSpan` | 15 seconds | Yes (on each shard root's next activation) |
| [`ShardHealingBackpressureOpsPerSecond`](options-reference-2.md#shardhealingbackpressureopspersecond) | `double` | 200.0 | Yes (on next sweep) |
| [`ShardHealingCooldown`](options-reference-2.md#shardhealingcooldown) | `TimeSpan` | 5 minutes | Yes (on next sweep) |
| [`ShardHealingEnabled`](options-reference-3.md#shardhealingenabled) | `bool` | `true` | Yes (off on next sweep; on at the next sweep or keepalive tick, or at the next healing bootstrap if healing never started) |
| [`ShardHealingInterval`](options-reference-3.md#shardhealinginterval) | `TimeSpan` | 30 seconds | Yes (on next activation) |
| [`EmptyTreeProbeBudget`](options-reference-3.md#emptytreeprobebudget) | `TimeSpan` | 10 seconds | Yes (on next reshard or resize) |
| [`ShedSnapshotOpensWhenSaturated`](options-reference-2.md#shedsnapshotopenswhensaturated) | `bool` | `true` | Yes |
| [`SnapshotBaselineTtl`](../snapshot-cursors.md#baseline-ttl-leak-guard) | `TimeSpan` | 6 hours | Yes |
| [`SnapshotLeafIdleTtl`](../snapshot-cursors.md) | `TimeSpan` | 30 minutes | Yes (currently inert: no code path reads it) |
| [`SoftDeleteDuration`](options-reference-3.md#softdeleteduration) | `TimeSpan` | 72 hours | Yes |
| [`SplitDrainBatchSize`](options-reference-3.md#splitdrainbatchsize) | `int` | 1024 | Yes |
| [`StarvationDriveBudget`](options-reference-3.md#starvationdrivebudget) | `TimeSpan` | 5 minutes | Yes (on each leaf's next activation) |
| [`StorageUsageCacheTtl`](options-reference-3.md#storageusagecachettl) | `TimeSpan` | 10 seconds | Yes |
| [`StorageUsagePollInterval`](options-reference-3.md#storageusagepollinterval) | `TimeSpan` | 15 seconds | Yes (global; read once when each silo's poller starts) |
| [`StorageUsageDeepPollInterval`](options-reference-3.md#storageusagedeeppollinterval) | `TimeSpan` | `TimeSpan.Zero` (disabled) | Yes (global; read once when each silo's poller starts) |
| [`StorageUsageRollupBudget`](options-reference-3.md#storageusagerollupbudget) | `TimeSpan` | 20 seconds | Yes (cluster-wide; read from the default options) |
| [`TombstoneGracePeriod`](options-reference-3.md#tombstonegraceperiod) | `TimeSpan` | 24 hours | Yes |
| [`TxDecisionRetention`](options-reference-3.md#txdecisionretention) | `TimeSpan` | 60 seconds | Yes |
| [`TxRegistryAdmissionBudgetBytes`](options-reference-3.md#txregistryadmissionbudgetbytes) | `long?` | 768 KiB | Yes |
| [`TxRegistryShardCount`](options-reference-3.md#txregistryshardcount) | `int` | 1 | Yes (global; read from the default options; see the opt-in note) |
| [`VersionVectorRetention`](options-reference-3.md#versionvectorretention) | `TimeSpan` | `InfiniteTimeSpan` (disabled) | Yes |
| [`WalAppendDispatchTimeout`](options-reference-3.md#walappenddispatchtimeout) | `TimeSpan` | 30 seconds | Yes |
| [`WalBytePressureReclaimTarget`](options-reference-3.md#walbytepressurereclaimtarget) | `double` | 0.8 | Yes |
| [`WalDrainBudget`](options-reference-3.md#waldrainbudget) | `TimeSpan` | 75 seconds | Yes |
| [`WalMaxBatchBytes`](options-reference-3.md#walmaxbatchbytes) | `long` | 4 MiB | Yes |
| [`WalMaxBatchEntries`](options-reference-3.md#walmaxbatchentries) | `int` | 100 | Yes |
| [`WalFlushPreflightTimeout`](options-reference-3.md#walflushpreflighttimeout) | `TimeSpan` | 5 seconds | Yes |
| [`WalFlushTimeout`](options-reference-3.md#walflushtimeout) | `TimeSpan` | 15 seconds | Yes |
| [`WalGcInterval`](options-reference-5.md#walgcinterval) | `TimeSpan` | 1 hour (band ceiling) | Yes (global; read once when the scheduler starts) |
| [`WalGcMinInterval`](options-reference-5.md#walgcmininterval) | `TimeSpan` | 30 seconds (band floor) | Yes (global; read once when the scheduler starts) |
| [`WalGcStartupDelay`](options-reference-5.md#walgcstartupdelay) | `TimeSpan` | 30 seconds | Yes (global; read once when the scheduler starts) |
| [`WalMaterialiserMaxConcurrentReplays`](options-reference-5.md#walmaterialisermaxconcurrentreplays) | `int` | `0` (auto = the lesser of `Environment.ProcessorCount` and the container CPU grant) | Yes (on next silo start; set it globally - see below) |
| [`WalMaterialiserPinFlushIntervalMs`](options-reference-5.md#walmaterialiserpinflushintervalms) | `int` | 250 | Yes (global; read from the default options) |
| [`WalMaterialiserPinBuckets`](options-reference-5.md#walmaterialiserpinbuckets) | `int` | 1 (floor; the store splits itself above it) | Yes (global; read from the default options; see the rolling-upgrade note) |
| [`WalMaterialiserPinShards`](options-reference-4.md#walmaterialiserpinshards) | `int` | 8 | No (durable-store migration; see below) |
| [`WalMaterialiserPinShedCeiling`](options-reference-5.md#walmaterialiserpinshedceiling) | `TimeSpan?` | `null` (disarmed) | Yes (global; read from the default options) |
| [`WalMaxPendingBatches`](options-reference-4.md#walmaxpendingbatches) | `int` | 16 | Yes |
| [`WalAppendCoalescingInFlightThreshold`](options-reference-4.md#walappendcoalescinginflightthreshold) | `int` | 4 | Yes |
| [`WalBatchedSingleEntryAppends`](options-reference-4.md#walbatchedsingleentryappends) | `bool` | `true` | Yes |
| [`WalMaxRetainedBytes`](options-reference-4.md#walmaxretainedbytes) | `long?` | `null` (disabled) | Yes |
| [`WalDurabilityHoldCeilingBytes`](options-reference-4.md#waldurabilityholdceilingbytes) | `long?` | 256 MiB | Yes |
| [`WalPartitions`](options-reference-4.md#walpartitions) | `int` | 8 | No (per-tree, pinned at first registration) |
| [`WalRetention`](options-reference-5.md#walretention) | `TimeSpan?` | `null` (disabled) | Yes |
| [`WalReplayPermitQueueDepthPerPermit`](options-reference-5.md#walreplaypermitqueuedepthperpermit) | `int` | 4 | Yes |
| [`WalReplayPermitMaxQueueWait`](options-reference-5.md#walreplaypermitmaxqueuewait) | `TimeSpan` | 5 seconds | Yes |
| [`WalReplayMaxRecordsPerTurn`](options-reference-5.md#walreplaymaxrecordsperturn) | `int` | 256 | Yes |
| [`WalReplaySliceBudget`](options-reference-5.md#walreplayslicebudget) | `int` | 256 | Yes |
| [`WalSaturationAcuteOnly`](options-reference-4.md#walsaturationacuteonly) | `bool` | `true` | Yes (set it globally - see below) |
| [`WalSaturationDispatchTimeoutThreshold`](options-reference-3.md#walsaturationdispatchtimeoutthreshold) | `int` | 1 | Yes (global; read from the default options) |
| [`WalSaturationFlushLatencySampleWindows`](options-reference-3.md#walsaturationflushlatencysamplewindows) | `int` | 3 | Yes (global; read from the default options) |
| [`WalSaturationFlushLatencyThreshold`](options-reference-3.md#walsaturationflushlatencythreshold) | `TimeSpan?` | `null` (disabled) | Yes (the classifier reads the default options; a per-tree value sets only that tree's trip threshold - see below) |
| [`WalSaturationMaterialiserLagSampleWindows`](options-reference-4.md#walsaturationmaterialiserlagsamplewindows) | `int` | 3 | Yes (global; read from the default options) |
| [`WalSaturationMaterialiserLagThreshold`](options-reference-3.md#walsaturationmaterialiserlagthreshold) | `TimeSpan?` | 30 seconds | Yes (global; read from the default options) |
| [`WalDrainLagConsumerFreshness`](options-reference-4.md#waldrainlagconsumerfreshness) | `TimeSpan` | 5 minutes | Yes (global; read from the default options) |
| [`WalDrainLagHolderLogInterval`](options-reference-4.md#waldrainlagholderloginterval) | `TimeSpan?` | 10 minutes | Yes (global; read from the default options) |
| [`WalSaturationMaterialiserPinLatencySampleWindows`](options-reference-4.md#walsaturationmaterialiserpinlatencysamplewindows) | `int` | 3 | Yes (global; read from the default options) |
| [`WalSaturationMaterialiserPinLatencyThreshold`](options-reference-4.md#walsaturationmaterialiserpinlatencythreshold) | `TimeSpan?` | `null` (disabled) | Yes (global; read from the default options) |
| [`WalSaturationProviderFailureRateThreshold`](options-reference-3.md#walsaturationproviderfailureratethreshold) | `int` | 1 | Yes (global; read from the default options) |
| [`WalSaturationRecoveryWindow`](options-reference-4.md#walsaturationrecoverywindow) | `TimeSpan` | 1 second | Yes (global; read from the default options) |
| [`WalSaturationRecoveryReleaseBatch`](options-reference-4.md#walsaturationrecoveryreleasebatch) | `int` | 16 | Yes (global; read from the default options) |
| [`WalSaturationSampleInterval`](options-reference-3.md#walsaturationsampleinterval) | `TimeSpan` | 200 milliseconds | Yes (global; read once at silo start) |
| [`WalSaturationThrottledRatio`](options-reference-3.md#walsaturationthrottledratio) | `double` | 0.75 | Yes (global; read from the default options) |
| [`WalAdmissionSaturationWaitBudget`](options-reference-4.md#waladmissionsaturationwaitbudget) | `TimeSpan` | 5 seconds | Yes |
| [`SetManyFanOutBudget`](options-reference-4.md#setmanyfanoutbudget) | `TimeSpan` | `Timeout.InfiniteTimeSpan` (unbounded) | Yes |
| [`SetManyEnvelopeBudget`](options-reference-4.md#setmanyenvelopebudget) | `TimeSpan` | `Timeout.InfiniteTimeSpan` (unbounded) | Yes |
| [`WalAdmissionSaturationCallBudget`](options-reference-4.md#waladmissionsaturationcallbudget) | `TimeSpan` | `Timeout.InfiniteTimeSpan` (unbounded) | Yes |
| [`WalThrottledAdmissionPace`](options-reference-4.md#walthrottledadmissionpace) | `TimeSpan` | 25 milliseconds | Yes |
| [`WalStorageProvider`](../wal-storage-providers.md) | `Func<string, IWalStorageProvider>?` | `null` (DI default) | Yes |

## Contents

- [Timeout and budget ceiling to MaterialiserCheckpointEntries](options-reference-1.md)
- [MaterialiserCheckpointInterval to ShardHealingCooldown](options-reference-2.md)
- [ShardHealingEnabled to WalSaturationMaterialiserLagThreshold](options-reference-3.md)
- [WalDrainLagConsumerFreshness to WalMaterialiserPinShards](options-reference-4.md)
- [WalMaterialiserPinBuckets to WalRetention](options-reference-5.md)

Next: [Options Reference: Timeout and budget ceiling to MaterialiserCheckpointEntries](options-reference-1.md). Contents: [Configuration](../configuration.md).
