Searchable Snapshots in Elasticsearch

Searchable Snapshots in Elasticsearch

How Elasticsearch turns cheap object storage into data you can still search: what a searchable snapshot is, how it works inside the engine, how to size and operate it, and where it can hurt you.

Imagine a huge public library. The books people ask for every day sit on the shelves right next to the front desk. The books people ask for once a year are in a big warehouse across town. When someone finally wants one, a librarian drives over, fetches it, and keeps it on the front desk for a while in case somebody else wants it too. The library never throws the warehouse books away, and it never pays for front-desk shelf space to hold them. Elasticsearch does almost exactly this with old data, and the feature that makes it possible is called a searchable snapshot.

1The Problem: Data That Never Stops Growing

To understand why searchable snapshots exist, first look at what happens to a busy Elasticsearch cluster over time.

Logs, metrics, and events pile up

Elasticsearch is very often used to store time-based data: application logs, security events, website clicks, sensor readings, payment traces. Every second, more of it arrives. A modest company can create hundreds of gigabytes a day, and a large one can create tens of terabytes a day. Nobody deletes this data on a whim, because it has value long after the day it was created.

Auditors may require you to keep records for one, three, or seven years. Security teams need to look back months to find out when an attacker first entered the network. Engineers want to compare this month’s traffic with the same month last year. So the data stays, and the cluster grows.

Why keeping it in the normal way is so expensive

A normal Elasticsearch index lives on the local disks of data nodes. To keep it safe, you usually keep at least one replica, which is a full second copy on a different node. That means every gigabyte of data costs you two gigabytes of fast disk. On top of the disk, each node needs memory and CPU to keep the shards healthy, even if nobody ever searches them.

Fast local disks are also the most expensive kind of storage in most environments. You are paying premium prices to store data that is, in practice, almost never read. That is the mismatch searchable snapshots are designed to remove.

2x
Local disk needed when one replica is kept
1 copy
Kept in cheap object storage for a searchable snapshot
Years
Retention that becomes affordable
Simple Analogy

Think of your phone’s photo gallery. The photos from this week are stored on the phone itself because you look at them all the time. The photos from ten years ago sit in cloud storage, and the gallery only downloads a small preview when you scroll to them. The old photos are still “in your gallery”, but they no longer take up room on the phone.

Data gets colder as it gets older

The most important observation behind the whole feature is that data has a temperature. Fresh data is hot: it is written constantly, searched constantly, and shown on dashboards that refresh every few seconds. A month later it is warm, because people only look at it when they investigate something. A year later it is cold, and searches against it are rare and usually planned.

Age of dataHow often it is searchedSpeed people expectSensible storage
Hours to daysConstantly, by dashboards and alertsMillisecondsFast local SSD or NVMe with replicas
WeeksRegularly, during investigationsWell under a few secondsCheaper local disks
MonthsOccasionallyA few seconds is fineLocal disk holding one copy, backed by a snapshot
A year or moreRarely, for audits or deep huntsSeconds to minutes is acceptableObject storage, with a small local cache
i
Key Idea

Nothing about old data being “cold” means it is worthless. It means the price you should pay per gigabyte, and the speed you should expect per query, are different from those of fresh data.

2Foundations You Need First

Searchable snapshots combine four older ideas. If you are comfortable with each one, the rest of this guide becomes much easier.

Indices, shards, and Lucene segments

An Elasticsearch index is a named collection of documents. To spread work across machines, an index is cut into shards. Each shard is really a small, complete search engine built on a library called Lucene. Lucene stores its data in files called segments.

Here is the detail that makes everything else possible: a Lucene segment is immutable. Once it is written, it is never changed. New documents go into new segments. Deleted documents are only marked as deleted, and a background merge later builds a fresh, bigger segment and discards the old ones. Immutable files are easy to copy, easy to check, and safe to store somewhere else.

Simple Analogy

A segment is like a printed and bound book. You cannot change a word inside it. If something needs correcting, you print a new edition and retire the old one. Because a printed book never changes, you can photocopy it, store the copy in another building, and trust that the copy matches.

Snapshots and repositories

A snapshot is a backup of one or more indices, taken from a running cluster without stopping it. It is stored in a snapshot repository, which is usually an object store such as Amazon S3, Google Cloud Storage, or Azure Blob Storage. It can also be a shared file system.

Snapshots are incremental. Because segments never change, the second snapshot only needs to upload segments that did not exist in the first one. Segments that already exist in the repository are simply referenced again. This makes regular snapshots cheap in both time and storage.

Object storage

Object storage is a service that stores files (“objects”) in flat containers (“buckets”). It is extremely cheap per gigabyte, very durable, and effectively unlimited in size. The trade-off is that every read is a network call with noticeably higher delay than reading a local disk, and most providers charge a small fee per request and per gigabyte transferred out.

Data tiers

Elasticsearch lets you assign nodes to roles that describe the temperature of the data they hold. These are called data tiers, and index lifecycle management can move an index from one tier to the next automatically.

Tier 1

Hot

Receives new data and serves the most frequent searches. Fast disks, plenty of CPU and memory, and usually replicas.

Tier 2

Warm

Holds data that is no longer written to but is still searched regularly. Cheaper hardware than hot.

Tier 3

Cold

Holds data that is searched only occasionally. This is where fully mounted searchable snapshots normally live.

Tier 4

Frozen

Holds data that is rarely searched, using a large local cache and object storage as the real home. This is where partially mounted searchable snapshots live.

flowchart LR
  A[Hot tier] --> B[Warm tier]
  B --> C[Cold tier]
  C --> D[Frozen tier]
  D --> E[Delete]
        
FIG 1 — The usual journey of time-based data through the data tiers

Older versions also offered a separate “freeze index” feature that made indices cheaper by limiting their memory use. That approach was replaced by the frozen tier built on searchable snapshots, which handles the same goal far better.

3So, What Is a Searchable Snapshot?

A searchable snapshot is a snapshot that you can search directly, without first restoring it in the ordinary way.

The short definition

Normally, a snapshot is a sleeping backup. To read the data inside, you must restore the snapshot into a regular index, which means copying every file back onto local disks. A searchable snapshot changes the relationship. You mount the snapshot as an index, and Elasticsearch reads the data from the snapshot itself, treating the repository as the real storage layer. The index looks and behaves like any other index when you search it.

The crucial shift in thinking is this: the snapshot stops being a spare copy and becomes the primary copy of record. Local disks hold either a full working copy (in the cold tier) or only a cache of the parts that were recently used (in the frozen tier). That is why the data is so much cheaper to keep.

“A normal snapshot is a backup you hope you never need. A searchable snapshot is a backup you search every day.”

Mounting: the action that makes it searchable

Mounting is done through a mount operation on a snapshot, or automatically by an index lifecycle policy. The result is a new index whose settings say “my data lives in this snapshot in that repository”. Elasticsearch then allocates the shards of that index to suitable nodes, and those nodes are set up to read data from the repository as needed.

The two ways to mount

Mode 1

Fully mounted

Every file of the shard is downloaded to local disk. Searches are served entirely from local storage. Used in the cold tier. Storage saving comes mainly from needing fewer replicas.

Mode 2

Partially mounted

Only small pieces are kept locally, in a shared cache, and the rest is fetched from the repository on demand. Used in the frozen tier. Storage saving is very large, at the cost of slower first reads.

In the API, these two options are known as the full copy and the shared cache storage types. Indices mounted fully get a name starting with restored- when created by lifecycle management, and indices mounted partially get a name starting with partial-. Seeing those prefixes in your index list is the quickest way to spot what is what.

flowchart TD
  S[Snapshot in object storage] --> M{How is it mounted}
  M -->|Full copy| F[Fully mounted index on cold nodes]
  M -->|Shared cache| P[Partially mounted index on frozen nodes]
  F --> L1[All files on local disk]
  P --> L2[Only recently used pieces cached locally]
        
FIG 2 — One snapshot, two ways to make it searchable

What you can and cannot do with a mounted index

A searchable snapshot index is read-only. You can search it, aggregate over it, filter it, and visualize it. You cannot index new documents into it, update or delete individual documents, or force-merge it. This restriction is natural, because the data files belong to an immutable snapshot and cannot be edited in place.

!
Common Misconception

A searchable snapshot is not a magic way to make cheap storage as fast as SSDs. Searches over cached data can be quick, but the first read of data that is not in the cache must travel over the network, so it will be slower. Plan for that difference rather than being surprised by it.

Licensing and history

Searchable snapshots arrived in the 7.x series as a preview and matured into a supported feature, with the frozen tier and partial mounting following soon after. They require an Enterprise-level subscription (or an active trial). Because features and defaults evolve between releases, always confirm the details against the documentation of the exact version you run.

4Architecture and Components

A searchable snapshot setup is a small team of cooperating parts. Knowing each one makes troubleshooting far easier.

Storage

Snapshot repository

The object store bucket (or shared file system) that holds the segment files and the metadata describing each snapshot. It is the long-term home of the data.

Data

Snapshot

A consistent, point-in-time record of an index, made of references to files in the repository. One snapshot per index is the common lifecycle-managed pattern.

Index

Mounted index

The searchable face of the snapshot. It has normal shards, mappings, and settings, but its store type tells Elasticsearch to read from the repository.

Nodes

Cold and frozen nodes

Data nodes with tier roles. Cold nodes hold full local copies. Frozen nodes hold only a cache and are sized around that cache.

Cache

Shared snapshot cache

One large on-disk cache per frozen node, divided into equal regions. All partially mounted shards on that node share it.

System

Blob cache index

A hidden system index that keeps small, frequently needed pieces of files such as headers, so that a shard can start quickly without hitting the repository for every tiny read.

Automation

Index lifecycle management

The policy engine that takes the snapshot, mounts it, moves it between tiers, and deletes it when its retention ends.

Automation

Snapshot lifecycle management

A separate scheduler for regular backups. It is not required for searchable snapshots, but it is often used alongside them for the rest of your data.

flowchart TD
  C[Client search request] --> CO[Coordinating node]
  CO --> CN[Cold node: full local copy]
  CO --> FN[Frozen node: shared cache]
  FN -->|Cache miss| R[Snapshot repository in object storage]
  CN -.->|Initial download only| R
  FN --> BC[Blob cache system index]
        
FIG 3 — The main components involved when a search touches a searchable snapshot

The store type is the secret switch

Inside Elasticsearch, every shard reads and writes files through a layer called a directory. A normal shard uses a directory that maps to files on local disk. A mounted shard uses a special directory whose settings say “the data lives in snapshot X of repository Y”. Everything above that layer, including query execution, scoring, filtering, and aggregation, is unchanged. That is why a searchable snapshot supports the same query language and the same features as a regular index.

Simple Analogy

Picture a restaurant kitchen where the chefs always ask the same person for ingredients. For fresh food, that person walks to the fridge next door. For old, rarely used ingredients, the same person now phones a supplier and waits for a delivery. The chefs (the query engine) do not change how they cook. Only the person fetching ingredients (the directory) changes how he gets them.

Why the repository must be treated as production storage

Because the snapshot is now the real home of the data, the repository stops being an afterthought. Its availability, durability, permissions, and even its network path matter to your searches. A repository that was fine for nightly backups may not be fine as a live storage layer. You should think about it in the same way you think about the disks of your data nodes.

i
Practical Tip

Place the repository bucket in the same cloud region as the cluster. Cross-region reads add delay to every cache miss and can add data transfer charges that quietly dominate your bill.

Protection against accidental deletion

Elasticsearch refuses to delete a snapshot that is still mounted by a searchable snapshot index. This is an important guard rail. It means an operator running a cleanup on old snapshots cannot silently destroy the storage of live indices. The lifecycle delete phase has a setting, on by default, that removes the underlying snapshot when the mounted index is deleted, as long as no other index still depends on it.

5Fully Mounted vs Partially Mounted

The choice between the two modes is the most important design decision you will make. Here is each in depth.

Fully mounted: the cold tier

When an index is mounted with a full copy, Elasticsearch downloads every file of every shard from the repository onto the local disks of the assigned nodes. Once this recovery finishes, searches read from local disks and behave much like searches on a normal index. Speed is close to that of a regular index on similar hardware.

So where does the saving come from? Since the repository already holds a durable copy of the data, you do not need replicas to protect against disk failure. If a node is lost, its shards simply recover again from the snapshot. Many teams therefore run the cold tier with no replicas at all. That alone removes half the local storage compared with a hot index with one replica.

Partially mounted: the frozen tier

Partial mounting goes much further. The shard starts almost immediately, because only a tiny amount of information is loaded up front. When a search needs some bytes from a file, Elasticsearch checks the local shared cache. If those bytes are there, it uses them. If not, it fetches just the needed range from the repository, stores it in the cache, and continues.

Because only the parts of files that searches actually touch are downloaded, a frozen node can be responsible for far more data than its local disk could ever hold. The disk is no longer a place to store data. It is a place to remember what was recently read.

Simple Analogy

Fully mounted is like borrowing an entire encyclopedia set and keeping it on your desk. Partially mounted is like keeping the whole set in the library, photocopying only the pages you look at, and pinning the photocopies to your desk until the pin board fills up.

AspectFully mountedPartially mounted
Typical tierColdFrozen
Local disk holdsA complete copy of the shard filesA shared cache of recently used pieces
Time until shard is readyLonger, because everything is downloaded firstVery short, because almost nothing is downloaded first
First search speedFast, already localSlower, cache misses go to object storage
Repeat search speedFastFast if the data is still cached
Dependence on repository during searchesLow once recoveredHigh, whenever the cache misses
Local storage neededRoughly the size of the dataA small fraction of the data
Best forData searched occasionally but expected to feel responsiveData searched rarely where cost matters most
Index name prefix from lifecyclerestored-partial-

What the frozen shared cache really is

The shared cache on a frozen node is a single large file on local disk, divided into equal-sized regions. Each region can hold a slice of some file from some shard. When a region is needed and the cache is full, Elasticsearch evicts a region that has been used less, favoring pieces that are used often. The size of the cache is a node setting, and on a dedicated frozen node it defaults to most of the node’s disk, leaving some headroom for the operating system.

Cache regions have a default size measured in megabytes, and reads on a miss are made in ranges rather than one tiny byte at a time. This is deliberate. Object stores respond best to fewer, larger reads, so the design trades a little extra downloaded data for far fewer network calls.

Why not always use frozen?

Frozen is cheaper, so it is tempting. The problem is that every search over uncached data pays a network price. A dashboard that runs twenty aggregations over last month’s data every minute would constantly miss the cache, overload the object store with requests, and feel sluggish. Fully mounted keeps that experience acceptable. The decision is therefore about how often, and how urgently, people query the data.

flowchart TD
  Q[Search needs bytes of a segment file] --> H{Bytes in shared cache?}
  H -->|Yes| A[Serve from local disk]
  H -->|No| B[Fetch a range from repository]
  B --> W[Write it into a cache region]
  W --> A
  W --> E{Cache full?}
  E -->|Yes| V[Evict a less used region]
  E -->|No| A
        
FIG 4 — The decision made for every read on a partially mounted shard

When cold (fully mounted) is the right answer

A support team searches ticket-related logs from the last three months several times a day. Response time matters, but the data is no longer written to. A fully mounted index with no replicas halves the disk cost while keeping searches quick.

When frozen (partially mounted) is the right answer

A security team keeps two years of network events for occasional investigations. Analysts run a few big searches per week and are happy to wait for results. A frozen tier stores this at a tiny fraction of the hot-tier cost.

6Internal Working: What Happens Under the Hood

Now let us follow the data from the moment you mount a snapshot to the moment a search result comes back.

Step one: the mount request becomes cluster state

When a snapshot is mounted, the master node reads the snapshot’s metadata from the repository. That metadata lists the shards of the index and the files that make up each shard. The master then creates a new index in the cluster state. Its settings record the repository name, the snapshot name, the original index identity, and whether the mount is partial. The shard allocation logic is told which tier the shards must go to.

