RDS Aurora(PostgreSQL互換)のwalパラメータの有効性について

RDS Aurora(PostgreSQL互換)のwalパラメータの有効性について
目次

2018/2月頃から東京リージョンでも、RDS Aurora(PostgreSQL互換)が使用可能 になりました。

今回は RDS Aurora(PostgreSQL互換) のパラメータチューニング中に、ふと疑問に思ったことを書きます。

なお、エンジンバージョンは aurora-postgresql9.6 として以下はまとめていきます。

WALを使ったレプリケーション

PostgreSQLには WAL(Write Ahead Logging)という仕組みがあります。いわゆるトランザクションログのことを指しますが、 通常のPostgreSQLでクラスタを組んだ場合には、WALのデータをスレーブが同期することでレプリケーションを可能にしています。

Auroraは共有ストレージ

レプリケーションを実現するためにWALが必要、と先ほど述べましたが、 一方で今回使うRDS Auroraはストレージノード自体をWriter/Reader機で共有するため、 「そもそも、WALを使ったレプリケーションはサポートされているのか?」 と考えたわけです。

加えて、RDS Auroraのパラメータグループを確認してみると、指定可能なパラメータにWALに纏わるものが含まれます。

例えば、以下のようなパラメータが該当します。

  • wal_receiver_status_interval
  • wal_receiver_timeout
  • wal_sender_timeout

結局、WALを使ってレプリケーションをしているか否か、よくわかりません。

サポートに聞いてみよう

というわけで、AWSのサポートに問い合わせを行いました。

結論を言うと

  • 通常利用の限りでは wal_receiver_status_interval wal_receiver_timeout wal_sender_timeout は調整しても 使われない
    • WAL Sender/Receiver等の プロセスが起動していない ため
    • つまり、WALによるレプリケーションは行わない(Aurora独自のレプリケーションの仕組みを使う)
  • RDS for PostgreSQLからRDS Aurora(PostgreSQL互換)をリードレプリカとして作成する場合はwal_receiver_status_interval wal_receiver_timeout wal_sender_timeout が有効になる
    • PostgreSQLのWAL Sender/Receiverプロセスが起動し、PostgreSQLの方式にてレプリケーションが行われるため

まとめ

RDS for PostgreSQLからAuroraをレプリカに複製する場合にはWALが有効になるということでした。これは考慮していませんでした。 通常のAuroraクラスターのユースケースではそもそもWALのプロセスが動作していないため、チューニング時には気にしないのが良さそうです。

また一つ賢くなりました。