|
|
@ -179,17 +179,18 @@ func InspectDatabase(db ethdb.Database) error { |
|
|
|
logged = time.Now() |
|
|
|
logged = time.Now() |
|
|
|
|
|
|
|
|
|
|
|
// Key-value store statistics
|
|
|
|
// Key-value store statistics
|
|
|
|
total common.StorageSize |
|
|
|
total common.StorageSize |
|
|
|
headerSize common.StorageSize |
|
|
|
headerSize common.StorageSize |
|
|
|
bodySize common.StorageSize |
|
|
|
bodySize common.StorageSize |
|
|
|
receiptSize common.StorageSize |
|
|
|
receiptSize common.StorageSize |
|
|
|
tdSize common.StorageSize |
|
|
|
tdSize common.StorageSize |
|
|
|
numHashPairing common.StorageSize |
|
|
|
numHashPairing common.StorageSize |
|
|
|
hashNumPairing common.StorageSize |
|
|
|
hashNumPairing common.StorageSize |
|
|
|
trieSize common.StorageSize |
|
|
|
trieSize common.StorageSize |
|
|
|
txlookupSize common.StorageSize |
|
|
|
txlookupSize common.StorageSize |
|
|
|
preimageSize common.StorageSize |
|
|
|
preimageSize common.StorageSize |
|
|
|
bloomBitsSize common.StorageSize |
|
|
|
bloomBitsSize common.StorageSize |
|
|
|
|
|
|
|
cliqueSnapsSize common.StorageSize |
|
|
|
|
|
|
|
|
|
|
|
// Ancient store statistics
|
|
|
|
// Ancient store statistics
|
|
|
|
ancientHeaders common.StorageSize |
|
|
|
ancientHeaders common.StorageSize |
|
|
@ -199,8 +200,12 @@ func InspectDatabase(db ethdb.Database) error { |
|
|
|
ancientTds common.StorageSize |
|
|
|
ancientTds common.StorageSize |
|
|
|
|
|
|
|
|
|
|
|
// Les statistic
|
|
|
|
// Les statistic
|
|
|
|
ChtTrieNodes common.StorageSize |
|
|
|
chtTrieNodes common.StorageSize |
|
|
|
BloomTrieNodes common.StorageSize |
|
|
|
bloomTrieNodes common.StorageSize |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Meta- and unaccounted data
|
|
|
|
|
|
|
|
metadata common.StorageSize |
|
|
|
|
|
|
|
unaccounted common.StorageSize |
|
|
|
) |
|
|
|
) |
|
|
|
// Inspect key-value database first.
|
|
|
|
// Inspect key-value database first.
|
|
|
|
for it.Next() { |
|
|
|
for it.Next() { |
|
|
@ -228,12 +233,26 @@ func InspectDatabase(db ethdb.Database) error { |
|
|
|
preimageSize += size |
|
|
|
preimageSize += size |
|
|
|
case bytes.HasPrefix(key, bloomBitsPrefix) && len(key) == (len(bloomBitsPrefix)+10+common.HashLength): |
|
|
|
case bytes.HasPrefix(key, bloomBitsPrefix) && len(key) == (len(bloomBitsPrefix)+10+common.HashLength): |
|
|
|
bloomBitsSize += size |
|
|
|
bloomBitsSize += size |
|
|
|
|
|
|
|
case bytes.HasPrefix(key, []byte("clique-")) && len(key) == 7+common.HashLength: |
|
|
|
|
|
|
|
cliqueSnapsSize += size |
|
|
|
case bytes.HasPrefix(key, []byte("cht-")) && len(key) == 4+common.HashLength: |
|
|
|
case bytes.HasPrefix(key, []byte("cht-")) && len(key) == 4+common.HashLength: |
|
|
|
ChtTrieNodes += size |
|
|
|
chtTrieNodes += size |
|
|
|
case bytes.HasPrefix(key, []byte("blt-")) && len(key) == 4+common.HashLength: |
|
|
|
case bytes.HasPrefix(key, []byte("blt-")) && len(key) == 4+common.HashLength: |
|
|
|
BloomTrieNodes += size |
|
|
|
bloomTrieNodes += size |
|
|
|
case len(key) == common.HashLength: |
|
|
|
case len(key) == common.HashLength: |
|
|
|
trieSize += size |
|
|
|
trieSize += size |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
var accounted bool |
|
|
|
|
|
|
|
for _, meta := range [][]byte{databaseVerisionKey, headHeaderKey, headBlockKey, headFastBlockKey, fastTrieProgressKey, ancientKey} { |
|
|
|
|
|
|
|
if bytes.Equal(key, meta) { |
|
|
|
|
|
|
|
metadata += size |
|
|
|
|
|
|
|
accounted = true |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if !accounted { |
|
|
|
|
|
|
|
unaccounted += size |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
count += 1 |
|
|
|
count += 1 |
|
|
|
if count%1000 == 0 && time.Since(logged) > 8*time.Second { |
|
|
|
if count%1000 == 0 && time.Since(logged) > 8*time.Second { |
|
|
@ -261,18 +280,24 @@ func InspectDatabase(db ethdb.Database) error { |
|
|
|
{"Key-Value store", "Bloombit index", bloomBitsSize.String()}, |
|
|
|
{"Key-Value store", "Bloombit index", bloomBitsSize.String()}, |
|
|
|
{"Key-Value store", "Trie nodes", trieSize.String()}, |
|
|
|
{"Key-Value store", "Trie nodes", trieSize.String()}, |
|
|
|
{"Key-Value store", "Trie preimages", preimageSize.String()}, |
|
|
|
{"Key-Value store", "Trie preimages", preimageSize.String()}, |
|
|
|
|
|
|
|
{"Key-Value store", "Clique snapshots", cliqueSnapsSize.String()}, |
|
|
|
|
|
|
|
{"Key-Value store", "Singleton metadata", metadata.String()}, |
|
|
|
{"Ancient store", "Headers", ancientHeaders.String()}, |
|
|
|
{"Ancient store", "Headers", ancientHeaders.String()}, |
|
|
|
{"Ancient store", "Bodies", ancientBodies.String()}, |
|
|
|
{"Ancient store", "Bodies", ancientBodies.String()}, |
|
|
|
{"Ancient store", "Receipts", ancientReceipts.String()}, |
|
|
|
{"Ancient store", "Receipts", ancientReceipts.String()}, |
|
|
|
{"Ancient store", "Difficulties", ancientTds.String()}, |
|
|
|
{"Ancient store", "Difficulties", ancientTds.String()}, |
|
|
|
{"Ancient store", "Block number->hash", ancientHashes.String()}, |
|
|
|
{"Ancient store", "Block number->hash", ancientHashes.String()}, |
|
|
|
{"Light client", "CHT trie nodes", ChtTrieNodes.String()}, |
|
|
|
{"Light client", "CHT trie nodes", chtTrieNodes.String()}, |
|
|
|
{"Light client", "Bloom trie nodes", BloomTrieNodes.String()}, |
|
|
|
{"Light client", "Bloom trie nodes", bloomTrieNodes.String()}, |
|
|
|
} |
|
|
|
} |
|
|
|
table := tablewriter.NewWriter(os.Stdout) |
|
|
|
table := tablewriter.NewWriter(os.Stdout) |
|
|
|
table.SetHeader([]string{"Database", "Category", "Size"}) |
|
|
|
table.SetHeader([]string{"Database", "Category", "Size"}) |
|
|
|
table.SetFooter([]string{"", "Total", total.String()}) |
|
|
|
table.SetFooter([]string{"", "Total", total.String()}) |
|
|
|
table.AppendBulk(stats) |
|
|
|
table.AppendBulk(stats) |
|
|
|
table.Render() |
|
|
|
table.Render() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if unaccounted > 0 { |
|
|
|
|
|
|
|
log.Error("Database contains unaccounted data", "size", unaccounted) |
|
|
|
|
|
|
|
} |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|