> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cockroachlabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Choose a Multi-Region Configuration

This page has high-level information about how to configure a [multi-region cluster's](/docs/stable/multiregion-overview.md#default-settings) [survival goals](/docs/stable/multiregion-overview.md#survival-goals) and [table localities](/docs/stable/multiregion-overview.md#table-localities).

## Multi-region configuration options

The options for configuring your multi-region cluster include:

* *Change nothing*: Using the [default settings](/docs/stable/multiregion-overview.md#default-settings), you get:
  * Zone survival (the default).
  * Low-latency reads and writes from a single region.
  * A choice of low-latency stale reads or high-latency fresh reads from other regions (and high-latency fresh reads is the default).

* *Change only [survival goals](/docs/stable/multiregion-overview.md#survival-goals)*: This configuration is useful for single-region apps that need higher levels of survival. In this configuration, you move from availability zone (AZ) survival to get:
  * Region survival.
  * Low-latency reads from a single region.
  * A choice of low-latency stale reads or high-latency fresh reads from other regions (and high-latency fresh reads is the default).
  * Higher-latency writes from all regions (due to region survival).

* *Change only [table localities](/docs/stable/multiregion-overview.md#table-localities)*: This is useful for multi-region apps that require different read and write latency guarantees for different tables in the database, and are not concerned with surviving a region failure. In this configuration, you get:
  * Zone survival (the default).
  * For [global tables](/docs/stable/table-localities.md#global-tables), low-latency reads from all regions.
  * For [regional by row tables](/docs/stable/table-localities.md#regional-by-row-tables), low-latency reads and writes from each row's [home region](/docs/stable/alter-table.md#crdb_region), and low-latency [follower reads](/docs/stable/follower-reads.md) from all other regions.

* *Change both [survival goals](/docs/stable/multiregion-overview.md#survival-goals) and [table localities](/docs/stable/multiregion-overview.md#table-localities)*: This is useful for multi-region apps that want a high level of survival. In this configuration, you move from zone survival and get:
  * Region survival.
  * Low-latency reads from all regions.
  * Higher-latency writes from all regions (due to region survival).

## Configuration options vs. performance characteristics and application styles

The following table offers another view of how the various configuration options map to:

* The performance characteristics of specific survival goal and table locality combinations.
* The types of applications that can benefit from each combination.

| locality ↓ survival → | `ZONE` | `REGION` |
| - | - | - |
| `REGIONAL BY TABLE` | Low-latency for single-region writes and multi-region stale reads. | Single-region writes are higher latency than for `ZONE`, as at least one additional region must be consulted for each write. Stale multi-region reads are of comparable latency to `ZONE` survival. |
| | Single-region apps that can accept region failure. | Single-region apps that must survive region failure. |
| `REGIONAL BY ROW` | Low-latency consistent multi-region reads and writes for rows that are homed in specific regions. | Low-latency consistent reads from a row's home region. Low-latency consistent [stale reads](/docs/stable/follower-reads.md) from outside the row's home region. Higher-latency writes if writing to a row from outside its home region. |
| | Multi-region apps that read and write individual rows of the table from a specific region and can accept region failure. | Multi-region apps that read and write individual rows of the table from a specific region and must survive a region failure. |
| `GLOBAL` | Low-latency multi-region reads. Writes are higher latency than reads. | Low-latency multi-region reads.  Writes are higher latency than reads. There should be minimal difference in write latencies between `ZONE` and `REGION` survival. |
| | Multi-region apps that need low-latency reads of a "read-mostly" table. | Multi-region apps that need low-latency reads of a "read-mostly" table and must survive a region failure. |

Different databases and tables within the same cluster can each use different combinations of these settings.

For new clusters using the [multi-region SQL abstractions](/docs/stable/multiregion-overview.md#default-settings), Cockroach Labs recommends lowering the [`--max-offset`](/docs/stable/cockroach-start#flags-max-offset) setting to `250ms`. This setting is especially helpful for lowering the write latency of [global tables](/docs/stable/table-localities.md#global-tables). Nodes can run with different values for `--max-offset`, but only for the purpose of updating the setting across the cluster using a rolling upgrade.

## See also

* [Multi-Region Capabilities Overview](/docs/stable/multiregion-overview.md#default-settings)
* [When to Use `REGIONAL` vs. `GLOBAL` Tables](/docs/stable/table-localities#when-to-use-regional-vs-global-tables)
* [When to Use `ZONE` vs. `REGION` Survival Goals](/docs/stable/multiregion-survival-goals#when-to-use-zone-vs-region-survival-goals)
* [Survive Region Outages with CockroachDB](https://www.cockroachlabs.com/blog/under-the-hood-multi-region/)
* [Topology Patterns](/docs/stable/topology-patterns.md)
* [Disaster Recovery](/docs/stable/disaster-recovery-planning.md)
* [Secondary regions](/docs/stable/multiregion-overview.md#secondary-regions)
* [`SET SECONDARY REGION`](/docs/stable/alter-database#set-secondary-region)
* [`DROP SECONDARY REGION`](/docs/stable/alter-database#drop-secondary-region)
