Refresh, Retry & Expire in DNS: How SOA Timing Actually Works

Three fields that define exactly how patient a DNS zone is with a temporarily unreachable primary server, and how to tune them well.

📅 Published August 2026· ⏳ 17 min read· ✍️ ToolsNovaHub Editorial Team

Three of the SOA record's seven fields exist purely to govern timing: refresh, retry, and expire. Together they define exactly how tolerant a zone is of a temporarily unreachable primary server, and getting the relationship between them wrong is a quiet, common source of DNS reliability problems. This guide breaks down what each one actually controls and how to set them sensibly.

⭐ ToolsNovaHub Pro Tip
Think of refresh, retry, and expire as three concentric time windows, not three independent numbers. Retry should sit comfortably inside refresh, and expire should be generous enough to cover several full refresh cycles' worth of a genuine, if unlikely, extended outage.
⚠️ Common Beginner Mistake
Setting expire to a value close to or shorter than refresh. This leaves almost no safety margin — a single missed refresh cycle during a brief primary hiccup can push a secondary straight toward expiring the zone entirely.

📝 Introduction

DNS was designed under the assumption that a primary server and its secondaries wouldn't always be able to talk to each other reliably — networks fail, servers go down for maintenance, connectivity hiccups happen. Rather than pretending that never occurs, the SOA record builds explicit tolerance for it directly into the protocol through three timing fields, each answering a slightly different question about how patient a secondary should be.

🔍 Defining Each Field Precisely

Refresh is how often, under normal healthy conditions, a secondary checks the primary's current serial. Retry is the shorter interval a secondary falls back to specifically after a refresh check fails, letting it recover from a brief hiccup faster than waiting for the next full refresh cycle. Expire is the outer limit — if a secondary genuinely can't reach the primary for longer than this, it stops serving the zone authoritatively at all, treating its data as too stale to trust.

🔄 How the Three Values Relate to Each Other

FieldAnswersRelative Size
RefreshHow often to check normally?Baseline
RetryHow soon to recheck after a failure?Shorter than refresh
ExpireHow long before giving up entirely?Much longer than refresh — days to weeks

The intended relationship is refresh > retry, and expire >> refresh — a secondary should recheck routinely, retry quickly after hiccups, and only give up after a genuinely extended, unusual outage, not a routine blip.

⚙️ Technical Walkthrough: A Failure Scenario

1

Primary Becomes Unreachable

The secondary's next scheduled refresh check fails to get a response.

2

Retry Interval Kicks In

The secondary switches to the shorter retry interval, checking more frequently while the outage continues.

3

Primary Recovers (Common Case)

A check succeeds again, the secondary confirms the serial, and normal refresh-interval behavior resumes.

4

Or, Expire Is Reached (Rare Case)

If the outage persists past the expire value, the secondary stops answering authoritatively for the zone entirely.

⚙️ Typical Provider Defaults

Common industry-standard defaults look roughly like a refresh of 1–2 hours, a retry of 15–30 minutes, and an expire of 1–2 weeks — values chosen to comfortably absorb routine maintenance windows and even fairly serious extended outages without a secondary prematurely dropping the zone, while still keeping normal propagation reasonably prompt.

🎯 Tuning Guidance by Use Case

Use CaseSuggested Adjustment
Zone changes very frequently (active development, dynamic services)Shorter refresh, standard retry/expire
Highly stable, rarely-changing zoneProvider defaults are usually already appropriate
Primary infrastructure has a history of brief outagesSlightly longer expire for extra margin
Strict internal SLA requiring fast propagationShorter refresh, carefully weighed against added query overhead

🏢 Hosting & Cloud Examples

Traditional shared-hosting DNS panels frequently leave these three values at whatever the underlying software's install defaults were, sometimes for years, without anyone revisiting them. Cloud DNS platforms generally choose more deliberately tuned defaults reflecting their own large-scale operational experience — a reasonable starting point for most users, though still worth reviewing rather than assuming is universally correct for every workload.

🏢 Enterprise Reliability Scenarios

Organizations running geographically distributed secondary infrastructure sometimes deliberately extend expire values well beyond typical defaults specifically to tolerate extended regional network partitions without any secondary dropping authoritative service — a conservative choice that trades a slightly longer worst-case staleness window for meaningfully improved resilience during genuine large-scale connectivity incidents.

