View a markdown version of this page

Mantenimento degli indici - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Mantenimento degli indici

Index bloat

Amazon DocumentDB utilizza Multi-Version Concurrency Control (MVCC) per gestire transazioni simultanee. Quando i documenti vengono eliminati o aggiornati, le versioni precedenti rimangono nelle raccolte e negli indici come versioni «morte». Il processo di raccolta dei rifiuti recupera automaticamente lo spazio da queste versioni non funzionanti per operazioni future.

Il gonfiamento dell'indice si verifica quando gli indici di una raccolta diventano più grandi a causa dell'accumulo di voci di indice non più valide o obsolete o della frammentazione all'interno delle pagine. La percentuale riportata rappresenta la quantità di spazio indicizzato che può essere utilizzata dalle future voci dell'indice. Questo bloat consuma spazio sia nella cache del buffer che nella memoria. Se vuoi rimuovere il bloat, dovrai ricostruire gli indici.

Esempio: esegui il comando seguente per determinare lo spazio di archiviazione inutilizzato per l'indice:

db.coll.aggregate({$indexStats:{}});

Il risultato è simile al seguente:

{ "name" : "_id_", "key" : { "_id" : 1 }, "host" : "devbox-test.localhost.a2z.com:27317", "size" : NumberLong(827392), "accesses" : { "ops" : NumberLong(40000), "docsRead" : NumberLong(46049), "since" : ISODate("2025-04-03T21:44:51.251Z") }, "cacheStats" : { "blksRead" : NumberLong(264), "blksHit" : NumberLong(140190), "hitRatio" : 99.8121 }, "unusedStorageSize" : { "unusedSizeBytes" : 409600, "unusedSizePercent" : 49.51 } }

È possibile ricostruire gli indici senza tempi di inattività utilizzando il comando reIndex, che richiede una scansione dell'intera raccolta. Vedi Manutenzione dell'indice con reIndex.

Manutenzione dell'indice tramite reIndex

reIndex è un comando utilizzato per ricostruire un indice. Viene in genere utilizzato quando un indice è danneggiato o inefficiente. Nel tempo, gli indici possono accumulare spazio inutilizzato a causa di numerosi aggiornamenti, inserimenti o eliminazioni, con conseguente peggioramento delle prestazioni. La reindicizzazione consente di rimuovere lo spazio inutilizzato e ripristinare l'efficienza dell'indice.

Linee guida reIndex

  • reIndex è supportato solo su Amazon DocumentDB 5.0 e versioni successive

  • reIndex viene sempre eseguito in background.

  • Amazon DocumentDB supporta la reindicizzazione di un singolo indice in background, consentendo l'utilizzo di più worker. Il vecchio indice è utilizzabile tramite query quando il processo reIndex è in esecuzione.

  • Amazon DocumentDB supporta l'indicizzazione dei report sullo stato di avanzamento tramite CurrentOp. Puoi visualizzare le fasi di creazione dell'indice simili alle fasi di creazione dell'indice visualizzate durante la creazione dell'indice. L'unica differenza è che reIndex ha sempre otto fasi, indipendentemente dal fatto che sia unico o meno. Non esiste una fase «indice di costruzione: ordinamento delle chiavi 2".

  • ReIndex può essere eseguito contemporaneamente a qualsiasi comando tranne i comandi relativi all'indice nella stessa raccolta: createIndexes, DropIndexes, CollMod e RenameCollection.

  • Attualmente reIndex non è supportato per gli indici di testo, geospaziali, vettoriali e parziali.

Compilazione reIndex

Usa il seguente comando per ricostruire il tuo indice:

db.runCommand({ reIndex: "collection-name", index: "index-name"})

Facoltativamente, puoi anche controllare il numero di lavoratori assegnati al processo di ricostruzione:

db.runCommand({ reIndex: "collection-name", index: "index-name", workers: number })

Per informazioni specifiche sulla gestione degli indici con Java, consulta Gestione degli indici in Amazon DocumentDB con Java.