From e62186020bcce223c5c9a0574fe26d9974e77f16 Mon Sep 17 00:00:00 2001 From: iskylee19612 Date: Tue, 23 Jun 2026 16:52:06 +0900 Subject: [PATCH 1/6] feat(sei-db): make state-store pebbledb cache size configurable --- sei-db/config/ss_config.go | 23 ++++++++++++++++------- sei-db/config/toml.go | 6 ++++++ sei-db/db_engine/pebbledb/mvcc/db.go | 12 ++++++++---- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/sei-db/config/ss_config.go b/sei-db/config/ss_config.go index 3fe94e750d..1579555a07 100644 --- a/sei-db/config/ss_config.go +++ b/sei-db/config/ss_config.go @@ -4,13 +4,14 @@ package config type DBBackend string const ( - DefaultSSKeepRecent = 100000 - DefaultSSPruneInterval = 600 - DefaultSSImportWorkers = 1 - DefaultSSAsyncBuffer = 100 - PebbleDBBackend = "pebbledb" - RocksDBBackend = "rocksdb" - DefaultSSBackend = PebbleDBBackend + DefaultSSKeepRecent = 100000 + DefaultSSPruneInterval = 600 + DefaultSSImportWorkers = 1 + DefaultSSAsyncBuffer = 100 + PebbleDBBackend = "pebbledb" + RocksDBBackend = "rocksdb" + DefaultSSBackend = PebbleDBBackend + DefaultSSCacheSizeBytes = 32 * 1204 * 1024 ) // StateStoreConfig defines configuration for the state store (SS) layer. @@ -76,6 +77,13 @@ type StateStoreConfig struct { // When true, data is routed to separate DBs by EVM key family while // preserving the same logical store key and full key encoding inside each DB. SeparateEVMSubDBs bool `mapstructure:"evm-separate-dbs"` + + // CacheSizeBytes defines the pebbledb block cache size (in bytes) for the + // state store backend. Historical reads (e.g. eth debug_trace*, archival + // queries) are served from the SS backend rather than memIAVL, so a larger + // cache reduces disk-bound random reads. Set <= 0 to use the default. + // defaults to 32 MiB + CacheSizeBytes int64 `mapstructure:"cache-size-bytes"` } // DefaultStateStoreConfig returns the default StateStoreConfig @@ -91,5 +99,6 @@ func DefaultStateStoreConfig() StateStoreConfig { UseDefaultComparer: false, EVMSplit: false, SeparateEVMSubDBs: false, + CacheSizeBytes: DefaultSSCacheSizeBytes, } } diff --git a/sei-db/config/toml.go b/sei-db/config/toml.go index 3d210108e4..b1bcfdc0b1 100644 --- a/sei-db/config/toml.go +++ b/sei-db/config/toml.go @@ -140,6 +140,12 @@ evm-ss-split = {{ .StateStore.EVMSplit }} # When false, all EVM data stays in one DB using the current unified layout. # When true, data is routed to separate DBs while preserving the same evm key prefix format. evm-ss-separate-dbs = {{ .StateStore.SeparateEVMSubDBs }} + +# CacheSizeBytes defines the pebbledb block cache size (in bytes) for the state store. +# Historical reads (e.g. eth debug_trace*, archival queries) are served from the SS +# backend rather than memIAVL, so a larger cache reduces disk-bound random reads. +# Set <= 0 to use the default. Defaults to 33554432 (32 MiB). +ss-cache-size-bytes = {{ .StateStore.CacheSizeBytes }} ` // ReceiptStoreConfigTemplate defines the configuration template for receipt-store diff --git a/sei-db/db_engine/pebbledb/mvcc/db.go b/sei-db/db_engine/pebbledb/mvcc/db.go index 95d0ebb1b2..c95005c923 100644 --- a/sei-db/db_engine/pebbledb/mvcc/db.go +++ b/sei-db/db_engine/pebbledb/mvcc/db.go @@ -23,7 +23,7 @@ import ( errorutils "github.com/sei-protocol/sei-chain/sei-db/common/errors" "github.com/sei-protocol/sei-chain/sei-db/common/utils" - "github.com/sei-protocol/sei-chain/sei-db/config" + seidbconfig "github.com/sei-protocol/sei-chain/sei-db/config" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/sei-db/proto" "github.com/sei-protocol/sei-chain/sei-db/wal" @@ -60,7 +60,7 @@ var ( type Database struct { storage *pebble.DB asyncWriteWG sync.WaitGroup - config config.StateStoreConfig + config seidbconfig.StateStoreConfig // Earliest version for db after pruning earliestVersion atomic.Int64 // Latest version for db @@ -92,8 +92,12 @@ type VersionedChangesets struct { Done chan struct{} // non-nil for barrier: closed when this entry is processed } -func OpenDB(dataDir string, config config.StateStoreConfig) (types.StateStore, error) { - cache := pebble.NewCache(1024 * 1024 * 32) +func OpenDB(dataDir string, config seidbconfig.StateStoreConfig) (types.StateStore, error) { + cacheSizeBytes := config.CacheSizeBytes + if cacheSizeBytes <= 0 { + cacheSizeBytes = seidbconfig.DefaultSSCacheSizeBytes + } + cache := pebble.NewCache(cacheSizeBytes) defer cache.Unref() // Select comparer based on config. Note: UseDefaultComparer is NOT backwards compatible From ee4960b0fc8f2ae0dde683f8e2629a381e213dcd Mon Sep 17 00:00:00 2001 From: iskylee19612 Date: Tue, 23 Jun 2026 18:28:09 +0900 Subject: [PATCH 2/6] feat(sei-db): fix typo 1204 -> 1024 --- sei-db/config/ss_config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sei-db/config/ss_config.go b/sei-db/config/ss_config.go index 1579555a07..8092a75831 100644 --- a/sei-db/config/ss_config.go +++ b/sei-db/config/ss_config.go @@ -11,7 +11,7 @@ const ( PebbleDBBackend = "pebbledb" RocksDBBackend = "rocksdb" DefaultSSBackend = PebbleDBBackend - DefaultSSCacheSizeBytes = 32 * 1204 * 1024 + DefaultSSCacheSizeBytes = 32 * 1024 * 1024 ) // StateStoreConfig defines configuration for the state store (SS) layer. From 434de74992b473478ca7667baa99543485c49420 Mon Sep 17 00:00:00 2001 From: iskylee19612 Date: Mon, 29 Jun 2026 10:13:05 +0900 Subject: [PATCH 3/6] feat(sei-db): fix conflicts --- sei-db/db_engine/pebbledb/mvcc/db.go | 1 - 1 file changed, 1 deletion(-) diff --git a/sei-db/db_engine/pebbledb/mvcc/db.go b/sei-db/db_engine/pebbledb/mvcc/db.go index b05795240c..4016eccbbd 100644 --- a/sei-db/db_engine/pebbledb/mvcc/db.go +++ b/sei-db/db_engine/pebbledb/mvcc/db.go @@ -25,7 +25,6 @@ import ( errorutils "github.com/sei-protocol/sei-chain/sei-db/common/errors" "github.com/sei-protocol/sei-chain/sei-db/common/utils" seidbconfig "github.com/sei-protocol/sei-chain/sei-db/config" - "github.com/sei-protocol/sei-chain/sei-db/config" pebbledbmetrics "github.com/sei-protocol/sei-chain/sei-db/db_engine/pebbledb" "github.com/sei-protocol/sei-chain/sei-db/db_engine/types" "github.com/sei-protocol/sei-chain/sei-db/proto" From 651c4e7b6194a3fc67e76f0800f3cc5a9e40dccc Mon Sep 17 00:00:00 2001 From: iskylee19612 Date: Wed, 15 Jul 2026 18:50:03 +0900 Subject: [PATCH 4/6] feat(sei-db): wire ss-cache-size-bytes through to the pebbledb block cache --- app/seidb.go | 4 ++++ sei-cosmos/server/config/config.go | 1 + sei-db/config/ss_config.go | 2 +- sei-db/config/toml.go | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/seidb.go b/app/seidb.go index f419a98a60..a5fa90cd35 100644 --- a/app/seidb.go +++ b/app/seidb.go @@ -49,6 +49,7 @@ const ( FlagSSPruneInterval = "state-store.ss-prune-interval" FlagSSImportNumWorkers = "state-store.ss-import-num-workers" FlagSSReadWriteMetrics = "state-store.ss-enable-read-write-metrics" + FlagSSCacheSize = "state-store.ss-cache-size-bytes" // EVM SS optimization (embedded in SS config, controlled via write/read mode) FlagEVMSSDirectory = "state-store.evm-ss-db-directory" @@ -186,6 +187,9 @@ func parseSSConfigs(appOpts servertypes.AppOptions) config.StateStoreConfig { ssConfig.ImportNumWorkers = cast.ToInt(appOpts.Get(FlagSSImportNumWorkers)) ssConfig.DBDirectory = cast.ToString(appOpts.Get(FlagSSDirectory)) ssConfig.EnableReadWriteMetrics = cast.ToBool(appOpts.Get(FlagSSReadWriteMetrics)) + if v := appOpts.Get(FlagSSCacheSize); v != nil { + ssConfig.CacheSizeBytes = cast.ToInt64(v) + } // EVM optimization fields (embedded in SS config) ssConfig.EVMDBDirectory = cast.ToString(appOpts.Get(FlagEVMSSDirectory)) diff --git a/sei-cosmos/server/config/config.go b/sei-cosmos/server/config/config.go index c426653820..6af54b8e37 100644 --- a/sei-cosmos/server/config/config.go +++ b/sei-cosmos/server/config/config.go @@ -613,6 +613,7 @@ func GetConfig(v *viper.Viper) (Config, error) { EVMSplit: v.GetBool("state-store.evm-ss-split"), EVMDBDirectory: v.GetString("state-store.evm-ss-db-directory"), SeparateEVMSubDBs: v.GetBool("state-store.evm-ss-separate-dbs"), + CacheSizeBytes: v.GetInt64("state-store.evm-ss-cache-size-bytes"), }, Genesis: GenesisConfig{ StreamImport: v.GetBool("genesis.stream-import"), diff --git a/sei-db/config/ss_config.go b/sei-db/config/ss_config.go index a5ea336907..9a72d4a497 100644 --- a/sei-db/config/ss_config.go +++ b/sei-db/config/ss_config.go @@ -87,7 +87,7 @@ type StateStoreConfig struct { // queries) are served from the SS backend rather than memIAVL, so a larger // cache reduces disk-bound random reads. Set <= 0 to use the default. // defaults to 32 MiB - CacheSizeBytes int64 `mapstructure:"cache-size-bytes"` + CacheSizeBytes int64 `mapstructure:"ss-cache-size-bytes"` } // DefaultStateStoreConfig returns the default StateStoreConfig diff --git a/sei-db/config/toml.go b/sei-db/config/toml.go index c871d32b7c..f72ff71914 100644 --- a/sei-db/config/toml.go +++ b/sei-db/config/toml.go @@ -178,7 +178,7 @@ evm-ss-separate-dbs = {{ .StateStore.SeparateEVMSubDBs }} # Historical reads (e.g. eth debug_trace*, archival queries) are served from the SS # backend rather than memIAVL, so a larger cache reduces disk-bound random reads. # Set <= 0 to use the default. Defaults to 33554432 (32 MiB). -ss-cache-size-bytes = {{ .StateStore.CacheSizeBytes }} +ss-cache-size-bytes = {{ .Stat eStore.CacheSizeBytes }} ` // ReceiptStoreConfigTemplate defines the configuration template for receipt-store From f9e2c412c3cb32b96839860a29b746369c636e94 Mon Sep 17 00:00:00 2001 From: iskylee19612 Date: Wed, 15 Jul 2026 18:52:35 +0900 Subject: [PATCH 5/6] feat(sei-db): typo --- sei-db/config/toml.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sei-db/config/toml.go b/sei-db/config/toml.go index f72ff71914..c871d32b7c 100644 --- a/sei-db/config/toml.go +++ b/sei-db/config/toml.go @@ -178,7 +178,7 @@ evm-ss-separate-dbs = {{ .StateStore.SeparateEVMSubDBs }} # Historical reads (e.g. eth debug_trace*, archival queries) are served from the SS # backend rather than memIAVL, so a larger cache reduces disk-bound random reads. # Set <= 0 to use the default. Defaults to 33554432 (32 MiB). -ss-cache-size-bytes = {{ .Stat eStore.CacheSizeBytes }} +ss-cache-size-bytes = {{ .StateStore.CacheSizeBytes }} ` // ReceiptStoreConfigTemplate defines the configuration template for receipt-store From 3f3882db8a67202266e67b91c152a8b80308a655 Mon Sep 17 00:00:00 2001 From: iskylee19612 Date: Wed, 15 Jul 2026 18:54:22 +0900 Subject: [PATCH 6/6] feat(sei-db): fix typo --- sei-cosmos/server/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sei-cosmos/server/config/config.go b/sei-cosmos/server/config/config.go index 6af54b8e37..ac6d84e399 100644 --- a/sei-cosmos/server/config/config.go +++ b/sei-cosmos/server/config/config.go @@ -613,7 +613,7 @@ func GetConfig(v *viper.Viper) (Config, error) { EVMSplit: v.GetBool("state-store.evm-ss-split"), EVMDBDirectory: v.GetString("state-store.evm-ss-db-directory"), SeparateEVMSubDBs: v.GetBool("state-store.evm-ss-separate-dbs"), - CacheSizeBytes: v.GetInt64("state-store.evm-ss-cache-size-bytes"), + CacheSizeBytes: v.GetInt64("state-store.ss-cache-size-bytes"), }, Genesis: GenesisConfig{ StreamImport: v.GetBool("genesis.stream-import"),