Step two: allocation and recovery from the snapshot

A shard of a normal index recovers from another copy of itself, usually the primary. A shard of a searchable snapshot index recovers from the snapshot. This is true for every copy, including any replicas. Each copy builds its own view of the data straight from the repository. No node has to stream data to another during recovery, which reduces load on the rest of the cluster.

What “recovery” means depends on the mode. For a full copy, the node downloads all files and verifies them. For a partial mount, the node only prepares the directory structure and reads a few small pieces of metadata. The shard can then be marked as started, and searches can begin immediately.

1

Mount request arrives

You or a lifecycle policy asks Elasticsearch to mount a snapshot as an index, choosing a full copy or a shared cache.

2

Metadata is read and cluster state updated

The master reads what the snapshot contains and creates the new index entry, pinned to the right tier.

3

Shards are allocated

Cold or frozen nodes are chosen. Disk watermarks and tier rules decide where each shard can go.

4

Shards recover from the snapshot

A full mount downloads every file. A partial mount reads only small starting pieces and is ready almost at once.

5

Searches begin

Queries run through the normal engine, with file reads redirected to local disk, cache, or repository.

Step three: how a single read is served

When Lucene wants to read some bytes from a segment file, it asks the directory. On a fully mounted shard, the directory reads from the local copy, the same as always. On a partially mounted shard, the directory works out which cache region or regions cover the requested bytes.

If the region is already in the cache, the bytes are copied out of the local file. If not, the directory issues a ranged read against the repository, downloads that region, writes it to the cache, and returns the bytes. If several searches want the same missing region at the same moment, they share one download instead of each making their own. This coalescing is essential, because otherwise a burst of concurrent queries could flood the object store.

Small reads and the blob cache

Lucene files begin with headers and end with footers containing checksums and structure information. Opening a shard touches these small parts of many files. Fetching each one from the repository would be very slow, because each network call has a fixed delay no matter how small it is. To avoid this, Elasticsearch stores these small, hot pieces in a system index so that starting a shard does not require dozens of calls to object storage.

Simple Analogy

When you open a large physical book, you first read the cover, the table of contents, and the index at the back. The library keeps photocopies of just those few pages at the front desk, so the librarian can tell you what is in the book without walking to the warehouse.

Why access patterns matter so much

Different Lucene structures are read in different ways, and this explains why some queries are gentle on the cache and others are brutal.

Read pattern

Term dictionary and postings

Searching for specific words reads small, targeted ranges. The cache handles these well, especially on repeated searches.

Read pattern

Doc values

Sorting and aggregations read column-style data, often across huge stretches of a file. These reads are larger and fill the cache quickly.

Read pattern

Stored fields

Fetching the full original document reads scattered small pieces, one per hit. Asking for thousands of hits multiplies network calls.

Read pattern

Points and numeric ranges

Range filters on numbers and dates walk a tree structure, reading a modest number of small nodes. Usually efficient.

i
Insight

The cheapest query on a frozen index is one that filters tightly on time, matches few documents, and returns few hits. The most expensive is one that aggregates over every document across many shards with no filter.

Read-ahead and eviction

Because the cost of a network call is mostly fixed, reading a slightly larger region than strictly needed is often cheaper than making two small calls. This is why the cache works in regions. On eviction, the cache prefers to keep regions that have been used repeatedly. A one-time large scan should not push out the pieces that many other queries rely on, and the frequency-based approach helps limit that damage, although a very large scan can still cause churn.

7Data Flow and Lifecycle

In real life you rarely mount snapshots by hand. Index lifecycle management does it for you, following the age of the data.

The lifecycle phases

An index lifecycle policy is made of phases, each with actions. The searchable snapshot action can be placed in the cold phase (producing a fully mounted index) or in the frozen phase (producing a partially mounted one). A policy usually looks like this in words: keep the index hot while it receives writes, move it to warm after rollover, then take a snapshot and mount it in cold or frozen when it is old enough, and delete it when the retention period ends.

flowchart LR
  H[Hot: writes and rollover] --> W[Warm: read mostly]
  W --> C[Cold: snapshot then full mount]
  C --> F[Frozen: partial mount]
  F --> D[Delete index and snapshot]
        
FIG 5 — A common lifecycle using both mounting modes

What the action does behind the scenes

1

Optional force merge

For the searchable snapshot action, the index is normally merged down to fewer segments before the snapshot is taken. Fewer, larger segments mean fewer files, fewer network calls later, and a smaller snapshot to store. This can be turned off if it is not wanted.

2

Snapshot is taken

The policy takes a snapshot of that one index into the configured repository. Using one snapshot per index keeps each index’s life independent.

3

Snapshot is mounted

The snapshot is mounted as a new index, fully or partially depending on the phase, with the restored or partial prefix on its name.

4

Original index is removed

Once the mounted index is healthy, the original regular index is deleted. The mounted index takes its place, and if the original was in a data stream, the mounted one replaces it as a backing index.

5

Retention and cleanup

In the delete phase, the mounted index is removed and, by default, so is the snapshot behind it, provided nothing else still uses it.

Skipping tiers

There is no rule that data must pass through every tier. Many deployments go directly from hot to frozen, because a warm tier that only delays the move adds cost without adding much value. Others use hot, then cold with full mounts for a couple of months, then frozen for long-term retention. The right shape depends on how quickly your query frequency drops.

Data streams and rollover

Time-based data is best managed as a data stream, which is a set of hidden backing indices that Elasticsearch rolls over automatically by size or age. Lifecycle policies apply to each backing index separately. Only closed-out backing indices, those no longer written to, are ever converted to searchable snapshots. The write index always stays on the hot tier.

Example planHotCold (full mount)Frozen (partial mount)Delete
Simple logging0 to 7 daysNot used7 days to 1 yearAfter 1 year
Observability with active lookback0 to 3 days3 to 60 days60 days to 13 monthsAfter 13 months
Regulated records0 to 14 days14 to 90 days90 days to 7 yearsAfter 7 years

These are illustrative plans only. Choose real durations from the actual questions your users ask of the data and from any legal retention duty you have.

!
Watch Out

Once data moves into a mounted index, you can no longer update or delete individual documents in it. If a legal request requires removing one person’s records, you must plan for that before the data becomes read-only. Options include removing the data earlier, reindexing to a new index without the records, or keeping sensitive fields out of long-lived indices in the first place.

8Resilience, Replicas, and Failure Modes

Changing where the master copy of the data lives changes how failures behave. This chapter walks through what breaks, what heals, and what you must protect.

Replicas mean something different here

On a regular index, a replica protects you from losing data if a node fails. On a searchable snapshot index, the data is already protected by the snapshot, so replicas are no longer about durability. They are about availability and search capacity. If you have zero replicas and a node holding a shard goes down, that shard is unavailable until it is reassigned and recovered from the snapshot. If you have one replica, another node can answer searches while the lost copy rebuilds.

A cluster with zero replicas for mounted indices can still report a healthy status, because there is nothing missing from the cluster’s point of view. Do not read that green light as a promise of zero downtime. It only means every shard has an active copy right now.

Simple Analogy

If a library keeps the master copy of every book in a fireproof vault, the copies on public shelves do not need to be duplicated for safety. But if the only shelf holding a popular book falls over, readers must wait until a new copy is brought from the vault. Extra copies on the shelves would let them keep reading during that wait.

Node failures

Cold node

Node lost, no replica

Its shards are reassigned to other cold nodes and must download all their files again from the repository before they can serve searches. Recovery time depends on shard size and repository throughput.

Frozen node

Node lost

Its shards start elsewhere in moments, but the new node’s cache is empty. Searches will be slow at first while the cache warms.

Restart

Planned restart

Cache contents on frozen nodes may not be preserved as you expect. Plan for a warm-up period after rolling restarts.

Scale out

New nodes added

Shards can move onto new nodes cheaply on the frozen tier, because moving a shard mostly means starting an empty cache elsewhere, not copying data.

Repository failures

The repository becomes a dependency of your searches, and the impact depends on the mode.

  • Temporary outage, cold tier: searches on already recovered shards continue to work from local copies, but any shard that needs to recover cannot do so until the repository returns.
  • Temporary outage, frozen tier: searches that hit the cache continue to work. Searches that need uncached data fail or time out for the affected shards.
  • Throttling by the provider: a burst of requests may cause slow responses or errors, which shows up as partial search failures and long tail latencies.
  • Permission change: an expired credential or a changed bucket policy looks exactly like an outage from Elasticsearch’s point of view.
  • Data deleted or corrupted in the bucket: this is the worst case. If the snapshot’s files are removed from the repository by anything outside Elasticsearch’s control, the data is gone, because there may be no other copy.
flowchart TD
  X[Something fails] --> N{What failed?}
  N -->|Data node| R1[Shard reassigned and recovered from snapshot]
  N -->|Repository unavailable| R2[Cached reads work, uncached reads fail]
  N -->|Snapshot files lost| R3[Data lost unless a second copy exists]
  R1 --> OK[Service resumes after recovery]
  R2 --> OK2[Service resumes when repository returns]
        
FIG 6 — How different failures play out for searchable snapshot indices

Protecting the single most important copy

The lesson of this chapter is that you have moved your durability from many replicas on many disks into one logical copy in one repository. That repository deserves serious protection.

  • Turn on versioning or object lock features of your object store so that accidental or malicious deletions can be reversed or blocked for a set period.
  • Restrict who can write to or delete from the bucket. Only the Elasticsearch service identity and a very small group of administrators should have these rights.
  • Consider replicating the bucket to a second region or account for disaster recovery, remembering that a second cluster can mount the replicated snapshots.
  • Do not point unrelated tools at the same bucket path, because cleanup jobs written for other purposes may delete files they think are orphaned.
!
Never Do This

Do not delete objects from a snapshot repository by hand, and never let a storage lifecycle rule expire objects in that bucket by age. Repository contents are managed as a whole. Removing individual files corrupts snapshots even if the deletion looks harmless.

9Search Performance and Tuning

Searching a frozen index is not the same as searching a hot one. The good news is that a handful of habits make the difference between a tolerable experience and a painful one.

Set the right expectations

On a fully mounted index, a well-tuned search should feel similar to a regular index on comparable hardware, because the files are local. On a partially mounted index, the first search over a stretch of data may take seconds or even minutes for very large ranges, while later searches over the same data can be many times faster. Communicate this to the people who use the data, because surprise is the biggest source of complaints.

Narrow the time range

The single most valuable tuning is a tight time filter. Elasticsearch has a preliminary step called the can-match phase, where it asks each shard whether it could possibly contain matching documents before doing real work. For time-based indices, recent versions store the earliest and latest timestamps of each index as metadata in the cluster, so many shards outside the requested time range can be skipped without touching the repository at all.

Simple Analogy

If you want a letter you received last March, you do not ask the warehouse to bring you every box of mail from the past ten years. You tell them the month, and they fetch only that box. A time filter is the month on the label.

Use asynchronous search for slow queries

Asynchronous search lets a request be submitted and then checked later, instead of holding an open connection until it finishes. This is the right tool for long-running searches on frozen data. The person who asked can leave a browser tab open, and results appear as shards report back. Many user interfaces do this automatically for large date ranges.

Practical tuning habits

Habit 1

Filter before you aggregate

Add specific conditions, such as a service name or a host, so fewer documents need to be read from cold storage.

Habit 2

Request only the fields you need

Fetching whole documents reads stored fields for every hit. Limiting fields and hit counts reduces network calls.

Habit 3

Avoid large result windows

Asking for thousands of hits per shard forces many scattered reads. Page through results in smaller sets.

Habit 4

Use time-sorted indices wisely

When data is written in time order, and searches are for the most recent events, less data needs to be read to answer them.

Habit 5

Do not schedule heavy dashboards on frozen data

Auto-refreshing panels that scan the frozen tier every few seconds waste cache and repository capacity.

Habit 6

Force merge before snapshotting

Fewer segments create fewer files and fewer reads later. Lifecycle management does this by default for the searchable snapshot action.

Concurrency and the object store

Searches over many shards fan out across many nodes, and each node may read from the repository at once. Object stores handle high concurrency very well, but they can still throttle a single client that sends too many requests too fast. If searches on the frozen tier behave normally most of the time but suddenly stall in bursts, throttling by the storage provider is a prime suspect. Provider-side metrics, such as request counts and error rates, tell you quickly.

Warm-up and pre-population

On the frozen tier, the cache warms naturally as data is used. There is no simple switch to preload an entire index into it, and doing so would defeat the point of the tier, since the cache is much smaller than the data. If a known investigation window is coming, such as an audit period, you can run a representative search ahead of time so that later searches are faster. For data that must always respond quickly, the right answer is to keep it on the cold tier with a full mount.

i
Rule of Thumb

If people complain that frozen searches are slow every day, either the data is not really frozen data, or the cache is too small for the working set. Both problems are solved by moving the affected data one tier warmer, not by fighting the frozen tier.

10Capacity Planning and Sizing

Sizing a searchable snapshot deployment is different from sizing a hot tier. You are planning three things at once: the repository, the local storage, and the network path between them.

Sizing the repository

Estimate how much data you will keep in each snapshot, then multiply by the number of days of retention. Remember that the size of an index on disk includes its indexing overhead, but a snapshot only stores the shard files of primaries, not replicas. This means the repository usually needs less space than your hot tier uses for the same data, which is a pleasant surprise. Compression in snapshots can reduce this further, and merging segments before the snapshot helps as well.

Object stores rarely have a size limit you will hit, but they do have request rates and cost models. Estimate the number of files, because each shard contributes many files. Millions of tiny files increase request counts and slow snapshot operations. Merging to fewer segments before snapshotting reduces file counts.

Sizing cold nodes

For a fully mounted tier, local disk must be large enough to hold a full copy of every shard assigned to it, plus room for the disk watermarks that keep the node healthy. Add replicas if you need availability, and count them as extra copies. Memory and CPU needs are modest compared with hot nodes, because these nodes do not index. But keep enough memory for the operating system’s file cache, since it is what keeps repeated searches quick.

Sizing frozen nodes

For a frozen tier, the shared cache size is what matters most. A useful way to think about it is as a “working set” question: how much of your frozen data do people actually touch during a typical week? If the cache is close to that size, most searches will hit it. If it is far smaller, the cache will churn and searches will keep going to the repository.

The amount of data one frozen node can be responsible for is much larger than what its disk could hold, because the disk is only a cache. Elastic’s own guidance uses far higher ratios of data to memory for frozen nodes than for hot nodes, but the exact figures change between versions and depend on your search patterns. Use the published sizing guidance for your version as a starting point, then measure cache hit rates and search latency in your own environment and adjust.

Cache
Frozen node local disk is a cache, not a storage layer
Working set
The data actually touched in a typical week
Shards
Count matters for memory on every node

Shard size and count

Each shard uses some memory on the node that holds it, even when idle, for keeping structures like field information and file lists ready. A frozen node holding thousands of small shards spends much of its memory on bookkeeping and leaves less for useful work. Larger shards, in the tens of gigabytes, are usually a better fit. When you roll over hot indices, choose sizes that produce sensible shards for the long life the data will have on the cold and frozen tiers, not just for hot performance.

Network throughput

The link between your nodes and the object store is often the actual bottleneck. Recovering a full copy of a large shard is limited by how quickly the node can read from the store. On cloud platforms, the network bandwidth of a virtual machine depends on its size. A small instance may cap out well below what the object store can provide. When choosing instance types for frozen and cold tiers, look at network performance as well as disk and memory.

QuestionWhat to measureWhat it tells you
Is the cache big enough?Cache hit and miss counts, evictionsWhether the working set fits
Is the network fast enough?Bytes read from the repository per secondWhether node bandwidth is a limit
Are there too many shards?Shards per node, heap useWhether memory is wasted on overhead
Is the object store throttling?Provider request errors and latencyWhether request rate is too high
Are searches slow?Search latency by tier and time rangeWhether queries or capacity are to blame
i
Start Small, Measure, Grow

Frozen capacity is easy to add, because shards move cheaply. It is therefore reasonable to begin with a modest frozen tier, watch the cache statistics for a few weeks of real usage, and then scale in the direction the numbers suggest.

11Advantages, Disadvantages, and Trade-offs

Every design choice costs something. Here is an honest ledger for searchable snapshots.

Advantages

  • Much lower storage cost for old data, because object storage is far cheaper than fast local disks.
  • Fewer or no replicas needed for durability, which cuts local storage by half or more.
  • Frozen nodes can be responsible for very large amounts of data relative to their hardware.
  • Old data stays searchable with the same query language, tools, and dashboards as new data.
  • Shard movement and recovery on the frozen tier are quick because little data needs to be copied.
  • Long retention periods for compliance become affordable.

Disadvantages / Trade-offs

  • Searches on uncached frozen data are much slower than on hot data.
  • Indices are read-only, so document-level updates and deletions are not possible.
  • The repository becomes a critical dependency and needs production-grade protection.
  • Requires an Enterprise-level subscription, which has its own cost.
  • Object storage request and data transfer fees can appear if searches are heavy or cross regions.
  • More moving parts to understand and monitor than a single-tier cluster.

The economics in plain words

Imagine you keep one year of logs at about one terabyte per day, with one replica on the hot tier. That is roughly 730 terabytes of premium local disk. Now imagine you keep the first week hot, and the remaining fifty-one weeks as searchable snapshots on the frozen tier with no replicas. Most of that data now sits in object storage at a small fraction of the price per gigabyte, and a modest set of frozen nodes provides the search capability. The exact saving depends on your provider and instance choices, but the direction and rough scale of the saving is what usually convinces teams to adopt the feature.

The hidden costs are worth counting too. Request charges on the object store rise with search activity on the frozen tier. Data transfer between zones or regions can add up if the repository is not close to the nodes. The Enterprise-level subscription adds licensing cost. The savings are usually large enough to outweigh these, but a proper estimate includes them.

Comparing your options for old data

ApproachCostSearch speed on old dataEffortMain risk
Keep everything on hot nodesHighestFastestLowestCost growth without limit
Move to warm nodes with replicasHighFastLowStill pays for two copies
Cold tier, fully mounted, no replicasMediumFastMediumRepository is now the only durable copy
Frozen tier, partially mountedLowest of the searchable optionsSlower on cache missesMediumPoor experience if used like hot data
Plain snapshot only, restore on demandVery lowNot searchable until restoredHigh during incidentsDelay when you urgently need old data
Delete after short retentionLowestNot availableLowestLost history and compliance problems
“The cheapest data is the data you deleted. The second cheapest is data you can still search.”

Where the trade-offs bite hardest

Teams are usually happy with searchable snapshots for investigations and audits. They are least happy when they try to use the frozen tier for anything interactive that runs all day, or when they forget to protect the repository. The features are well suited to data whose value comes from the possibility of asking a question, not from the certainty of asking one every hour.

12Security and Compliance

Old data is often the most sensitive data you own, because it is complete, historical, and rarely reviewed. Its protection deserves attention on two fronts: inside Elasticsearch and inside the object store.

Access inside Elasticsearch

Mounted indices are ordinary indices as far as security is concerned. Role-based access control applies in the same way: a user can only search the index names their role allows, and document-level and field-level security rules continue to work. Because lifecycle policies rename indices with a prefix, check that your role patterns cover the renamed indices, or better, give roles access to data streams and let the backing indices follow.

Actions that manage snapshots and mounting are a separate set of privileges. Only administrators and the lifecycle service should be able to create repositories, take snapshots, mount them, or delete them. Ordinary analysts should have no need for these rights.

Access to the repository

Elasticsearch reaches the object store using credentials. These are held in the secure settings store of each node, not in normal configuration files, so they are not visible in ordinary settings output. Give the identity used by Elasticsearch the minimum rights it needs on the bucket path, and no more. Where the cloud platform supports it, prefer short-lived, automatically rotated credentials or role-based identities over long-lived static keys.

Encryption

In transit

Encrypted connections

Traffic between nodes and the object store should always use encrypted connections, and this is normally the default for cloud providers.

At rest

Storage-level encryption

Use the object store’s server-side encryption, ideally with keys you control. Elasticsearch relies on the store for encryption of snapshot files.

On nodes

Local disk encryption

Cold and frozen nodes hold data or cached pieces on local disks. Encrypt those volumes at the platform level.

Keys

Key lifecycle

If a key is deleted or a key policy changes, encrypted snapshot data can become unreadable. Treat key management as part of data retention planning.

Retention, immutability, and legal duties

Many regulations require that records be kept for a fixed time and cannot be altered. A searchable snapshot repository with object lock in a compliance mode can help meet this, because even administrators cannot delete or overwrite the files until the period ends. Be careful to test that this works together with Elasticsearch, since some snapshot operations legitimately write new files and update metadata inside the repository. Work with your storage and compliance teams to choose settings that protect the data without blocking normal snapshot maintenance.

On the other side, privacy laws may require you to delete a person’s data on request. This is in tension with read-only, long-lived storage. The practical answers are to keep personal information out of long-retained indices, to shorten retention for indices that contain it, or to keep a process ready to reindex affected data into a new index without the records and then remove the old snapshot.

!
Compliance Trap

Do not assume that a locked bucket automatically satisfies retention rules and also automatically satisfies deletion rules. They pull in opposite directions. Decide, per data type, which duty wins, and document the decision.

Shared repositories between clusters

A snapshot repository can be registered as read-only on a second cluster, which lets that cluster mount snapshots written by the first. This is powerful for reading old data from a test or analysis cluster, and for disaster recovery. It is also risky if two clusters are allowed to write to the same repository, since they can corrupt each other’s metadata. Only one cluster should ever write to a given repository path. All others must use the read-only setting.

13Monitoring, Logging, and Metrics

A searchable snapshot setup that nobody watches will eventually surprise you. These are the signals worth tracking.

Cache health on frozen nodes

Elasticsearch exposes statistics about the shared cache through dedicated statistics endpoints, one for cache activity across nodes and one for activity by index. They report how many reads were served from the cache, how many needed a fetch from the repository, how many bytes were read, and how many regions were evicted. A healthy frozen tier shows a good ratio of hits to misses for the data people actually query. A cache that shows steady heavy eviction and a high miss rate is telling you it is too small for your working set.

Repository health

Check the result of snapshot operations and the state of the repository regularly. Snapshot creation failures, repository verification failures, and long snapshot durations are early warnings. On the storage side, watch request rate, error rate, throttling responses, and latency at the provider. If your object store publishes access logs, keep them for a short period so you can investigate slow-search episodes.

Lifecycle progress

Index lifecycle management has an explain feature that tells you, for each index, which phase and action it is in and whether it is stuck. The most common stuck points for the searchable snapshot action are a repository that is missing or misconfigured, a lack of space on target nodes, and a snapshot that fails partway. Alert on indices that stay in one step for far longer than expected.

Metric

Cache hit ratio

Share of reads served from the local cache. Low values on the frozen tier mean searches are paying network costs.

Metric

Bytes read from repository

How much data crosses the network to serve searches. Spikes match expensive queries or a cold cache.

Metric

Evictions

How often cached regions are thrown out to make room. Persistently high numbers indicate an undersized cache.

Metric

Search latency by tier

Compare hot, cold, and frozen separately. One average across tiers hides the story.

Metric

Shard recovery time

How long a fully mounted shard takes to become ready. Long times point to network or repository limits.

Metric

Lifecycle step age

Time an index has spent in its current lifecycle step. Stuck steps stop the cost savings from arriving.

Logs to read when something is wrong

Node logs record repository access failures, timeouts, throttling responses, and cache problems. Master node logs record snapshot and mounting failures. Slow log settings can capture searches that take longer than a chosen time on particular indices, and are useful for spotting the few expensive queries that cause most of the pain on the frozen tier.

A simple troubleshooting path

1

Is the slow search really on mounted data?

