DBAtlas · Atlas de operações de banco de dados

Fazer shrink de um índice com shards demais

ElasticsearchCiclo de vida do índice

Comando

# 1) Block writes on the source and gather all shard copies on one node:
PUT log-2026.09/_settings
{
  "index.number_of_replicas": 0,
  "index.routing.allocation.require._name": "node-1",
  "index.blocks.write": true
}
GET _cluster/health/log-2026.09?wait_for_no_relocating_shards=true&timeout=30m
# 2) Create a new index with fewer shards (the target must be a factor of the source):
POST log-2026.09/_shrink/log-2026.09-shrunk
{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 1,
    "index.routing.allocation.require._name": null,
    "index.blocks.write": null,
    "index.codec": "best_compression"
  }
}

O que faz

Reduz a quantidade de shards primários de um índice que não recebe mais escritas, criando hard links dos seus segmentos em um novo índice; diminui o overhead de heap e de quantidade de shards.

Quando usar

Quando índices diários foram criados com mais shards que o necessário, o limite de shards está próximo ou antes de mover índices antigos para o warm tier.

Atenção

O índice de origem fica fechado para escritas durante o shrink; aplique apenas a índices que não recebem mais escritas. A quantidade de shards de destino precisa ser um divisor da quantidade de origem (8 -> 4, 2 ou 1). O nó onde todas as cópias são reunidas precisa de tanto disco livre quanto o índice de origem. Com replicas 0, o shard de origem tem uma única cópia; não apague a origem até a operação terminar e o novo índice ficar green.

Abrir no DBAtlas →

Relacionados