← All Tools

DNS TTL Migration Planner

Every DNS record change is really three changes: drop the TTL first so resolvers stop clinging to the old answer, flip the record at cutover, and raise the TTL back once things have settled. This planner sequences those steps against wall-clock time, warns about the exact minutes when clients could still get stale answers, and prints a copy-paste runbook you can drop into a change ticket.

Change

The FQDN whose value you're changing.
Whatever's in the zone today — the value resolvers may still be caching right now.
Short TTL you drop to before cutover. 30–300 s is typical; go lower for a critical flip, but every query hits your authoritative server.
TTL you restore after cutover, once you're happy with the new value. Higher means lower authoritative-server load and better resolver hit rates.
Instant you'll swap old → new value. Pick a low-traffic window if you can.
Extra buffer added on top of the current TTL before cutover, to cover clock skew and misbehaving resolvers that honour TTL loosely.

Plan

Runbook (copy-paste)

Paste this into your change ticket or the pinned Slack message. All times shown in your selected zone.


  

Why the three-step dance

The TTL on a DNS record is a resolver's licence to cache: "you may hand this answer out for up to N seconds without asking me again." If you change the record while the current TTL is 24 hours, resolvers around the world can serve the old value for up to 24 hours after your change is authoritative — and there is nothing you can do server-side to make them re-fetch faster.

Step 1 — Lower the TTL, well ahead of cutover

You have to wait at least one current TTL before every resolver has seen your new low TTL. Only then can you count on their next cache entry being short-lived. The Safety margin above handles clock drift and resolvers that round TTLs up or ignore short values (some enterprise resolvers clamp at 60 s or higher).

Step 2 — Cut over

Push the new value. From this instant, the worst-case time a client sees the old value is the lowered TTL. Watch traffic, error rates, and connection counts to the old and new endpoints.

Step 3 — Restore a healthy long TTL

Once the new endpoint has been serving fine for at least one lowered-TTL window (so any stale cached queries have expired and re-fetched), raise the TTL back to something sensible — typically hours or a day. Long TTLs cut authoritative-server load, cut client-facing latency (cache hits are ~0 ms vs. ~30 ms for a fresh recursive lookup), and reduce the blast radius if your authoritative provider has an outage.

Things this planner can't check for you

  • Whether your registrar's own SOA MINIMUM field or your CDN clamps TTLs to a floor. Some hosted DNS providers refuse TTLs below 30 or 60 s.
  • Whether downstream clients (browsers, JVMs with networkaddress.cache.ttl, some proxies) cache DNS even more aggressively than resolvers.
  • Whether the old endpoint can be kept alive during the drain window. Ideally serve both endpoints in parallel until step 3 completes; that way even the most stubborn stale cache still gets an answer that works.