DynamoDB Flussi: TrimmedDataAccessException

TL;DR — DynamoDB I flussi conservano i record per 24 ore; i record più vecchi vengono tagliati e rimossi dallo stream. Questa eccezione significa che hai richiesto una posizione che è stata ridotta: un checkpoint vecchio di più di un giorno, di solito da un consumatore che era in ribasso o rimasto indietro. Non puoi recuperare quei record dallo stream: riprendi da "TRIM_HORIZON" (il record più vecchio sopravvissuto) e riconcilia il divario dalla tabella stessa.

Cosa significa

TrimmedDataAccessException: The data you are trying to access has been trimmed.

A differenza di un iteratore scaduto — dove solo il tuo handle di posizione è diventato obsoleto — i dati tagliati vengono effettivamente rimossi. La richiesta di un iteratore di shard in un "SequenceNumber" ridotto o la lettura di uno shard i cui record sono scaduti genera questo problema. Lo streaming è un buffer continuo di 24 ore, non un archivio.

Perché succede

  • Il consumatore è rimasto inattivo per più di 24 ore (un'interruzione, un lavoratore in pausa, un trigger disabilitato dimenticato) e il suo checkpoint ora punta in un territorio tagliato.
  • Il ritardo di elaborazione ha superato la conservazione: il consumer funziona, ma più lentamente della velocità di scrittura e resta indietro di oltre un giorno.
  • Un checkpoint memorizzato non aggiornato: il riavvio di un vecchio consumer con un SequenceNumber persisteva settimane fa.
  • Lettura end-to-end di un vecchio shard: percorre la linea di shard di un flusso di lunga durata e richiede intervalli che precedono la conservazione.

Come risolverlo

  1. Riprendi dal record disponibile più vecchio e accetta l'intervallo:

    const {ShardIterator} = await streams.send(
      new GetShardIteratorCommand({
        StreamArn: streamArn,
        ShardId: shardId,
        ShardIteratorType: 'TRIM_HORIZON' // oldest untrimmed record
      })
    );

    Utilizza invece "LATEST" se conta solo la nuova attività.

  2. Riconcilia la finestra mancata dalla fonte della verità: la tabella ha ancora lo stato corrente di ogni elemento. Uno Scan/Query limitato sulle chiavi interessate (o un export per tabelle di grandi dimensioni) ricostruisce ciò che i record tagliati ti avrebbero detto, meno le versioni intermedie.

  3. Avviso sul ritardo del consumatore: monitora l'età dei record che stai elaborando (o la metrica "IteratorAge" di Lambda) e pagina molto prima che si avvicini alle 24 ore.

  4. Hai bisogno di una conservazione più lunga? Esegui lo streaming in un buffer durevole all'arrivo dei record (ad esempio Kinesis Data Streams tramite modelli di adattatori Kinesis o permetti tu stesso i record elaborati) — DynamoDB I flussi stessi non possono essere estesi oltre le 24 ore.

  5. Reimpostare il checkpoint dopo il ripristino. Mantenere il nuovo SequenceNumber da TRIM_HORIZON in modo che il consumer non riprenda la vecchia posizione ritagliata al riavvio.

In DynoTable

Dopo un intervallo di rifinitura, riconcilia lo stato corrente dell'articolo dalla tabella: aprila con ⌘K e sfoglia o filtra le chiavi mancate al consumatore. DynoTable mostra i dati della tabella in tempo reale indipendentemente dalla finestra del flusso di 24 ore.

Dimensiona la lettura di recupero con il calcolatore dei prezzi. Copia "LatestStreamArn" della tabella dal pannello dei metadati prima di riavviare il consumer. Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.