Por que a métrica Deleted Documents está tão alta em meu cluster do Amazon OpenSearch Service?

Última atualização: 30/09/2021

Excluí documentos de meu cluster do Amazon OpenSearch Service (sucessor do Amazon Elasticsearch Service), mas não vejo nenhum espaço em disco recuperado. Como faço para liberar mais espaço em disco?

Breve descrição

No OpenSearch Service, a métrica DeletedDocuments é um contador que mostra o número de documentos marcados para exclusão. A métrica DeletedDocuments mostra um aumento depois que as solicitações de exclusão são processadas e os segmentos de índice são mesclados no cluster.

O OpenSearch Service executa automaticamente a operação da API merge usando a configuração de política de mesclagem. Durante uma mesclagem, os segmentos menores são mesclados em segmentos maiores para manter o tamanho do índice. Os documentos marcados para exclusão também são eliminados para liberar mais espaço em disco.

Para recuperar espaço em disco imediatamente, você pode excluir um índice em vez de excluir documentos individuais. Ou você também pode usar a API force merge junto com o parâmetro only_expunge_deletes para limpar os documentos excluídos em um índice.

Para manter os metadados do índice enquanto recupera espaço em disco no cluster, considere as seguintes abordagens:

Resolução

Verifique o número de documentos excluídos

Para verificar o número de documentos excluídos no cluster do OpenSearch Service, execute a API cluster stats. O valor obtido da chamada da API cluster stats aparece na métrica DeletedDocuments do cluster. A saída retorna uma soma dos documentos excluídos para todos os índices presentes no cluster. Essa contagem pode ser verificada usando o campo “docs.deleted” na saída da resposta.

Por exemplo, se o cluster tiver três índices (index1, index2 e index3), você poderá executar a chamada de API index stats:

GET index1/_stats
…
"docs" : {
        "count" : 100,
        "deleted" : 1
      }
… 
GET index2/_stats
…
"docs" : {
        "count" : 100,
        "deleted" : 5
      }
… 
GET index3/_stats
…
"docs" : {
        "count" : 100,
        "deleted" : 8
      }
…

A chamada de API cluster stats adiciona o campo “docs.deleted” a todos os índices presentes no cluster:

...
"docs" : {
      "count" : 1227677521,
      "deleted" : 14
    }
…

Se você excluir index2, a chamada da API cluster stats calculará apenas os valores de index1 e index3:

GET _cluster/stats
...
"docs" : {
      "count" : 1227677521,
      "deleted" : 9
    }

Os segmentos agora são mesclados e os metadados do índice para index2 são apagados. Como resultado, o valor da métrica DeletedDocuments diminuiu para 9.

Confirmar o tamanho dos documentos

Para verificar os tamanhos de documentos e a contagem de um índice, use a API cat indices. Certifique-se de que o novo documento tenha o mesmo tamanho do documento existente no cluster do OpenSearch Service. Usar o mesmo tamanho de documento garante que os documentos excluídos não ocupem espaço em disco adicional.

Eliminar os documentos excluídos

Para recuperar espaço em disco manualmente, execute a API force merge com o parâmetro only_expunge_deletes definido como “true”:

POST /<index-name>/_forcemerge?only_expunge_deletes=true

Observação: essa operação eliminará somente segmentos que contenham documentos marcados para exclusão.

Como resultado, a force merge diminui a quantidade de espaço em disco que está em uso. Depois que os novos segmentos são criados, os segmentos antigos são removidos, e os novos segmentos não contêm mais os documentos marcados para exclusão. Para obter mais informações sobre documentos excluídos, consulte Lucene's Handling of Deleted Documents (“Tratamento do Lucene para documentos excluídos”) no site do Elasticsearch.

No entanto, esteja ciente do seguinte ao executar a operação force merge:

  • Execute force merge no cluster somente quando houver espaço de armazenamento livre suficiente. Essa ação é uma operação que consome muitos recursos.
  • A operação force merge aciona um processo intensivo de E/S e bloqueia todas as novas solicitações para o cluster até que a mesclagem seja concluída.
  • Chame a operação force merge somente em relação a índices somente leitura, quando nenhum dado adicional estiver sendo gravado no índice. Se force merge for chamada em relação a um índice de leitura/gravação, essa ação poderá fazer com que segmentos muito grandes sejam produzidos (>5 GB por segmento). Quando isso acontece, a política de mesclagem automática não considerará esses segmentos muito grandes para futuras mesclagens até que os segmentos contenham principalmente documentos excluídos. Como resultado, o uso do disco aumenta e a performance da pesquisa piora.

Você também pode usar a API delete by query ou a API delete para excluir manualmente quaisquer documentos em seu cluster.

Recuperar espaço em disco imediatamente

Para recuperar espaço em disco imediatamente, use a API delete index. A exclusão de um índice não cria nenhum marcador de exclusão. Em vez disso, a API delete index limpa os metadados do índice e o espaço em disco é imediatamente recuperado. O espaço em disco recuperado é refletido na métrica DeletedDocuments.

Observação: é uma prática recomendada excluir índices antigos que não estejam em uso. Se você excluir um índice ativo, bloqueie a criação automática de índices. Para obter mais informações, consulte Automatically create data streams and indices (“Criar fluxos de dados e índices automaticamente”) no site do Elasticsearch.