DynamoDBのエラー TransactionRolledBackException

投稿者: | 2016年3月12日

DynamoDBにデータを登録する機能に対し、大量なリクエストを送っていたらときおり次のような発生していました。
 
Transaction was rolled back: com.amazonaws.services.dynamodbv2.transactions.exceptions.TransactionRolledBackException
調べてみると、このエラーはトランザクションに失敗してロールバックしたときに発生するエラーでした。
なぜ失敗したかは特に記述されていなかったがcloudwatchでDynamoDBの状態を見てみるとスループットが足りなくなっていました。
ちなみにスループットが足りない場合は次のようなエラーが出ます。
Caused by: com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputExceededException
イメージとしては先に「TransactionRolledBackException」が発生し、しばらくすると「ProvisionedThroughputExceededException」が出てくる形です。
DynamoDBの仕組みとして、スループットを超えたら処理を全くしてくれないように見えます。
スループットを大きく超えた場合はリクエスト自体を受け付けてくれないが、ギリギリの場合はリクエストを受け付けた上でトランザクションの途中でもエラーとなります。
それでときおりロールバック処理が行われているのかもしれません。
つまり、「TransactionRolledBackException」が発生した際はcloudWatchを見て、スループットが設定値を超えていそうならスループットが足りていないので上げておく必要があります。
補足として1つ、DynamoDBの設定画面で見るMetricsではスループットの消費量が時間平均で表示されます。このためMetrics上では超えていなくても秒単位で見ると超えているケースが考えられます。
TransactionRolledBackExceptionエラーが出ていた場合はCloudWatchの方でMax値を確認しておくのが無難といえます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA