利用可能なトランザクション ID の上限に達し、エラーが発生したときの対処方法

Redshift にて利用可能なトランザクション ID の上限はおよそ 20 億程度です。上限に達した際には、Classic Resize によりトランザクション ID をリセットする必要があります。
2022.02.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Redshift クラスターにてクエリを実行した際に下記のエラーが発生しました。

ERROR: This cluster has reached the limit for new query transaction IDs and will no longer accept new queries. To reset the transaction ID, perform classic resize operation on your cluster. Contact AWS Support if you need assistance.

原因は何でしょうか。また、対処方法を教えてください。

どう対応すればいいの?

当該エラーは、Redshift クラスターにて利用可能なトランザクション ID の上限に達したときに発生するものです。
Redshift では利用可能なトランザクション ID がおよそ 20 億程度との上限があり、こちらはノード構成に依存するものではなく Redshift 共通の上限です。
対処としてトランザクション ID をリセットする必要がありますが、その方法は現状、従来のサイズ変更(Classic Resize)[1]のみであるため、こちらをご実施ください。
なお Classic Resize につきましては、AWS CLI の resize-cluster コマンド[2]実行時にサイズ変更前のノード数、ノードタイプを指定することでノード構成は変更することなく、Classic Resize の実行が可能です。 具体的なコマンドとしては以下となりますので、Classic Resize によりノード構成を変更したくない場合には以下のようなオプション指定によるコマンド実行をお試しください。
$ aws redshift resize-cluster --cluster-identifier <クラスター識別子> --classic --node-type <サイズ変更前のノードタイプ> --number-of-nodes <サイズ変更前のノード数>

現在の利用数を確認する方法

Redshift クラスターにて利用されているトランザクション ID につきましては、システムテーブルに記録される xid の値からご確認頂くことが可能です。 そのため、例えば SVL_STATEMENTTEXT[3] に記録されているレコードの xid の最大値を定期的にご確認頂くことで、その時点でどの程度のトランザクション ID が利用されているか把握できます。 必要に応じてこちらの対応をご検討頂けますと幸いです。

参考情報

[1] Amazon Redshift でのクラスター管理の概要

[2] resize-cluster

[3] SVL_STATEMENTTEXT