Skip to main content
Weaviate Docs (migrated from docs.weaviate.io) Docs

Search documentation

Type to search this documentation.

On this pageOverview

Manage tenant states & temperature

Storage Tiers

Storage resources are grouped into tiers. Each tier has different performance characteristics and costs:

Tier Location Speed Cost
Hot RAM Fastest access Most expensive
Warm Disk Medium speed Medium price
Cold Cloud Storage Slowest access Least expensive

The pricing difference between Hot and Cold tiers is significant. Cloud storage is several orders of magnitude cheaper than RAM.

In multi-tenant collections, you can change tenant states (Active, Inactive, Offloaded) to move data between storage tiers. This allows granular trade-offs between cost, resource availability, and readiness.

Manage vector index resource temperature

The vector index type affects its default resource type.

  • HNSW index (default) - uses the vector index in RAM, a Hot resource.
  • Flat index - uses the vector index on disk, a Warm resource.
  • Dynamic index - starts as a flat index (using a Warm resource), then switches to an HNSW index (a Hot resource) at a predetermined threshold.

There are three tenant states: Active, Inactive and Offloaded.

Tenant state CRUD & Queries Vector Index Inverted Index Object Data Time to Activate Description
Active (default) Yes Hot/Warm Warm Warm None Tenant is available for use
Inactive No Warm Warm Warm Fast Tenant is locally stored but not available for use
Offloaded No Cold Cold Cold Slow Tenant is stored in cloud storage and not available for use

An Active tenant is available for queries and CRUD operations. Depending on the vector index type it uses either hot or warm resources.

The tenant's object data and inverted index are stored on disk, using warm resources.

Active Tenant resources

An Inactive tenant is not available for queries nor CRUD operations.

The tenant's object data, vector index and inverted index are stored on disk, using warm resources. This can lower Weaviate's memory requirements compared to active tenants that use hot resources.

Since the tenant is stored locally, inactive tenants can be activated quickly.

Inactive Tenant resources

An offloaded tenant is not available for queries or CRUD operations.

The tenant's object data, vector index and inverted index are stored on the cloud, using cold resources. Since the tenant is stored remotely, there is a delay when activating an offloaded tenant.

Offloaded Tenant resources

To activate an INACTIVE tenant from disk, or to onload and activate an OFFLOADED tenant from cloud, call:

Python
from weaviate.classes.tenants import Tenant, TenantActivityStatusmulti_collection = client.collections.use("MultiTenancyCollection")multi_collection.tenants.update(tenants=[    Tenant(        name="tenantA",        activity_status=TenantActivityStatus.ACTIVE    )])
JavaScript/TypeScript
const multiCollection = client.collections.use(collectionName)await multiCollection.tenants.update({  name: 'tenantA',  activityStatus: 'ACTIVE'})
Java
String tenantName = "tenantA";
CollectionHandle<Map<String, Object>> collection =
    client.collections.use(collectionName);
collection.tenants.activate(tenantName);
C#
string[] tenantName = ["tenantA"];
await collection.Tenants.Activate(tenantName);

To deactivate an ACTIVE tenant, or to onload an OFFLOADED tenant from cloud (without activating it), call:

Python
from weaviate.classes.tenants import Tenant, TenantActivityStatusmulti_collection = client.collections.use("MultiTenancyCollection")multi_collection.tenants.update(tenants=[    Tenant(        name="tenantA",        activity_status=TenantActivityStatus.INACTIVE    )])
JavaScript/TypeScript
const multiCollection = client.collections.use(collectionName)await multiCollection.tenants.update({  name: 'tenantA',  activityStatus: 'INACTIVE'})
Java
String tenantName = "tenantA";
CollectionHandle<Map<String, Object>> collection =
    client.collections.use(collectionName);
collection.tenants.deactivate(tenantName);
C#
string[] tenantName = ["tenantA"];
await collection.Tenants.Deactivate(tenantName);

To offload an ACTIVE or INACTIVE tenant to cloud, call:

Python
from weaviate.classes.tenants import Tenant, TenantActivityStatusmulti_collection = client.collections.use("MultiTenancyCollection")multi_collection.tenants.update(tenants=[    Tenant(        name="tenantA",        activity_status=TenantActivityStatus.OFFLOADED    )])
JavaScript/TypeScript
const multiCollection = client.collections.use(collectionName)await multiCollection.tenants.update({  name: 'tenantA',  activityStatus: 'OFFLOADED'})
Java
String tenantName = "tenantA";
CollectionHandle<Map<String, Object>> collection =
    client.collections.use(collectionName);
collection.tenants.offload(tenantName);
C#
await collection.Tenants.Offload(new[] { "tenantA" });

Enable this to automatically activate INACTIVE or OFFLOADED tenants if a search, read, update, or delete operation is performed on them.

Python
from weaviate.classes.config import Configuremulti_collection = client.collections.create(    name="CollectionWithAutoTenantActivation",    multi_tenancy_config=Configure.multi_tenancy(        enabled=True,        auto_tenant_activation=True  # Enable automatic tenant activation    ))
JavaScript/TypeScript
const result = await client.collections.create({  name: 'CollectionWithAutoTenantActivation',  multiTenancy: weaviate.configure.multiTenancy({    enabled: true,    autoTenantActivation: true  })})
Java
client.collections.create("MultiTenancyCollection",
    col -> col.multiTenancy(mt -> mt.autoTenantActivation(true)));
C#
await client.Collections.Create(
    new CollectionCreateParams
    {
        Name = "MultiTenancyCollection",
        MultiTenancyConfig = new MultiTenancyConfig
        {
            Enabled = true,
            AutoTenantActivation = true,
        },
    }
);

Have a question or feedback? Here's how to reach us.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu