mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
ethdb: track compaction progress data in write pause status
This commit is contained in:
parent
eaff89291c
commit
52381ccb83
1 changed files with 22 additions and 3 deletions
|
|
@ -279,6 +279,12 @@ func (db *LDBDatabase) meter(refresh time.Duration) {
|
||||||
delayDuration string
|
delayDuration string
|
||||||
duration time.Duration
|
duration time.Duration
|
||||||
paused bool
|
paused bool
|
||||||
|
|
||||||
|
// Cumulative compaction statistic for write pause stage.
|
||||||
|
wpStart string
|
||||||
|
start time.Time
|
||||||
|
count int32
|
||||||
|
total, processed float64
|
||||||
)
|
)
|
||||||
if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil {
|
if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil {
|
||||||
db.log.Error("Write delay statistic not found")
|
db.log.Error("Write delay statistic not found")
|
||||||
|
|
@ -291,6 +297,19 @@ func (db *LDBDatabase) meter(refresh time.Duration) {
|
||||||
merr = err
|
merr = err
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if paused {
|
||||||
|
if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t Start:%s Count:%d Total(MB):%f Processed(MB):%f",
|
||||||
|
&delayN, &delayDuration, &paused, &wpStart, &count, &total, &processed); n != 7 || err != nil {
|
||||||
|
db.log.Error("Failed to parse write pause compaction statistic", "err", err)
|
||||||
|
merr = err
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if start, err = time.Parse(time.RFC3339, wpStart); err != nil {
|
||||||
|
db.log.Error("Failed to parse write pause status start time", "err", err)
|
||||||
|
merr = err
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
if db.writeDelayNMeter != nil {
|
if db.writeDelayNMeter != nil {
|
||||||
db.writeDelayNMeter.Mark(delayN - delaystats[0])
|
db.writeDelayNMeter.Mark(delayN - delaystats[0])
|
||||||
// If the write delay number been collected in the last minute exceeds the predefined threshold,
|
// If the write delay number been collected in the last minute exceeds the predefined threshold,
|
||||||
|
|
@ -317,12 +336,12 @@ func (db *LDBDatabase) meter(refresh time.Duration) {
|
||||||
}
|
}
|
||||||
// If a warning that db is performing compaction has been displayed, any subsequent
|
// If a warning that db is performing compaction has been displayed, any subsequent
|
||||||
// warnings will be withheld for one minute not to overwhelm the user.
|
// warnings will be withheld for one minute not to overwhelm the user.
|
||||||
if paused && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 &&
|
if paused && count > 0 && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 &&
|
||||||
time.Now().After(lastWritePaused.Add(writeDelayWarningThrottler)) {
|
time.Now().After(lastWritePaused.Add(writeDelayWarningThrottler)) {
|
||||||
db.log.Warn("Database compacting, degraded performance")
|
log.Warn("Database compacting", "elapsed", time.Since(start), "count", count, "total(MB)", total,
|
||||||
|
"processed(MB)", processed)
|
||||||
lastWritePaused = time.Now()
|
lastWritePaused = time.Now()
|
||||||
}
|
}
|
||||||
|
|
||||||
delaystats[0], delaystats[1] = delayN, duration.Nanoseconds()
|
delaystats[0], delaystats[1] = delayN, duration.Nanoseconds()
|
||||||
|
|
||||||
// Retrieve the database iostats.
|
// Retrieve the database iostats.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue