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のプロセスが動作していないため、チューニング時には気にしないのが良さそうです。
また一つ賢くなりました。