🔄 Migration Considerations

During a DNS provider migration, these three values reset to whatever the new provider's defaults are — there's no meaningful reason to try to preserve the old provider's specific numbers unless your organization has a documented, deliberate reason those particular values were chosen in the first place.

🔒 Security Angle

An unusually short expire value paired with genuinely unreliable primary infrastructure creates a realistic scenario where a coordinated denial-of-service against the primary could push secondaries into expiring the zone faster than a more conservatively configured setup would allow — worth factoring into expire decisions for any zone with real availability requirements.

⏱️ Performance Tradeoffs

Shorter refresh intervals mean more frequent primary-to-secondary check traffic and marginally faster propagation of legitimate changes; longer intervals reduce overhead at the cost of a wider window where a secondary could theoretically be serving slightly stale data. For the overwhelming majority of zones, this tradeoff is barely noticeable in practice — it mostly matters for very high-change-frequency or very large-scale zones where the aggregate query volume becomes operationally significant.

📊 Comparison & Decision Tables

Refresh vs. Retry vs. Expire, Side by Side

FieldTriggers OnTypical Range
RefreshScheduled, routine interval1–2 hours
RetryImmediately following a failed check15–30 minutes
ExpireSustained, prolonged unreachability1–2 weeks

Expire vs. TTL

FactorExpireTTL
Applies toWhether a secondary keeps serving the zone at allHow long a resolver caches an individual record
Typical scaleDays to weeksMinutes to a day

✅ Best-Practice Checklist

  • Keep retry meaningfully shorter than refresh
  • Set expire generously enough to absorb a realistic extended outage
  • Review provider defaults rather than assuming they suit every workload
  • Adjust refresh based on actual zone change frequency, not guesswork
  • Document any deliberate deviation from defaults for future reference

❌ Common Mistakes

⚠️ Expire set too close to refresh
Leaves almost no safety margin against a routine, brief primary hiccup.
⚠️ Retry longer than refresh
Defeats the purpose of retry, which exists specifically to recover faster than the normal refresh cycle.
⚠️ Never revisiting inherited defaults
Values copied years ago from an install default may no longer match a zone's current change frequency or infrastructure reliability.

🔧 Troubleshooting

⚠️ Secondary stopped answering for a zone
Check whether expire was reached during an extended primary outage — this is exactly the failsafe behavior expire is designed to trigger.
⚠️ Changes propagating slower than expected
Review the refresh interval — it may simply be set longer than the change cadence warrants.

🎓 Expert Tips

Think in Concentric Windows
Retry inside refresh, expire well beyond both — visualize the three as nested safety margins, not independent settings.
🎯
Tune to Real Change Frequency
Don't default to the most aggressive refresh available if your zone genuinely changes rarely.
🛡️
Give Expire Real Breathing Room
A generous expire value is cheap insurance against a genuinely unusual extended outage.

💼 Daily Practical Use Cases

Network engineers tune these values during initial zone setup for organizations with specific availability requirements. Site reliability teams reference expire specifically when modeling worst-case DNS behavior during extended incident response planning. Hosting providers set sensible platform-wide defaults that most customers never need to touch.

🔬 Advanced Insights

Some modern DNS architectures using near-real-time internal replication (rather than classic scheduled AXFR/IXFR polling) still publish standards-compliant refresh, retry, and expire values for compatibility, even though their actual internal propagation may be effectively instantaneous — meaning the published SOA timing values function more as a compatibility contract for any external tooling than as a literal description of internal replication behavior. Understanding this distinction matters when interpreting SOA values on modern managed platforms versus classic self-hosted BIND deployments, where the values are much more literally descriptive of real polling behavior.

Reviewed by: ToolsNovaHub Editorial Team📅 Last updated: August 2026📜 Sourced from: RFC 1034/1035 and standard DNS delegation behavior

ToolsNovaHub tools are built and independently maintained with a focus on accurate, no-signup network and security utilities. Spotted an error? Let us know.

📋 Related Tools & Guides Comparison

ResourceTypeLink
SOA LookupToolOpen Tool →
NS LookupToolOpen Tool →
SOA Record ExplainedGuideRead Guide →
Serial Numbers ExplainedGuideRead Guide →
SOA Best PracticesGuideRead Guide →
Try it yourself — 100% free
🚀 Open SOA Lookup

🔗 More Guides