Einsteiger5 Min. Lesezeit

Wie man Größe und Item-Anzahl einer DynamoDB-Tabelle ermittelt

Es gibt kein SELECT COUNT(*), das du günstig auf eine DynamoDB-Tabelle richten kannst. DynamoDB gibt dir zwei sehr unterschiedliche Antworten auf „Wie groß ist diese Tabelle?": einen kostenlosen Schätzwert, der bis zu sechs Stunden veraltet sein kann, und eine exakte Zählung, die einen vollständigen Lesevorgang der Tabelle kostet. Die meiste Verwirrung à la „Warum stimmt meine Item-Anzahl nicht?" kommt daher, dass man das eine wählt und das Verhalten des anderen erwartet.

Wie bekomme ich Item-Anzahl und Größe einer DynamoDB-Tabelle?

Rufe DescribeTable auf: Es liefert ItemCount und TableSizeBytes kostenlos, aber „DynamoDB aktualisiert diesen Wert ungefähr alle sechs Stunden. Kürzliche Änderungen spiegeln sich in diesem Wert möglicherweise noch nicht wider" (AWS-API-Referenz). Für eine exakte Zahl führe einen Scan mit --select COUNT aus — er liefert nur die Anzahl, liest (und berechnet) aber jedes Item. Eine GUI wie DynoTable zeigt die Schätzwerte an jeder Tabelle und kann exakte Zählungen auf Abruf berechnen.

Du willstNutzeKostenAktualität
Grobe Anzahl + Größe, kostenlosDescribeTablekeine (Metadaten-Aufruf)~6 h veraltet
Exakte GesamtanzahlScan mit Select COUNTliest die ganze Tabellelive
Exakte Anzahl für einen SchlüsselQuery mit Select COUNTliest die passenden Itemslive
Anzahl einer gefilterten TeilmengeScan/Query + Filter + COUNTliest alles Gescanntelive

Methode 1: DescribeTable (kostenlos, ~6 h veraltet)

DescribeTable ist ein Metadaten-Lookup — es liest keine Items, verbraucht also keine Lesekapazität, und trägt die beiden Zahlen, hinter denen du her bist:

aws dynamodb describe-table --table-name Orders \
  --query 'Table.[ItemCount, TableSizeBytes]'

Beide kommen mit demselben Vorbehalt, wörtlich aus der API-Referenz: „DynamoDB aktualisiert diesen Wert ungefähr alle sechs Stunden. Kürzliche Änderungen spiegeln sich in diesem Wert möglicherweise noch nicht wider." Eine Tabelle, die du gerade per Bulk-Load befüllt hast, kann also stundenlang ItemCount: 0 melden — die Zahl ist nicht falsch, sie ist ein Snapshot.

Dieselbe Antwort trägt auch Pro-Index-Zahlen: Jeder GSI und LSI meldet sein eigenes ItemCount und IndexSizeBytes im selben Sechs-Stunden-Takt. Die Item-Anzahl eines mit der der Tabelle zu vergleichen ist ein netter kostenloser Gesundheitscheck — er verrät dir, wie viele Items den Indexschlüssel tatsächlich tragen.

Methode 2: exakte Zählung mit Scan + Select COUNT

Wenn „ungefähr, Stand heute Morgen" nicht gut genug ist, zähle wirklich:

aws dynamodb scan --table-name Orders --select COUNT

Fakten, die du kennen solltest, bevor du ihn ausführst, alle aus der Scan-API-Referenz:

  • COUNT „liefert die Anzahl der passenden Items statt der passenden Items selbst" — weniger Netzwerkverkehr, aber „das verbraucht dieselbe Menge an Lesekapazitätseinheiten wie das Abrufen der Items". Eine exakte Zählung einer 100-GB-Tabelle ist ein 100-GB-Lesevorgang auf deiner Rechnung.
  • Ein einzelner Request stoppt weiterhin bei 1 MB gescannter Daten; das Count der Antwort „liefert nur die Item-Anzahl eines einzelnen Scan-Requests". Die CLI folgt LastEvaluatedKey und summiert die Seiten für dich; in SDK-Code schleifst und addierst du selbst — siehe Paginierung.
  • Auf einer großen Tabelle teile die Arbeit mit einem parallelen Scan (--segment / --total-segments) auf und summiere die Zählungen pro Segment.

