DBAtlas · Атлас эксплуатации баз данных

Сжатие индекса со слишком большим числом шардов (shrink)

ElasticsearchЖизненный цикл индекса

Команда

# 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"
  }
}

Что делает

Уменьшает число первичных шардов индекса, в который больше не пишут, создавая жёсткие ссылки на его сегменты в новом индексе; снижает накладные расходы heap и числа шардов.

Когда использовать

Когда ежедневные индексы созданы с большим числом шардов, чем нужно, лимит числа шардов близок или перед переносом старых индексов на warm-уровень.

Внимание

Во время shrink исходный индекс закрыт для записи; применяйте только к индексам, в которые больше не пишут. Целевое число шардов должно быть делителем исходного (8 -> 4, 2 или 1). Узлу, где собираются все копии, нужно столько же свободного диска, сколько занимает исходный индекс. При replicas 0 у исходного шарда одна копия; не удаляйте источник, пока операция не завершится и новый индекс не станет green.

Открыть в DBAtlas →

Связанные материалы