Look at the index names and the tier settings. A search that touches only hot indices is not a searchable snapshot problem.

2

Does the search cover a huge time range?

If so, tighten the range or use asynchronous search before blaming capacity.

3

What does the cache show?

High misses and evictions mean the cache is too small or the query pattern is too wide.

4

What does the object store show?

Check for throttling, elevated latency, or permission errors.

5

Is the network path the limit?

Check instance network limits and whether the repository is in the same region.

14Design Patterns That Work

Teams that succeed with searchable snapshots tend to arrive at a small set of repeatable designs.

Pattern 1: Hot to frozen, nothing in between

Keep a short hot period, then mount partially for the rest of the retention. This is the simplest and often the cheapest design. It works when people rarely query anything older than a few days, except for occasional investigations.

Pattern 2: Hot, cold, frozen ladder

Use a fully mounted cold tier for the weeks or months in which investigations are still common, then a frozen tier for long-term retention. It smooths the slowdown that users feel when data ages, at the cost of one more tier to operate.

Pattern 3: Separate repositories by data class

Use different repositories, and often different buckets, for data with different retention, encryption, or access needs. Security events may need an immutable bucket, while debug logs may not. Separation also limits the blast radius if something goes wrong.

Pattern 4: Disaster recovery through a replicated bucket

Replicate the repository to a second region or account. A standby cluster registers the copy as read-only and can mount any snapshot it needs after a regional failure. This turns searchable snapshots into part of your resilience plan instead of a single point of failure.

Pattern 5: Analysis cluster for historical questions

Run a small separate cluster that mounts old snapshots read-only for research or audits. Heavy historical work then never competes with production searches, and the production cluster does not need to hold or cache that data.

Pattern 6: Right-sizing shards before they age

Choose rollover conditions so that indices end up with a healthy number of reasonably large shards by the time they are mounted. Fewer, larger shards reduce memory overhead on frozen nodes and reduce the number of repository calls per search.

flowchart LR
  P[Primary cluster] -->|writes snapshots| R1[Repository in region A]
  R1 -->|bucket replication| R2[Repository copy in region B]
  R2 -->|read-only mount| S[Standby or analysis cluster]
        
FIG 7 — A resilience pattern that shares snapshots safely between clusters

15Anti-Patterns and Common Mistakes

These are the mistakes that appear again and again when teams first adopt the feature. Each one is easy to avoid once you know about it.

ANTI-PATTERN-01 Avoid
Problem

A team moves data to the frozen tier and then points always-on dashboards and alert rules at it, expecting hot-tier speed.

Why It’s Harmful

Every refresh triggers reads that miss the cache, which loads the repository, adds cost, and makes dashboards slow and unreliable. Users lose trust in the whole platform.

Correct Approach

Point dashboards and alerts at hot and cold data only. Give users a separate, clearly labeled way to run deliberate, long searches over frozen data, ideally asynchronously.

ANTI-PATTERN-02 Avoid
Problem

An administrator cleans up old objects from the snapshot bucket by hand, or adds a storage rule that expires objects after a number of days.

Why It’s Harmful

Snapshot files are shared between snapshots. Removing files outside Elasticsearch corrupts snapshots, and mounted indices that rely on them can become unreadable, with no copy left to recover from.

Correct Approach

Let index lifecycle management or snapshot lifecycle management delete snapshots through Elasticsearch. Protect the bucket with versioning and strict permissions.

ANTI-PATTERN-03 Avoid
Problem

The frozen tier is provisioned with too little cache because the local disk seemed unimportant, since the data is “in object storage anyway”.

Why It’s Harmful

An undersized cache thrashes. The same pieces are downloaded and evicted over and over, searches stay slow, and request charges climb.

Correct Approach

Size the cache to the working set of real searches and watch hit rates. Treat local disk on frozen nodes as performance capacity, not as archive capacity.

ANTI-PATTERN-04 Avoid
Problem

Mounted indices have zero replicas, and the cluster is treated as fully highly available because its status is green.

Why It’s Harmful

When a node fails, its shards are unavailable until they recover. During a large incident, searches for that time range fail or return partial results.

Correct Approach

Decide consciously. Zero replicas is fine for data where short interruptions are acceptable. For data that must remain searchable through failures, add replicas on the cold tier.

ANTI-PATTERN-05 Avoid
Problem

The repository is placed in a distant region, or in another cloud, because storage was cheaper there.

Why It’s Harmful

Every cache miss pays long-distance delay and often data transfer fees. The per-gigabyte saving disappears and searches feel slow.

Correct Approach

Keep the primary repository close to the nodes. Use replication to a second location only for disaster recovery.

ANTI-PATTERN-06 Avoid
Problem

Thousands of tiny indices, each with several shards, are converted into searchable snapshots.

Why It’s Harmful

The number of shards, files, and repository calls grows enormously. Frozen nodes spend memory on bookkeeping, snapshots take long to create, and searches fan out to far too many small pieces.

Correct Approach

Consolidate before the data ages: use sensible rollover sizes, fewer shards per index, and force merge before snapshotting.

Smaller mistakes worth avoiding

  • Forgetting the license: confirm your subscription level allows the feature before you design around it.
  • Mixing writers on one repository: only one cluster may write to a path. Others must be read-only.
  • Ignoring version compatibility: a snapshot can only be mounted by versions that can read the indices inside it. Plan upgrades with old snapshots in mind.
  • No test of the full path: run a real mount and a real search on a copy of production data before trusting the design.
  • Leaving sensitive data in long-lived indices: removal requests become painful once data is read-only.

16Real-World and Industry Examples

These are common, representative ways organizations use the feature. They are patterns, not accounts of any specific company.

Security operations and threat hunting

Attackers often sit inside a network for weeks or months before being noticed. When a new threat is discovered, analysts want to search for its traces across the last year or more. Keeping that much security data on hot nodes is unaffordable, but frozen searchable snapshots make it possible to look back quickly enough to be useful. Elastic’s own security products commonly use the frozen tier for this reason.

Observability and incident review

Site reliability teams compare current behavior with historical behavior: how did latency look during last year’s peak season? Metrics and logs older than a few weeks are rarely viewed day to day, but they are invaluable in post-incident reviews and capacity planning. A cold tier for the recent past and a frozen tier for the long past matches these habits.

Financial and regulated records

Banks, insurers, and payment companies must keep transaction traces and audit logs for many years. Searchable snapshots allow them to answer regulator or dispute questions without maintaining a giant hot cluster, and object lock features on the repository help with immutability requirements.

Telecommunications and network data

Network operators produce huge volumes of event and flow records. Most of it is never read, but some must be available for lawful requests or fault analysis. Frozen storage makes the long tail affordable.

E-commerce and product analytics

Online retailers analyze clickstream and order events. Seasonal comparisons, such as this holiday season against last year’s, need older data only for short bursts of analysis. Frozen storage holds it cheaply between those bursts.

Managed platforms

On Elastic’s hosted cloud service, the frozen tier is offered as a ready-made building block. Teams that do not want to operate the repository and nodes themselves can enable it and let the platform handle much of the setup, while the same lifecycle concepts described here still apply.

flowchart TD
  A[New threat announced] --> B[Analyst writes a search]
  B --> C[Search targets 12 months of data]
  C --> D[Hot and cold shards answer quickly]
  C --> E[Frozen shards fetch from repository]
  D --> F[Combined results]
  E --> F
  F --> G[Analyst finds first sign of attack]
        
FIG 8 — A typical threat-hunting search spanning several tiers

17Limitations, Versions, and Best Practices

Before committing to a design, gather the fine print in one place.

Known limitations

  • Mounted indices are read-only. No indexing, updates, deletions, or force merging on the mounted index itself.
  • Behavior depends on the repository type and its client settings. Support and performance vary across object stores and shared file systems.
  • Snapshots must be readable by the version of Elasticsearch that mounts them. Very old snapshots may need special handling when you upgrade across major versions.
  • Some features that rely on changing index structure in place, such as shrinking or splitting, do not apply to mounted indices.
  • Index settings that describe the mount, such as the repository and snapshot names, are not meant to be changed by hand.
  • Searchable snapshots need an appropriate license level, and details can change between releases.

