diff options
author | Martin Kobetic <mkobetic@gmail.com> | 2014-04-22 18:22:42 +0000 |
---|---|---|
committer | Martin Kobetic <mkobetic@gmail.com> | 2014-04-22 18:22:42 +0000 |
commit | 382ccc27461413f8e47d4db3016f8a1a20aa0617 (patch) | |
tree | bbc3508c6db682b87413f955fbd8941056b5cb2f | |
parent | Merge pull request #134 from Shopify/c_cursor (diff) | |
download | dedo-382ccc27461413f8e47d4db3016f8a1a20aa0617.tar.gz dedo-382ccc27461413f8e47d4db3016f8a1a20aa0617.tar.xz |
add Used/Free Leaf/Branch bucket stats
-rw-r--r-- | bucket.go | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -331,12 +331,23 @@ func (b *Bucket) ForEach(fn func(k, v []byte) error) error { // Stat returns stats on a bucket. func (b *Bucket) Stat() *BucketStat { s := &BucketStat{} + pageSize := b.Tx().DB().Info().PageSize b.tx.forEachPage(b.root, 0, func(p *page, depth int) { if (p.flags & leafPageFlag) != 0 { s.LeafPageCount++ s.KeyCount += int(p.count) + lastElement := p.leafPageElement(p.count - 1) + used := pageHeaderSize + (leafPageElementSize * int(p.count-1)) + used += int(lastElement.pos + lastElement.ksize + lastElement.vsize) + s.UsedLeafSpace += used + s.FreeLeafSpace += int(p.overflow+1)*pageSize - used } else if (p.flags & branchPageFlag) != 0 { s.BranchPageCount++ + lastElement := p.branchPageElement(p.count - 1) + used := pageHeaderSize + (branchPageElementSize * int(p.count-1)) + used += int(lastElement.pos + lastElement.ksize) + s.UsedBranchSpace += used + s.FreeBranchSpace += int(p.overflow+1)*pageSize - used } s.OverflowPageCount += int(p.overflow) @@ -511,4 +522,8 @@ type BucketStat struct { OverflowPageCount int KeyCount int MaxDepth int + UsedBranchSpace int + FreeBranchSpace int + UsedLeafSpace int + FreeLeafSpace int } |