[アップデート] Amazon RDS for PostgreSQL のプレビュー環境で PostgreSQL 16 Beta 2 が利用可能になりました

2023.07.07

いわさです。

先週 PostgreSQL 16 Beta 2 がリリースされています。
PostgreSQL 16 では様々な新機能が追加されていたりパフォーマンス向上がされています。また、旧バージョンと互換性の無い機能もいくつか含まれています。

将来的に RDS for PostgreSQL でも PostgreSQL 16 が利用可能になりますが、運用中・開発中のアプリケーションの移行時の影響点や、パフォーマンスなどをいち早く評価したいという方も多いと思います。

Amazon RDS ではオハイオリージョンでのみ利用可能な「プレビュー環境」がこれまでも提供されています。
本日 PostgreSQL 16 Beta 2 がプレビュー環境で利用可能になったことがアナウンスされました。

プレビュー利用にあたっての注意点

以前 PostgreSQL 15 RC2 の際にもプレビュー環境が利用出来ましたが、同様に利用にあたっての注意事項があります。

  • 本番環境として使用出来ない
    • インスタンスは最大 60 日間保持され、保持期間が経過すると自動的に削除される
    • AWS サポートからサポートを受けることが出来ない(AWS が管理する Q&A コミュニティである AWS re:Post に質問を投稿するなどになる)
  • 非プレビュー環境とのデータインポート・エクスポート方法
    • RDS スナップショットの取得は可能だが、非プレビュー環境にコピーすることは出来ない
    • PostgreSQL 標準のダンプ/ロード機能を使うことは可能
  • 機能や構成に制限がある
    • 最新世代のインスタンスクラスのみがサポートされている(M6i、R6i、M6g、M5、T3、R6g、R5)
    • 汎用 SSD およびプロビジョンド IOPS SSD ストレージのみ使用可能
    • クロスリージョンスナップショットコピー、クロスリージョンのリードレプリカはサポートされてない

作ってみる

あとはプレビュー環境を作成して普通に接続するだけなので大したことは何もないのですが、せっかくなので作成して新機能の確認まで試してみたいと思います。

まず、東京リージョンからは次のボタンからプレビュー環境に移動することが出来ます。
オハイオリージョンのプレビュー環境用の RDS コンソールへ遷移されます。

16.20230626-R1がありますね。

接続してみる

接続してみるとserver 16beta2と表示されていることが確認出来ますね。

% psql -h hoge0707database.ca0mg86saazc.us-east-2.rds-preview.amazonaws.com -U postgres
Password for user postgres: 
psql (14.8 (Homebrew), server 16beta2)
WARNING: psql major version 14, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

新機能を適当に試してみる

次の PostgreSQL 16 のリリースノートから適当に新機能をいくつか試してみます。

pg_stat_io

新しく搭載される予定のビューであるpg_stat_ioを眺めてみます。 pg_stat_ioでクラスターの I/O 統計情報を確認することが出来ます。

postgres=> select backend_type, context, reads, read_time, writes, write_time, hits from pg_stat_io;
    backend_type     |  context  | reads |     read_time      | writes |     write_time     | hits  
---------------------+-----------+-------+--------------------+--------+--------------------+-------
 autovacuum launcher | bulkread  |     0 |                  0 |      0 |                  0 |     0
 autovacuum launcher | normal    |     3 |                  0 |      0 |                  0 |     0
 autovacuum worker   | bulkread  |     0 |                  0 |      0 |                  0 |     0
 autovacuum worker   | normal    |    14 |              0.062 |      0 |                  0 | 15607
 autovacuum worker   | vacuum    |    13 |              0.038 |      0 |                  0 |   272
 client backend      | bulkread  |  1741 | 2.6710000000000003 |      0 |                  0 |   177
 client backend      | bulkwrite |     0 |                  0 |      0 |                  0 |     0
 client backend      | normal    |  1009 | 3.3970000000000002 |      0 |                  0 | 28678
 client backend      | vacuum    |     0 |                  0 |      0 |                  0 |     0
 client backend      | normal    |     0 |                  0 |      0 |                  0 |     0
 background worker   | bulkread  |     0 |                  0 |      0 |                  0 |     0
 background worker   | bulkwrite |     0 |                  0 |      0 |                  0 |     0
 background worker   | normal    |     0 |                  0 |      0 |                  0 |     0
 background worker   | vacuum    |     0 |                  0 |      0 |                  0 |     0
 background worker   | normal    |     0 |                  0 |      0 |                  0 |     0
 background writer   | normal    |       |                    |      0 |                  0 |      
 checkpointer        | normal    |       |                    |   1276 | 6.2170000000000005 |      
 standalone backend  | bulkread  |     0 |                  0 |      0 |                  0 |     0
 standalone backend  | bulkwrite |     0 |                  0 |      0 |                  0 |     7
 standalone backend  | normal    |   535 |                  0 |   1038 |                  0 | 99030
 standalone backend  | vacuum    |    10 |                  0 |      0 |                  0 |   944
 startup             | bulkread  |     0 |                  0 |      0 |                  0 |     0
 startup             | bulkwrite |     0 |                  0 |      0 |                  0 |     0
 startup             | normal    |     0 |                  0 |      0 |                  0 |     0
 startup             | vacuum    |     0 |                  0 |      0 |                  0 |     0
 walsender           | bulkread  |     0 |                  0 |      0 |                  0 |     0
 walsender           | bulkwrite |     0 |                  0 |      0 |                  0 |     0
 walsender           | normal    |     0 |                  0 |      0 |                  0 |     0
 walsender           | vacuum    |     0 |                  0 |      0 |                  0 |     0
 walsender           | normal    |     0 |                  0 |      0 |                  0 |     0
(30 rows)

postgres=>

ドキュメントによると evictions の数値が高い場合に共有バッファを増やすとか、チューニングのトリガーとして使うことが出来るようです。

array_sample

配列から指定した個数サンプリングするarray_sample関数が追加されているので試してみます。

postgres=> SELECT array_sample('{1,2,3,4,5}'::int[], 4);
 array_sample 
--------------
 {1,3,2,5}
(1 row)

postgres=> SELECT array_sample('{1,2,3,4,5}'::int[], 3);
 array_sample 
--------------
 {3,1,5}
(1 row)

postgres=> SELECT array_sample('{1,2,3,4,5}'::int[], 2);
 array_sample 
--------------
 {1,5}
(1 row)

参考:PostgreSQL: Documentation: 16: E.1. Release 16

さいごに

本日は Amazon RDS for PostgreSQL のプレビュー環境で PostgreSQL 16 Beta 2 が利用可能になったので構築して新しい機能を試しに使ってみました。

RDS for PostgreSQL 16 の正式リリースはまだ未定ですが、アプリケーションバージョンアップの計画を建てたり、新機能でボトルネックを解消したい場合などで早めに評価したい方はプレビュー環境をお試しください。