Aurora PostgreSQL の shared_buffers DB パラメータのデフォルト値が Amazon RDS PostgreSQL のデフォルト値よりも大きいのはなぜですか ?

最終更新日: 2020 年 1 月 13 日

Amazon Aurora PostgreSQL の shared_buffers DB パラメータのデフォルト値が、Amazon Relational Database Service (Amazon RDS) での PostgreSQL のデフォルト値よりも大きいのはなぜですか ?

解決方法

PostgreSQL では、使用開始時に shared_buffers がシステム内で使用するメモリの割合は、25% が適切だと推奨しています。とはいえ、この値はワークロードからの需要に対応して変更が可能です。ワークロードに対応する適切な shared_buffers の値については、 リソース消費に関する PostgreSQL ドキュメントでご確認ください。

PostgreSQL では、キャッシュ (ダブルバッファリング) を使用する際に、オペレーティングシステムに大きく依存しています。これは、40% 以上の RAM を shared_buffers に割り当てると、より小さい値を割り当てた場合に比べ、パフォーマンスの向上が見込みにくくなることを意味します。

RDS DB インスタンスの場合には、DB パラメータグループでのデフォルト値が全メモリの 25% に設定されています。しかし、Aurora DB インスタンスの場合は、DB パラメータグループでのデフォルト値は全メモリの 75% に設定されます。これは、Aurora PostgreSQL がダブルバッファリングを使用しておらず、ファイルシステムキャッシュが必要ないためです。つまり、Aurora PostgreSQL では shared_buffers を増やしてパフォーマンスの向上がはかれることになります。Aurora PostgreSQL を使用する場合は、shared_buffers DB パラメータのデフォルト値には、75% を設定することがベストプラクティスです。この値が小さいと、データページが使用可能なメモリが削減されるので、Aurora ストレージサブシステムの I/O が増加されたときに、パフォーマンスの低下を生じる可能性があります。詳細については「Amazon Aurora PostgreSQL リファレンス」をご参照ください。

注意: 一部のワークロードでは、 shared_buffers パラメータの値を小さくする必要がある場合があります。この値を減らす必要が生じる事例としては、ワークロードがデフォルト設定よりも多くの接続を受け入れる場合や、より大きな work_memmaintenance_work_mem が頻繁に使用される場合などが挙げられます。ただし、 shared_buffers の値を小さくすることは、キャッシュヒット率を低くすることにつながります。その結果、ストレージへのアクセスが頻繁になるため、データベースページに対するアクセスレイテンシーが増加することがあります。