A best-practices checklist

AreaPractice
DesignDecide tiers from real query patterns, not from guesses. Start with a simple hot to frozen plan and add cold only if users need it.
RepositorySame region as nodes, versioned, permission-restricted, and never touched by unrelated cleanup jobs.
ShardsFewer and larger, merged before snapshotting, sized with the long life of the data in mind.
Frozen cacheSized to the working set. Monitor hit ratio and evictions continuously.
QueriesTight time ranges, selective filters, few returned hits, asynchronous search for long jobs.
AvailabilityChoose replica counts on purpose. Do not equate green status with uninterrupted service.
SecurityLeast-privilege bucket access, encryption at every layer, protected keys, documented retention and deletion rules.
OperationsAlert on stuck lifecycle steps, snapshot failures, repository errors, and cache health.
Disaster recoveryReplicate the repository and rehearse mounting from the copy.
Change managementTest on a copy of production data first. Recheck documentation for your exact version before upgrades.
i
Rehearse Recovery

The most valuable single practice is to schedule a regular drill in which you mount snapshots from your backup location on a clean cluster and search them. A recovery path that has never been tested is only a hope.

18A Worked Example: Designing for 500 GB a Day

Numbers make ideas stick. Let us walk through a simple, made-up design to see how the pieces fit together. All figures are illustrative assumptions, not measurements.

The situation

A company collects about 500 gigabytes of log data per day. Assume the data takes roughly the same amount of space inside Elasticsearch as it did when it arrived. The business wants to keep one year of logs. Engineers search the last week constantly, and they investigate older data only a few times a week. Auditors sometimes ask about anything in the past twelve months.

Option A: everything hot, with one replica

One year is about 182 terabytes of primary data. With one replica, that becomes about 365 terabytes of fast local disk, plus the memory and processors to keep thousands of shards ready. This design works and is simple, but its cost grows every single day, and most of the disk is holding data that nobody reads.

Option B: hot for a week, frozen for the rest

The first seven days are about 3.5 terabytes of primary data, or about 7 terabytes with a replica, on hot nodes. The remaining 358 days of primary data, close to 179 terabytes, lives in the object store as snapshots. The frozen nodes hold a cache that is a small fraction of that total, sized to the amount of old data that investigations touch in a typical week. The local fast disk needed falls from hundreds of terabytes to a small number of terabytes plus a cache, and the bulk of the data sits at object storage prices.

Option C: hot, cold, then frozen

If engineers actually search the past month often and dislike waiting, add a cold tier for weeks two to five. Those 28 days are about 14 terabytes as a full local copy with no replicas. It costs more than Option B but keeps a comfortable experience for the most likely investigation window. The remaining eleven months stay frozen.

DesignFast local disk (approx.)Object storage (approx.)Experience on data older than a week
A: all hot, one replica365 TBOnly regular backupsFast
B: hot then frozen7 TB plus frozen cacheAbout 179 TBSlower on cache misses
C: hot, cold, frozen7 TB plus 14 TB plus frozen cacheAbout 179 TBFast for a month, then slower
i
Reading the Table

The point is not the exact numbers. The point is the shape: local fast disk stays small and roughly constant, while the object store grows with retention. Growth in retention is now a cheap kind of growth.

Choosing between B and C

The deciding fact is user behavior. Look at your search history and find out what share of searches touch data older than seven days, and how far back they go. If very few do, choose Option B. If a lot of searches reach back a month, Option C avoids frustrating people. If searches almost never go past a month, but the audit demand exists, Option C’s cold period might be shortened to a couple of weeks.

flowchart TD
  Q1{Do many searches reach back beyond a week?} -->|No| B[Choose hot then frozen]
  Q1 -->|Yes| Q2{Do they stay within about a month?}
  Q2 -->|Yes| C[Add a cold tier for that window]
  Q2 -->|No| D[Extend cold or add cache and replicas]
        
FIG 9 — A simple decision path for choosing tiers from real usage

19Searchable Snapshots Compared With Other Approaches

Searchable snapshots are one of several ways to deal with aging data. Knowing the alternatives helps you choose honestly.

Restore on demand

You can keep plain snapshots and restore an index only when someone asks for it. This is the cheapest option in storage, but restoring large indices takes time, needs free disk space at the moment of need, and turns every investigation into a small project. Searchable snapshots remove that delay. The data is always searchable, and you pay only for what you use of it.

Downsampling and rollups

For metrics, another way to reduce cost is to shrink old data by keeping fewer data points, for example one per hour instead of one per minute. This removes detail permanently, but it can be combined with searchable snapshots, because the smaller data is then also cheaper to store and read. Logs and security events, which cannot be summarized without losing the very detail investigators need, are better served by keeping all the data on cheap storage.

Keeping data in an external data lake

Some teams export old data to files in a data lake and query it with other engines. This can be very cheap, but it splits your data across two systems, with different query languages, security models, and dashboards. Searchable snapshots keep a single place to ask questions. The trade-off is that a data lake may be better for very large batch analytics, while Elasticsearch is better for fast, flexible, text-heavy search.

Cross-cluster search

Cross-cluster search lets one cluster query others. It solves a different problem: spreading data across clusters. It can be combined with searchable snapshots, for instance by placing the frozen tier in a dedicated cluster and searching it remotely, which isolates heavy historical searches from production.

ApproachBest atWeak at
Searchable snapshotsLong retention with the same search experience and toolsSpeed on uncached data, read-only data
Restore on demandLowest storage cost for data almost never neededDelay and effort when it is needed
DownsamplingMetrics where lower resolution is acceptableDetail is lost for good
Data lake exportLarge batch analytics at low costSplit tooling and slower text search
Bigger hot clusterSimplicity and speedCost that grows with every retained day
“Pick the cheapest place where the data is still useful when someone asks for it.”

20An Adoption Roadmap

If you decide to introduce searchable snapshots into an existing cluster, a staged approach lowers risk and builds confidence.

1

Study your data and usage

Measure daily volume, index and shard counts, and how far back searches reach. Decide what you will keep, for how long, and who uses it.

2

Confirm licensing and versions

Check that your subscription includes the feature and that your version supports the tiers you intend to use.

3

Prepare the repository

Create the bucket in the right region, set permissions, encryption, and versioning, store credentials securely on the nodes, and register and verify the repository.

4

Add tier nodes

Bring in cold and frozen nodes with the right roles, disk, and network capacity. Start small, since frozen capacity is easy to expand.

5

Pilot on one data stream

Apply a lifecycle policy to a single, less critical data stream. Watch snapshot creation, mounting, searches, and cache behavior for a few weeks.

6

Tune and document

Adjust cache sizes, shard sizes, and phase timings. Write down what users should expect from each tier so surprises are avoided.

7

Roll out gradually and rehearse recovery

Extend the policy to more data streams. Run a recovery drill from the replicated repository and add monitoring and alerts before declaring the rollout complete.

!
Do Not Skip the Pilot

Real data has surprises: unusual shard counts, unexpected query shapes, and permissions nobody thought about. A small pilot finds these when they are cheap to fix.

Communicating with users

The best technical design can still fail socially if people are not told what to expect. Explain in simple terms that recent data is instant, older data is a little slower, and the oldest data may take a moment on the first search. Provide a place to run long searches asynchronously. When people understand the reason for the difference, they adapt quickly, and they stop treating every slow search as a fault.

21Troubleshooting Scenarios

Real problems rarely announce their cause. These scenarios link common symptoms to the most likely explanations and sensible responses.

Scenario 1: Searches on old data suddenly became slower than last week

Likely causes are a cache that has filled up with a large recent scan, new nodes with empty caches after a scaling event or restart, or a change in user behavior that widened the time ranges being queried. Check cache statistics, recent node changes, and the slow log for new query shapes. Give the cache time to warm before drawing conclusions, and consider enlarging it if the pattern persists.

Scenario 2: An index stays stuck in the lifecycle step that takes the snapshot

