diff --git a/posting/lists.go b/posting/lists.go
index 8f3d7744a121de2ade683d74063c620469009716..a29474cf1c7273549e371065696a7e051fe2deb1 100644
--- a/posting/lists.go
+++ b/posting/lists.go
@@ -101,22 +101,18 @@ func gentlyMerge(ms runtime.MemStats) {
 	ctr := NewCounters()
 	defer ctr.ticker.Stop()
 
-	// Pick 400 keys from dirty map.
+	// Pick 1% of the dirty map or 400 keys, whichever is higher.
+	pick := int(float64(dirtymap.Size()) * 0.01)
+	if pick < 400 {
+		pick = 400
+	}
 	var hs []gotomic.Hashable
 	dirtymap.Each(func(k gotomic.Hashable, v gotomic.Thing) bool {
 		hs = append(hs, k)
-		return len(hs) >= 400
+		return len(hs) >= pick
 	})
 
-	idx := 0
-	t := time.NewTicker(10 * time.Millisecond)
-	defer t.Stop()
-	for _ = range t.C {
-		if idx >= len(hs) {
-			break
-		}
-		hid := hs[idx]
-		idx += 1
+	for _, hid := range hs {
 		dirtymap.Delete(hid)
 
 		ret, ok := lhmap.Get(hid)