> For the complete documentation index, see [llms.txt](https://docs.seemoredata.io/external-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.seemoredata.io/external-docs/fundamentals/our-features/waste-reduction/bloated-storage.md).

# Bloated Storage

Find development, test, and backup databases and schemas that pay for Time Travel storage they don't need, and turn it off to cut storage spend.

## Overview

Bloated Storage identifies **development, test, staging, and backup databases and schemas** in Snowflake that keep **Time Travel** history.\
Time Travel is a Snowflake feature that keeps previous versions of changed or deleted data for a set number of days (the *retention period*), so you can query or restore it. That history is billed as storage. In non-production environments it is rarely needed, so setting the retention period to 0 days removes the cost.

{% hint style="info" %}
**Required role:** [Viewer](/external-docs/fundamentals/settings/user-roles.md) or higher.

Any authenticated user can view these insights and mark them as Done. Applying the recommended change is done in Snowflake.
{% endhint %}

***

## How It Works

### Detection Logic

Seemore identifies non-production databases and schemas — such as development, staging, sandbox, testing, and backup environments — based on common naming conventions.

A non-production asset is flagged when:

1. **Time Travel is enabled** — for databases, the retention period is greater than 0 days.
2. **Time Travel storage has a cost** — the asset holds Time Travel data that you are billed for. Assets with no Time Travel storage are skipped.

If a database is flagged, its schemas are not flagged separately — the database-level change covers them.

***

### Savings Estimation

Each insight includes:

* **Current retention period** and the recommended value (0 days).
* **Estimated annual storage savings**, based on the asset's current Time Travel storage and your Snowflake storage price per TB.

***

## Remediation

1. Confirm the database or schema is not production and that nobody relies on restoring its data with Time Travel or `UNDROP`.
2. Run the SQL provided in the insight in a Snowflake worksheet, for example:

   ```sql
   ALTER DATABASE IF EXISTS ANALYTICS_DEV SET DATA_RETENTION_TIME_IN_DAYS = 0;
   ```

   For a schema, the insight provides the equivalent `ALTER SCHEMA` statement.
3. Mark the insight as **Done** in Seemore.

Database insights close automatically once Seemore sees the retention period set to 0 or the database dropped.

{% hint style="warning" %}
With a retention period of 0 days, you can no longer query earlier versions of the data or restore dropped tables with `UNDROP`. Snowflake Fail-safe still applies to permanent tables, so released history may stay billed for up to 7 days.
{% endhint %}

{% hint style="info" %}
A table or schema with its own explicit retention setting keeps that setting when you change its parent database. Check for object-level overrides if savings don't appear.
{% endhint %}

***

## Configuration

| Parameter       | Default | Description                                                                             |
| --------------- | ------- | --------------------------------------------------------------------------------------- |
| Analysis window | 30 days | Period used to calculate Time Travel storage cost, annualized for the savings estimate. |

{% hint style="info" %}
The **Exclude Users from Usage** setting does **not** affect this insight. Bloated Storage is based on database and schema names and their Time Travel storage, not on query activity.
{% endhint %}
