Perché il parametro Documenti eliminati è così alto nel mio cluster Amazon OpenSearch Service?

Ultimo aggiornamento: 30-09-2021

Sono stati eliminati documenti nel cluster Amazon OpenSearch Service (successore di Amazon Elasticsearch Service), ma non viene recuperato spazio su disco. Come faccio a liberare più spazio su disco?

Breve descrizione

In OpenSearch Service, il parametro di riferimento DeletedDocuments è un contatore che mostra il numero di documenti contrassegnati per l'eliminazione. Il parametro di riferimento DeletedDocuments mostra un aumento dopo l'elaborazione delle richieste di eliminazione e l'unione dei segmenti di indice all'interno del cluster.

OpenSearch Service esegue automaticamente l'operazione di unione di API utilizzando l'impostazione del criterio di unione. Durante un’unione, i segmenti più piccoli vengono uniti in segmenti più grandi per mantenere la dimensione dell'indice. Anche i documenti contrassegnati per l'eliminazione vengono eliminati per liberare spazio su disco aggiuntivo.

Per recuperare immediatamente spazio su disco, è possibile eliminare un indice anziché eliminare singoli documenti. In alternativa, è possibile anche utilizzare l'API force merge insieme al parametro only_expunge_deletes per cancellare i documenti eliminati all'interno di un indice.

Per mantenere i metadati dell'indice mentre si recupera spazio su disco nel cluster, prendere in considerazione i seguenti approcci:

Risoluzione

Controllare il numero di documenti eliminati

Per controllare il numero di documenti eliminati nel cluster OpenSearch Service, eseguire l'API statistiche cluster. Il valore ottenuto dalla chiamata API delle statistiche del cluster viene visualizzato nel parametro di riferimento DeletedDocuments per il cluster. L'output restituisce una somma dei documenti eliminati per tutti gli indici presenti nel cluster. Questo conteggio può essere controllato utilizzando il campo "docs.deleted" nell'output della risposta.

Ad esempio, se il cluster ha tre indici (index1, index2 e index3), è possibile eseguire la chiamata 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
      }
…

La chiamata API cluster stats aggiunge quindi il campo "docs.deleted" per tutti gli indici presenti nel cluster:

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

Eliminando index2, la chiamata API statistiche cluster calcola esclusivamente i valori per index1 e index3:

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

I segmenti vengono ora uniti e i metadati dell'indice per index2 vengono cancellati. Di conseguenza, il valore del parametro di riferimento DeletedDocuments è diminuito a 9.

Confermare le dimensioni dei propri documenti

Per controllare le dimensioni del documento e il conteggio di un indice, utilizzare l'API degli indici cat. Assicurarsi che il nuovo documento abbia le stesse dimensioni del documento esistente nel cluster di OpenSearch Service. L'utilizzo delle stesse dimensioni del documento garantisce che i documenti eliminati non occupino spazio aggiuntivo su disco.

Cancellare i documenti eliminati

Per recuperare manualmente spazio su disco, esegui l'API force merge insieme al parametro only_expunge_deletes impostato su "true":

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

Nota: questa operazione eliminerà esclusivamente i segmenti contenenti documenti contrassegnati per l'eliminazione.

Di conseguenza, l'unione forzata riduce la quantità di spazio su disco utilizzato. Dopo la creazione dei nuovi segmenti, i vecchi segmenti vengono rimossi e i nuovi segmenti non contengono più i documenti contrassegnati per l'eliminazione. Per ulteriori informazioni sui documenti eliminati, vedere Gestione dei documenti eliminati da Lucene sul sito web di Elasticsearch.

Tuttavia, tenere presente quanto segue durante l’esecuzione dell'operazione di unione forzata:

  • Eseguire l'unione forzata sul cluster solo quando lo spazio di archiviazione disponibile è sufficiente. Questa azione è un'operazione che richiede molte risorse.
  • L'operazione di unione forzata attiva un processo ad alta intensità di I/O e blocca tutte le nuove richieste al cluster fino al completamento dell'unione.
  • Richiamare l'operazione di unione forzata solo su indici di sola lettura, quando non vengono scritti dati aggiuntivi nell'indice. Se viene richiamata un’operazione di unione forzata su un indice di lettura/scrittura, tale azione può portare alla produzione di segmenti molto grandi (>5 GB per segmento). Quando ciò accade, il criterio di unione automatica non prenderà in considerazione questi segmenti molto grandi per le unioni future fino a quando i segmenti non contengono principalmente documenti eliminati. Di conseguenza, l'utilizzo del disco aumenta e le prestazioni di ricerca peggiorano.

È inoltre possibile utilizzare l'API di eliminazione tramite query o l'API di eliminazione per eliminare manualmente qualsiasi documento nel cluster.

Recupero immediato dello spazio su disco

Per recuperare immediatamente spazio su disco, utilizzare l'API di eliminazione dell'indice. L'eliminazione di un indice non crea alcun indicatore di eliminazione. Al contrario, l'API di eliminazione dell'indice cancella i metadati dell'indice e lo spazio su disco viene immediatamente recuperato. Lo spazio su disco recuperato si riflette nel parametro di riferimento DeletedDocuments.

Nota: è consigliabile eliminare i vecchi indici che non vengono utilizzati. Se viene eliminato un indice attivo, assicurati di bloccare la creazione automatica degli indici. Per ulteriori informazioni, consultare Creare indici automaticamente sul sito web di Elasticsearch.