Why history is the whole argument
A circular buffer is the constraint every other limitation follows from.
Everything this product does that AdGuard Home does not is downstream of one decision: keep the log instead of letting it overwrite itself.
This is the weakest of the arguments on Pi-hole, and it is worth saying so plainly: FTL already keeps a year. What follows is the AdGuard version of the argument, and then what is actually left of it here.
What a circular buffer means in practice#
A is sized in entries, not in days. When it fills, the oldest entry is overwritten by the newest. On a household doing tens of thousands of lookups a day, that is a few hours.
AdGuard Home query log
holds 0 · 0 lost
fixed capacity · oldest overwritten on arrival
elele. DNS store
holds 0 · 0 lost
append only · detail pruned at 90 days, rollups kept
It is a completely reasonable design for a resolver. A resolver needs recent history to debug “why did that not load a minute ago”, and keeping more would mean managing storage on devices that often have very little. The constraint only becomes a problem the moment you want to ask a question about last Tuesday.
What becomes possible with ninety days#
| Question | Needs |
|---|---|
| Is this domain new to my network? | Every domain's first_seen, over the whole window |
| When is this device usually awake? | Enough weeks to make an hour-of-week grid mean something |
| Did blocking this break anything? | Before and after, days apart |
| Is this thing beaconing? | Hundreds of intervals to measure evenness across |
| Has this device gone quiet? | A baseline of what normal was for it |
| Is my resolver slower than last month? | Last month |
None of those are exotic. All of them are impossible against four hours of data, and that is the entire reason the ingest layer exists.
What it costs#
- Disk. 300–500MB for ninety days of a busy household, indexes included.
- Writes. A handful of rows a second, batched into transactions, on a card that does not love being written to. This is why the SQLite pragmas are what they are.
- A second process to keep running. If ingest stops, the history stops. There is no way to recover the gap afterwards, because AdGuard Home has already overwritten it.On Pi-hole the gap is usually recoverable, because FTL still has the rows — backfill walks back into them when ingest restarts. It is the one failure mode that is genuinely less bad here. That is why the lag indicator is in the top bar of every screen rather than on a settings page.