DynamoDB ProvisionedThroughputExceededException

TL;DR — Tablonun ya da indeksin hizmet verebileceğinden daha hızlı okuyor/yazıyorsunuz. Tabloyu talep üzerine kapasiteye geçirin, sağlanan RCU/WCU'yu yükseltin (ya da otomatik ölçeklendirmeyi etkinleştirin), SDK'nın varsayılan üstel geri çekilme yeniden denemelerini koruyun ve tek bir bölüm anahtarı sıcak olmasın diye trafiği yayın.

Ne anlama gelir

ProvisionedThroughputExceededException: You exceeded your maximum allowed
provisioned throughput for a table or for one or more global secondary indexes.

Bir sağlanan kapasite tablosunda, okuma/yazma kapasite birimlerini aştınız — ya genel olarak ya da (daha sık) tek bir bölümde. Bu bir HTTP 400'dür ama bir ValidationException'ın aksine yeniden denenebilirdir: AWS SDK'ları onu üstel geri çekilmeyle otomatik yeniden dener, dolayısıyla ara sıra olanlar normaldir. Kalıcı olanlar gerçek düşük tahsis ya da sıcak bir anahtar anlamına gelir. Hata, ThrottlingReason alanları (örneğin TableReadProvisionedThroughputExceeded) artı etkilenen kaynağın ARN'ini taşır, böylece hangi tablonun ya da indeksin ve hangi işlem türünde kısıtladığını söyleyebilirsiniz.

Neden olur

  • Gerçek trafik için düşük tahsis edilmiş kapasite.
  • Sıcak bir bölüm — trafik tek bir bölüm anahtarında yoğunlaşmış, dolayısıyla tablo genel olarak az kullanılmış görünürken tek bir bölümün kapasite payı tükenmiş.
  • Otomatik ölçeklendirmenin tepki verebileceğinden daha hızlı ani trafik — kapasiteyi tüketilen-kapasite metriklerine tepki olarak ayarlar, dolayısıyla ani bir basamak değişikliği, ölçek-yukarı inmeden önce kısıtlar.
  • Tüm kapasiteyi bir seferde tüketen büyük bir tarama ya da toplu içe aktarma.
  • Kapasitesi yazma hızından düşük olan bir GSIkısıtlanan bir GSI temel tabloyu kısıtlar.

Nasıl düzeltilir

  1. Trafik öngörülemezse talep üzerine kapasiteye geçin — otomatik ölçeklenir ve bu hata fiilen ortadan kalkar (bunun yerine istek başına ödersiniz).
  2. Sağlanan modda kalıyorsanız sağlanan RCU/WCU'yu yükseltin ya da makul bir hedef kullanımla otomatik ölçeklendirmeyi etkinleştirin.
  3. Üstel geri çekilme yeniden denemelerini koruyun — SDK bunu varsayılan olarak yapar; devre dışı bırakmayın. Ani iş yükleri için uyarlanabilir yeniden deneme modunu kullanın.
  4. Sıcak bölümü düzeltin — yük bölümler arasında yayılsın diye anahtar kardinalitesini artırın / sıcak anahtarı yazma-parçalayın.
  5. Okuma baskısını azaltmak için toplu işleri kısıtlayın ve sıcak okumaları önbelleğe alın (DAX ya da bir uygulama önbelleği).

SSS

ProvisionedThroughputExceededException'ı nasıl düzeltirim? Tablonun ya da indeksin hizmet verebileceğinden daha hızlı okuyor veya yazıyorsunuz. Tabloyu talep üzerine kapasiteye geçirin, sağlanan RCU/WCU'yu yükseltin (ya da otomatik ölçeklendirmeyi etkinleştirin), SDK varsayılan üstel geri çekilme yeniden denemelerini koruyun ve tek bir bölüm anahtarı sıcak olmasın diye trafiği yayın.

Nasıl yeniden oluşturulur

Bir tabloyu 1 RCU ile sağlayın, 4 KB'nin hemen altında tek bir öğe yazın, sonra onu sıkı bir döngüde güçlü tutarlı olarak geri okuyun:

import boto3
ddb = boto3.client('dynamodb', region_name='us-east-1')
# table created with ProvisionedThroughput={'ReadCapacityUnits': 1, 'WriteCapacityUnits': 1}
ddb.put_item(TableName='my-table', Item={'pk': {'S': 'A'}, 'blob': {'S': 'x' * 3500}})
while True:
    ddb.get_item(TableName='my-table', Key={'pk': {'S': 'A'}}, ConsistentRead=True)

Gerçek çıktı:

ProvisionedThroughputExceededException: The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API.
HTTP 400

Tetiklenmesi 49 okuma sürdü — yeni oluşturulmuş bir tabloda, SDK yeniden denemeleri kapalıyken. İlginç olan da bu sayı: 1 RCU'luk bir tablo ikinci istekte başarısız olmaz, çünkü DynamoDB önce size biriken patlama kapasitesini ödünç verir — dolayısıyla erken duran bir yük testi, sağlıklı olmayan bir tabloyu sağlıklı diye raporlar. Yanılsamanın diğer yarısı SDK'dır: kısıtlanan istekleri varsayılan olarak sizin yerinize yeniden dener. Yukarıdaki gibi yeniden denemeleri kapatın; yoksa bu hata, bir gecikme sorununa dönüşene kadar görünmez kalır.

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

2026-07-26 tarihinde boto3 1.43.56 üzerinden, 1 RCU ile sağlanan ve SDK yeniden denemeleri kapatılmış bir tabloda, us-east-1'deki canlı DynamoDB hizmetine karşı yeniden üretildi — yukarıdaki çıktı birebir alınmıştır.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.