Usual suspects are a repository that is misconfigured or unreachable, missing permissions, or an existing snapshot with a clashing name. Use the lifecycle explain feature to read the error, verify the repository from the cluster, and confirm credentials. Once the cause is fixed, the step can be retried.

Scenario 3: Mounted shards are unassigned

The nodes with the right tier role may lack enough disk space, may be over their disk watermarks, or may not exist at all. Confirm that nodes with the required role are present and have space. For fully mounted indices, remember that the node needs room for the whole shard.

Scenario 4: Storage bills are higher than expected

Look beyond the per-gigabyte price. Request charges may be high because of many small files or heavy searching of frozen data. Data transfer may be high because the repository is in a different region or zone from the nodes. Merging segments before snapshotting, moving the repository, and tightening queries usually bring the bill down.

Scenario 5: Partial results and timeouts on wide searches

Searches spanning many frozen shards may hit time limits. Shorten the time range, add filters, or run the search asynchronously. If the object store shows throttling, reduce concurrency or spread load over a longer period.

Scenario 6: Deleting old data does not free repository space

Snapshots share files, so space is released only when no remaining snapshot needs a file. Confirm that the snapshot behind the deleted index was actually removed, and that no other mounted index still depends on it. Give the repository cleanup a chance to finish before measuring.

22Upgrades, Evolution, and Where This Is Heading

Searchable snapshots did not appear fully formed. They have grown across releases, and the direction of travel is worth understanding.

Planning upgrades

Each Elasticsearch version can read indices created by its own version and by the previous major version. Mounted indices follow the same rule, because they are made of the same kind of files. In practice, this means you should upgrade in the recommended order, verify that old snapshots can still be mounted after an upgrade, and check the release notes for changes to defaults such as cache sizes and lifecycle behavior. Rehearse an upgrade on a non-production cluster that includes mounted indices.

A steady move toward object storage

The wider trend in search and analytics systems is to treat cheap, durable object storage as the foundation and local disks as a performance layer. Searchable snapshots were an early and practical step in that direction for Elasticsearch. Later architectures push the idea further, but the core concepts you have learned here, a durable copy in object storage, a cache close to compute, and read paths that fetch ranges on demand, carry over directly.

Keep documentation close

Defaults, setting names, and sizing guidance evolve. Use this guide to understand why the system behaves as it does, and use the official documentation for your exact version to confirm the specifics before making production changes.

23Glossary of Terms

A quick reference for the vocabulary used throughout this guide.

Term

Mount

The action of making a snapshot searchable as an index without restoring it in the ordinary way.

Term

Fully mounted

A mount that downloads every shard file to local disk. Common in the cold tier.

Term

Partially mounted

A mount that keeps only a cache of used pieces locally. Common in the frozen tier.

Term

Repository

The place where snapshots are stored, usually an object store bucket.

Term

Shared cache

The large local file on a frozen node that holds recently used pieces of many shards.

Term

Region

One equal-sized slice of the shared cache, used as the unit of downloading and eviction.

Term

Eviction

Removing a cached region to make room for a new one when the cache is full.

Term

Working set

The portion of the data that searches actually touch over a typical period.

Term

Segment

An immutable file set inside a shard. The reason snapshots can be shared and reused.

Term

Data tier

A group of nodes for data of a certain temperature: hot, warm, cold, or frozen.

Term

Index lifecycle management

The automatic manager that moves indices through phases and applies actions such as mounting and deletion.

Term

Asynchronous search

A search that is submitted and checked later, ideal for slow queries on frozen data.

24Frequently Asked Questions

Q1Is a searchable snapshot the same thing as a normal snapshot?

They start the same, since both are point-in-time copies of an index stored in a repository. The difference is what you do with them. A normal snapshot is restored before it can be searched. A searchable snapshot is mounted and searched in place, with the repository acting as the real storage layer.

Q2Do I still need regular backups if I use searchable snapshots?

Yes, for anything that is not stored as a searchable snapshot, such as hot data and cluster configuration. And for the mounted data itself, you should protect the repository with bucket versioning, restricted permissions, and ideally a replicated copy, because it is now the only durable copy.

Q3What is the difference between the cold and frozen tiers?

The cold tier normally holds fully mounted indices with a complete local copy of the data, so searches are fast. The frozen tier holds partially mounted indices, with only a cache of recently used pieces on local disk, so it is much cheaper but slower on data that is not cached.

Q4Why do partially mounted indices start so quickly?

Because they do not download the shard files up front. They only load a small amount of starting information and then fetch further data when a search asks for it.

Q5Can I write to or update a mounted index?

No. Mounted indices are read-only, because their data belongs to an immutable snapshot. To change data, you need to work with a regular index, for example by reindexing the affected documents.

Q6Do I need replicas on mounted indices?

Not for durability, because the snapshot already protects the data. Replicas are useful for availability and for extra search capacity. Choose the number based on how much interruption is acceptable for that data.

Q7Why is my first search on frozen data so slow and the second so fast?

The first search had to fetch data from the repository over the network and stored it in the cache. The second search found much of that data already in the cache and read it from local disk.

Q8Will a bigger cache always make things faster?

It helps until the cache is larger than the working set of your real searches. Beyond that point, extra cache just sits mostly unused. Measure hit rates before buying more capacity.

Q9What happens if the object store is temporarily unavailable?

On the frozen tier, searches that can be answered from the cache continue, while searches that need uncached data fail or time out for the affected shards. On the cold tier, already recovered shards keep working from local disk, but shards that must recover cannot do so until the store returns.

Q10Can I delete a snapshot that is mounted as an index?

No. Elasticsearch refuses to delete a snapshot that a mounted index still depends on. This guard protects you from removing live data by accident.

Q11Can two clusters share the same snapshot repository?

They can, but only one of them should be allowed to write to it. Every other cluster should register the repository as read-only. This arrangement is useful for analysis clusters and disaster recovery.

Q12How does this relate to the older “freeze index” feature?

The older feature reduced memory use for rarely searched indices but still kept the full data on local disks. The frozen tier with searchable snapshots replaced it, since it addresses the storage cost problem as well as the memory problem.

Q13Is it cheaper in every case?

Not in every case. Savings are largest for large volumes of rarely searched data. Heavy, frequent searching of frozen data can bring request charges, slow experiences, and the need for a larger cache, which reduce the benefit. A licensing cost also applies.

Q14How should I decide how long to keep data hot?

Look at your actual usage. Find the age after which most searches stop asking for the data, and move it to a cheaper tier just after that point. Review the numbers periodically, because habits change.

25Summary and Key Takeaways

A searchable snapshot lets Elasticsearch treat a snapshot in object storage as the real home of an index. Because Lucene segments never change, they can be copied to cheap storage once and then read back in pieces whenever a search needs them. Fully mounted indices bring a whole copy to local disk for fast, dependable searches on the cold tier. Partially mounted indices keep only a cache locally and fetch the rest on demand, making the frozen tier dramatically cheaper for data that is rarely searched. Index lifecycle management ties the story together by moving data through the tiers automatically. The price of these savings is slower searches on uncached data, read-only indices, and a repository that must now be protected like production storage. Used with clear expectations, careful sizing, and good monitoring, searchable snapshots let you keep years of history searchable without paying hot-tier prices for it.

Key Takeaways

  • The snapshot becomes the primary copy — a mounted index reads from the repository, so local disks hold either a full working copy or just a cache.
  • Two modes, two tiers — fully mounted indices suit the cold tier with fast local reads, and partially mounted indices suit the frozen tier with the lowest cost and slower cache misses.
  • Immutability makes it possible — Lucene segments never change, so they can be shared, copied, and fetched in ranges safely.
  • Query habits decide success — tight time filters, selective queries, few returned hits, and asynchronous search keep the frozen tier pleasant to use.
  • Size the cache to the working set — frozen node disks are performance capacity, and cache hit ratio is the metric to watch.
  • Protect the repository like production storage — versioning, least-privilege access, encryption, and a replicated copy guard the only durable copy of your data.
  • Plan for read-only data — decide in advance how updates, corrections, and deletion requests will be handled before data becomes immutable.