Skip to content

Commit df89233

Browse files
rjl493456442karalabe
authored andcommitted
ethdb/leveldb: disable seek compaction (#20130)
* vendor: update leveldb * ethdb/leveldb: disable seek compaction and add metrics * vendor: udpate latest levledb * ethdb/leveldb: fix typo
1 parent ead7117 commit df89233

File tree

15 files changed

+197
-70
lines changed

15 files changed

+197
-70
lines changed

ethdb/leveldb/leveldb.go

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,18 @@ type Database struct {
6262
fn string // filename for reporting
6363
db *leveldb.DB // LevelDB instance
6464

65-
compTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction
66-
compReadMeter metrics.Meter // Meter for measuring the data read during compaction
67-
compWriteMeter metrics.Meter // Meter for measuring the data written during compaction
68-
writeDelayNMeter metrics.Meter // Meter for measuring the write delay number due to database compaction
69-
writeDelayMeter metrics.Meter // Meter for measuring the write delay duration due to database compaction
70-
diskSizeGauge metrics.Gauge // Gauge for tracking the size of all the levels in the database
71-
diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read
72-
diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written
65+
compTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction
66+
compReadMeter metrics.Meter // Meter for measuring the data read during compaction
67+
compWriteMeter metrics.Meter // Meter for measuring the data written during compaction
68+
writeDelayNMeter metrics.Meter // Meter for measuring the write delay number due to database compaction
69+
writeDelayMeter metrics.Meter // Meter for measuring the write delay duration due to database compaction
70+
diskSizeGauge metrics.Gauge // Gauge for tracking the size of all the levels in the database
71+
diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read
72+
diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written
73+
memCompGauge metrics.Gauge // Gauge for tracking the number of memory compaction
74+
level0CompGauge metrics.Gauge // Gauge for tracking the number of table compaction in level0
75+
nonlevel0CompGauge metrics.Gauge // Gauge for tracking the number of table compaction in non0 level
76+
seekCompGauge metrics.Gauge // Gauge for tracking the number of table compaction caused by read opt
7377

7478
quitLock sync.Mutex // Mutex protecting the quit channel access
7579
quitChan chan chan error // Quit channel to stop the metrics collection before closing the database
@@ -96,6 +100,7 @@ func New(file string, cache int, handles int, namespace string) (*Database, erro
96100
BlockCacheCapacity: cache / 2 * opt.MiB,
97101
WriteBuffer: cache / 4 * opt.MiB, // Two of these are used internally
98102
Filter: filter.NewBloomFilter(10),
103+
DisableSeeksCompaction: true,
99104
})
100105
if _, corrupted := err.(*errors.ErrCorrupted); corrupted {
101106
db, err = leveldb.RecoverFile(file, nil)
@@ -118,6 +123,10 @@ func New(file string, cache int, handles int, namespace string) (*Database, erro
118123
ldb.diskWriteMeter = metrics.NewRegisteredMeter(namespace+"disk/write", nil)
119124
ldb.writeDelayMeter = metrics.NewRegisteredMeter(namespace+"compact/writedelay/duration", nil)
120125
ldb.writeDelayNMeter = metrics.NewRegisteredMeter(namespace+"compact/writedelay/counter", nil)
126+
ldb.memCompGauge = metrics.NewRegisteredGauge(namespace+"compact/memory", nil)
127+
ldb.level0CompGauge = metrics.NewRegisteredGauge(namespace+"compact/level0", nil)
128+
ldb.nonlevel0CompGauge = metrics.NewRegisteredGauge(namespace+"compact/nonlevel0", nil)
129+
ldb.seekCompGauge = metrics.NewRegisteredGauge(namespace+"compact/seek", nil)
121130

122131
// Start up the metrics gathering and return
123132
go ldb.meter(metricsGatheringInterval)
@@ -375,6 +384,29 @@ func (db *Database) meter(refresh time.Duration) {
375384
}
376385
iostats[0], iostats[1] = nRead, nWrite
377386

387+
compCount, err := db.db.GetProperty("leveldb.compcount")
388+
if err != nil {
389+
db.log.Error("Failed to read database iostats", "err", err)
390+
merr = err
391+
continue
392+
}
393+
394+
var (
395+
memComp uint32
396+
level0Comp uint32
397+
nonLevel0Comp uint32
398+
seekComp uint32
399+
)
400+
if n, err := fmt.Sscanf(compCount, "MemComp:%d Level0Comp:%d NonLevel0Comp:%d SeekComp:%d", &memComp, &level0Comp, &nonLevel0Comp, &seekComp); n != 4 || err != nil {
401+
db.log.Error("Compaction count statistic not found")
402+
merr = err
403+
continue
404+
}
405+
db.memCompGauge.Update(int64(memComp))
406+
db.level0CompGauge.Update(int64(level0Comp))
407+
db.nonlevel0CompGauge.Update(int64(nonLevel0Comp))
408+
db.seekCompGauge.Update(int64(seekComp))
409+
378410
// Sleep a bit, then repeat the stats collection
379411
select {
380412
case errc = <-db.quitChan:

vendor/github.com/syndtr/goleveldb/leveldb/batch.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/syndtr/goleveldb/leveldb/db.go

Lines changed: 18 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go

Lines changed: 26 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go

Lines changed: 20 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)