diff --git a/Makefile b/Makefile index c7a26b7872a..533a41d7f9a 100644 --- a/Makefile +++ b/Makefile @@ -32,8 +32,8 @@ DOCKER_TAG ?= erigontech/erigon:latest CGO_CFLAGS := $(shell $(GO) env CGO_CFLAGS 2>/dev/null) # don't lose default #CGO_CFLAGS += -DMDBX_FORCE_ASSERTIONS=0 # Enable MDBX's asserts by default in 'main' branch and disable in releases #CGO_CFLAGS += -DMDBX_DISABLE_VALIDATION=0 # Can disable it on CI by separated PR which will measure perf impact. -#CGO_CFLAGS += -DMDBX_ENABLE_PROFGC=0 # Disabled by default, but may be useful for performance debugging -#CGO_CFLAGS += -DMDBX_ENABLE_PGOP_STAT=0 # Disabled by default, but may be useful for performance debugging +CGO_CFLAGS += -DMDBX_ENABLE_PROFGC=1 # Disabled by default, but may be useful for performance debugging +CGO_CFLAGS += -DMDBX_ENABLE_PGOP_STAT=1 # Disabled by default, but may be useful for performance debugging #CGO_CFLAGS += -DMDBX_ENV_CHECKPID=0 # Erigon doesn't do fork() syscall diff --git a/db/kv/kv_interface.go b/db/kv/kv_interface.go index cdb8e9aa6d2..30fbc730f3d 100644 --- a/db/kv/kv_interface.go +++ b/db/kv/kv_interface.go @@ -603,6 +603,9 @@ type DBGauges struct { // these gauges are shared by all MDBX instances, but nee GcLeafMetric *metrics.GaugeVec GcOverflowMetric *metrics.GaugeVec GcPagesMetric *metrics.GaugeVec + + GCMaxRetainedPages *metrics.GaugeVec + GCMaxReaderLag *metrics.GaugeVec } type DBSummaries struct { // the summaries are particular to a DB instance @@ -635,6 +638,9 @@ func InitMDBXMGauges() *DBGauges { GcLeafMetric: metrics.GetOrCreateGaugeVec(`db_gc_leaf`, []string{dbLabelName}), GcOverflowMetric: metrics.GetOrCreateGaugeVec(`db_gc_overflow`, []string{dbLabelName}), GcPagesMetric: metrics.GetOrCreateGaugeVec(`db_gc_pages`, []string{dbLabelName}), + + GCMaxRetainedPages: metrics.GetOrCreateGaugeVec(`db_gc_max_retained_pages`, []string{dbLabelName}), + GCMaxReaderLag: metrics.GetOrCreateGaugeVec(`db_gc_max_reader_lag`, []string{dbLabelName}), } } diff --git a/db/kv/mdbx/kv_mdbx.go b/db/kv/mdbx/kv_mdbx.go index 2ca86fa296f..2d1776ee267 100644 --- a/db/kv/mdbx/kv_mdbx.go +++ b/db/kv/mdbx/kv_mdbx.go @@ -1032,6 +1032,12 @@ func (tx *MdbxTx) Commit() error { tx.db.opts.log.Error("failed to record mdbx summaries", "err", err) } + kv.MDBXGauges.GCMaxRetainedPages.WithLabelValues(string(dbLabel)).SetUint64(uint64(latency.GCDetails.MaxRetainedPages)) + kv.MDBXGauges.GCMaxReaderLag.WithLabelValues(string(dbLabel)).SetUint64(uint64(latency.GCDetails.MaxReaderLag)) + if latency.GCDetails.MaxRetainedPages > 0 || latency.GCDetails.MaxReaderLag > 0 { + log.Warn("[dbg] latency.GCDetails", "MaxRetainedPages", latency.GCDetails.MaxRetainedPages, "MaxRetainedPages", latency.GCDetails.MaxRetainedPages) + } + //kv.DbGcWorkPnlMergeTime.Update(latency.GCDetails.WorkPnlMergeTime.Seconds()) //kv.DbGcWorkPnlMergeVolume.Set(uint64(latency.GCDetails.WorkPnlMergeVolume)) //kv.DbGcWorkPnlMergeCalls.Set(uint64(latency.GCDetails.WorkPnlMergeCalls)) diff --git a/db/kv/mdbx/util.go b/db/kv/mdbx/util.go index 952bcc0760c..a4a3846b56d 100644 --- a/db/kv/mdbx/util.go +++ b/db/kv/mdbx/util.go @@ -21,10 +21,11 @@ import ( "os" "github.com/c2h5oh/datasize" + "github.com/erigontech/mdbx-go/mdbx" + "github.com/erigontech/erigon/common/log/v3" "github.com/erigontech/erigon/db/kv" "github.com/erigontech/erigon/db/kv/dbcfg" - "github.com/erigontech/mdbx-go/mdbx" ) func MustOpen(path string) kv.RwDB { diff --git a/go.mod b/go.mod index e8dfb118415..55bde3c8ac0 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ replace github.com/crate-crypto/go-eth-kzg => github.com/Giulio2002/zero-alloc-g require ( github.com/erigontech/erigon-snapshot v1.3.1-0.20260105114333-2f59a10db72b github.com/erigontech/erigonwatch v0.0.0-20240718131902-b6576bde1116 - github.com/erigontech/mdbx-go v0.39.12 + github.com/erigontech/mdbx-go v0.40.1-0.20260207034341-a73a7db11fcd github.com/erigontech/secp256k1 v1.2.0 github.com/erigontech/silkworm-go v0.24.0 ) diff --git a/go.sum b/go.sum index 2be973950e2..22ffaf9b9f5 100644 --- a/go.sum +++ b/go.sum @@ -303,8 +303,8 @@ github.com/erigontech/erigon-snapshot v1.3.1-0.20260105114333-2f59a10db72b h1:xX github.com/erigontech/erigon-snapshot v1.3.1-0.20260105114333-2f59a10db72b/go.mod h1:ooHlCl+eEYzebiPu+FP6Q6SpPUeMADn8Jxabv3IKb9M= github.com/erigontech/erigonwatch v0.0.0-20240718131902-b6576bde1116 h1:KCFa2uXEfZoBjV4buzjWmCmoqVLXiGCq0ZmQ2OjeRvQ= github.com/erigontech/erigonwatch v0.0.0-20240718131902-b6576bde1116/go.mod h1:8vQ+VjvLu2gkPs8EwdPrOTAAo++WuLuBi54N7NuAF0I= -github.com/erigontech/mdbx-go v0.39.12 h1:WjvPzloxXOYfRamIxt8NOB7i3/M8cSCSfWQHvMNANrE= -github.com/erigontech/mdbx-go v0.39.12/go.mod h1:tHUS492F5YZvccRqatNdpTDQAaN+Vv4HRARYq89KqeY= +github.com/erigontech/mdbx-go v0.40.1-0.20260207034341-a73a7db11fcd h1:r0hPSxIH6JmjWKTGv0vHW5EQUvV8n+nRG4cU8OOALmI= +github.com/erigontech/mdbx-go v0.40.1-0.20260207034341-a73a7db11fcd/go.mod h1:qo3aRGnrYWdrQHnUgj7QwYQc562Hd2CCZZc/v5lLSHw= github.com/erigontech/secp256k1 v1.2.0 h1:Q/HCBMdYYT0sh1xPZ9ZYEnU30oNyb/vt715cJhj7n7A= github.com/erigontech/secp256k1 v1.2.0/go.mod h1:GokhPepsMB+EYDs7I5JZCprxHW6+yfOcJKaKtoZ+Fls= github.com/erigontech/silkworm-go v0.24.0 h1:fFe74CjQM5LI7ouMYjmqfFaqIFzQTpMrt+ls+a5PxpE=