Eine Teilmenge zählen

  • Items unter einem Partition Key: Query mit --select COUNT — liest nur die Items dieses Schlüssels, ist also so günstig, wie die Daten klein sind. Das ist der richtige Weg, eine zu zählen.
  • Items, die einem Filter entsprechen: füge eine FilterExpression hinzu — aber denk daran, dass dir ScannedCount berechnet wird, nicht Count: DynamoDB filtert nach dem Lesen, sodass „zähle die archivierten Bestellungen" per gefiltertem Scan für jede Bestellung zahlt. Ein hoher ScannedCount neben einem kleinen Count ist die Signatur eines Filters, der ein GSI sein will — siehe Filterstrategien.

Für reichere Fragen — Anzahl pro Status, Summen, Durchschnitte — hat DynamoDB überhaupt kein GROUP BY; die Workarounds stehen in Count, Sum & Aggregate.

Tabellengröße und Item-Anzahl in DynoTable

DynoTable legt beide Antworten dorthin, wo du ohnehin hinschaust. Jede offene Tabelle hat einen Stats-Button (das Balkendiagramm-Icon) in der Tab-Toolbar; das Panel zeigt:

  • Primary Key und Sekundärindizes — die Form der Tabelle auf einen Blick.
  • Items · Größe · Ø Item — DynamoDBs eigene DescribeTable-Schätzwerte, als Schätzwerte gekennzeichnet, mit dem Sechs-Stunden-Vorbehalt einen Hover entfernt.
  • Index table — ein Ein-Klick-Sampling-Scan, der jedes Attribut entdeckt, das deine Items tatsächlich tragen (einschließlich verschachtelter Pfade wie commonData.status), mit Live-Fortschritt. Er speist die Feld-Autovervollständigung und einen inferierten TypeScript-/Zod-/JSON-Schema-Export, und er verursacht normale DynamoDB-Lesekosten — die App sagt das vorab.
Das Table-stats-Panel in DynoTable: Schlüssel und Indizes, die Schätzwert-Zeile Items / Größe / Ø Item und die Liste der indizierten Felder.
Das Table-stats-Panel in DynoTable: Schlüssel und Indizes, die Schätzwert-Zeile Items / Größe / Ø Item und die Liste der indizierten Felder.

Und für die exakten Zahlen berechnet der eingebaute KI-Assistent auf Wunsch Zählungen, Summen und Aufschlüsselungen pro Gruppe über die gesamte Tabelle — er liest jedes passende Item, statt eine Seite zu sampeln, und fragt nach, bevor er irgendetwas ausführt, das Lesekapazität kostet.

FAQ

Warum ist meine DynamoDB-Item-Anzahl falsch? Sie ist nicht falsch — sie ist veraltet. ItemCount (und TableSizeBytes) werden „ungefähr alle sechs Stunden" aktualisiert, sodass sich frische Schreib- und Löschvorgänge noch nicht widerspiegeln. Die Tabellenübersicht der Konsole zeigt dieselben DescribeTable-Zahlen, mit derselben Verzögerung.

Wie zähle ich Zeilen in DynamoDB exakt? aws dynamodb scan --table-name X --select COUNT — die CLI blättert durch die ganze Tabelle und summiert die Zählungen pro Seite. Das ist exakt, berechnet aber dieselbe Lesekapazität wie das Abrufen jedes Items.

Ist DescribeTable kostenlos? Es verbraucht keine Lesekapazität — es ist ein Metadaten-Aufruf, kein Daten-Lesevorgang; es zu pollen tastet den Durchsatz deiner Tabelle also nicht an.

Wie finde ich die Größe eines einzelnen Items heraus? DynamoDB rechnet nach Item-Größe ab (aufgerundet pro 1 KB geschrieben / 4 KB gelesen). Füge ein Item in den Item-Größen-Rechner ein, um seine abgerechnete Größe zu sehen, und siehe das 400-KB-Item-Limit für die Obergrenze.

Beeinflusst die Item-Anzahl meine Rechnung? Speicher wird nach TableSizeBytes abgerechnet und Requests nach Item-Größe × Request-Anzahl — nicht direkt nach Item-Anzahl. Gib die Zahlen deiner Tabelle in den Preisrechner ein, um das Monatsbild über On-Demand- und provisionierte Modi zu sehen.

Willst du Form, Schätzwerte und indizierte Felder der Tabelle einen Klick entfernt? Lade DynoTable herunter und öffne das Stats-Panel an jeder Tabelle.

Aktualisiert