@@ -40,7 +40,9 @@ const (
4040
4141 // freezerBatchLimit is the maximum number of blocks to freeze in one batch
4242 // before doing an fsync and deleting it from the key-value store.
43- freezerBatchLimit = 30000
43+ // TODO(galaio): For BSC, the 0.75 interval and freezing of 30,000 blocks will seriously affect performance.
44+ // It is temporarily adjusted to 100, and improves the freezing performance later.
45+ freezerBatchLimit = 100
4446)
4547
4648var (
@@ -175,7 +177,7 @@ func (f *chainFreezer) freezeThreshold(db ethdb.Reader) (uint64, error) {
175177//
176178// This functionality is deliberately broken off from block importing to avoid
177179// incurring additional data shuffling delays on block propagation.
178- func (f * chainFreezer ) freeze (db ethdb.KeyValueStore ) {
180+ func (f * chainFreezer ) freeze (db ethdb.KeyValueStore , continueFreeze bool ) {
179181 var (
180182 backoff bool
181183 triggered chan struct {} // Used in tests
@@ -409,6 +411,12 @@ func (f *chainFreezer) freeze(db ethdb.KeyValueStore) {
409411 }
410412 f .tryPruneHistoryBlock (* number )
411413
414+ // TODO(galaio): Temporarily comment that the current BSC is suitable for small-volume writes,
415+ // and then the large-volume mode will be enabled after optimizing the freeze performance of ancient.
416+ if ! continueFreeze {
417+ backoff = true
418+ continue
419+ }
412420 // Avoid database thrashing with tiny writes
413421 if frozen - first < freezerBatchLimit {
414422 backoff = true
@@ -427,6 +435,18 @@ func (f *chainFreezer) tryPruneBlobAncientTable(env *ethdb.FreezerEnv, num uint6
427435 return
428436 }
429437 expectTail := num - reserveThreshold
438+
439+ // check if the head is larger than expectTail, it occurs when a large number of historical blocks are not frozen in time
440+ // expect: blobAncientTail < expectTail < ancientHead
441+ ancientHead , err := f .Ancients ()
442+ if err != nil {
443+ log .Error ("Cannot get ancients" , "err" , err )
444+ return
445+ }
446+ if ancientHead <= expectTail {
447+ return
448+ }
449+
430450 start := time .Now ()
431451 if _ , err := f .TruncateTableTail (ChainFreezerBlobSidecarTable , expectTail ); err != nil {
432452 log .Error ("Cannot prune blob ancient" , "block" , num , "expectTail" , expectTail , "err" , err )
0 commit comments