SlideShare a Scribd company logo
© 2022, Amazon Web Services, Inc. or its affiliates.
© 2022, Amazon Web Services, Inc. or its affiliates.
PostgreSQL開発者が
PostgreSQL15の新機能を
徹底解説
澤田 雅彦 (Sawada Masahiko)
Senior Software Development Engineer
AWS
© 2022, Amazon Web Services, Inc. or its affiliates.
PostgreSQL 15 が10/15にリリース!
189個
の新機能
(229)
2472個
のコミット
(2702)
412人
の開発者
(415)
34人
の日本人開発者
(36)
© 2022, Amazon Web Services, Inc. or its affiliates.
PostgreSQL 10がEOL
3
© 2022, Amazon Web Services, Inc. or its affiliates.
Index
• SQL
• Logical Replicationの改善
• WAL、リカバリ、バックアップ
• 性能
• モニタリング
4
© 2022, Amazon Web Services, Inc. or its affiliates.
本発表について
• 本発表に掲載している検証結果は以下の環境で取得したものです
• 環境や条件などによっては、異なる結果となる可能性があります
• AWS EC2 m6ld.metal, RHEL8.6, 128 vCPUs, 512GB RAM, SSD
5
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGE
• ソーステーブルとターゲットテーブルの結合条件を元にテーブルに対して、
INSERT/UPDATE/DELETEを実行できる
• SQL標準
6
user_id last_login
100 2022/9/26 11:00
200 2022/7/13 13:00
user_id login_at
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
user_id last_login
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後)
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGE
7
user_id last_login
100 2022/9/26 11:00
200 2022/7/13 13:00
user_id login_at
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
user_id last_login
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後)
MERGE INTO user_history u USING login_history l
ON (u.user_id = l.user_id)
WHEN MATCHED THEN
UPDATE SET last_login = l.login_at
WHEN NOT MATCHED THEN
INSERT VALUES (l.user_id, l.login_at);
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGE
8
user_id last_login
100 2022/9/26 11:00
200 2022/7/13 13:00
user_id login_at
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
user_id last_login
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後)
MERGE INTO user_history u USING login_history l
ON (u.user_id = l.user_id)
WHEN MATCHED THEN
UPDATE SET last_login = l.login_at
WHEN NOT MATCHED THEN
INSERT VALUES (l.user_id, l.login_at);
user_idが一致する行があった場合の動作
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGE
9
user_id last_login
100 2022/9/26 11:00
200 2022/7/13 13:00
user_id login_at
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
user_id last_login
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後)
MERGE INTO user_history u USING login_history l
ON (u.user_id = l.user_id)
WHEN MATCHED THEN
UPDATE SET last_login = l.login_at
WHEN NOT MATCHED THEN
INSERT VALUES (l.user_id, l.login_at);
user_idが一致する行がなかった場合の動作
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGEで指定できるアクション
• INSERT
• UPDATE
• DELETE
• DO NOTHING
10
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGEの注意点
• 各行は0 or 1行と結合できる場合のみ動く
• 到達しない条件がある場合はシンタックスエラー
(ERROR: unreachable WHEN clause
specified after unconditional WHEN
clause)
11
11
user_id last_login
100 2022/9/26 11:00
200 2022/7/13 13:00
user_id login_at
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
100 2022/10/31 12:00
user_id last_login
100 2022/10/30 11:50
200 2022/10/14 10:40
300 2022/10/24 15:00
login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後)
WHEN MATCHED THEN
UPDATE SET last_login = l.login_at
WHEN NOT MATCHED THEN
INSERT VALUES (l.user_id, l.login_at);
WHEN MATCHED AND user_id = 100 THEN
DO NOTHING;
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGEとINSERT … ON CONFLICT
• どちらも「格納されている行に応じて動作を切り替える事」が可能
• MERGEはUPDATEだけでなく、INSERT/DELETEを指定することも可能
• MERGEとINSERT … ON CONFLICTは単純には置き換えられない
• 同時実行性
• 性能
• トリガ
12
© 2022, Amazon Web Services, Inc. or its affiliates.
MERGEの性能
13
0
2000
4000
6000
8000
10000
12000
INSERT … ON CONFLICT MERGE
300万件UPDATEした場合(ms)
0
1000
2000
3000
4000
5000
6000
7000
INSERT … ON CONFLICT MERGE
300万件INSERTした場合(ms)
• 「INSERTしたケース」と「コンフリクトしたからUPDATEしたケース」で
INSERT … ON CONFLICTとMERGEの性能を比較
© 2022, Amazon Web Services, Inc. or its affiliates.
Logical Replicationとは
• データベースの一部を他のデータベースに複製する機能
• WALをデコードした内容を送信する
• Publisher(送信側)とSubscriber(受信側)
• PUBLICATIONとSUBSCRIPTION
• CDC、BI、メジャーバージョンアップ、マルチマスター
14
© 2022, Amazon Web Services, Inc. or its affiliates.
CREATE SUBSCRIPTION … WITH (two_phase = on)
• 2相コミットの情報が複製可能になった
• Off(デフォルト)だとPublisherで2相コミットしても、通常のトランザクショ
ンとして複製される
• 未コミット/未ロールバックのトランザクションがSubscriberにも残るように
なるので注意
15
© 2022, Amazon Web Services, Inc. or its affiliates.
行フィルターと列フィルター
CREATE PUBLICATION pub1 FOR TABLE tbl (id, user), tbl2;
CREATE PUBLICATION pub2 FOR TABLE tbl WHERE (id % 2 = 0);
CREATE PUBLICATION pub3 FOR TABLE tbl (id, user) WHERE (id % 2 = 0);
16
• 送信側でデータをフィルタリング
• 同時に指定することも可能
© 2022, Amazon Web Services, Inc. or its affiliates.
スキーマ単位で送信テーブルを指定
• これまではテーブルを複数指定するか、ALL TABLESで全テーブル指定のみ
• 指定したスキーマ内の全テーブルを指定可能になった
• スキーマに新たに追加されるテーブルも対象
17
CREATE PUBLICATION pub1 FOR TABLE tbl;
CREATE PUBLICATION pub2 FOR ALL TABLES;
CREATE PUBLICATION pub3 FOR TABLES IN SCHEMA s1;
© 2022, Amazon Web Services, Inc. or its affiliates.
ALTER SUBSCRIPTION … SKIP
• より便利になった衝突解決のための新しい手段
• 衝突は様々な場面で起こり得る
• 例)Subscriberで同時にINSERTして主キー違反
• 衝突が解決するまでLogical Replicationはリトライし続ける
• 衝突を解決するには・・・
• 衝突している行を削除/更新
• Logical Replicationの開始地点を進める
18
© 2022, Amazon Web Services, Inc. or its affiliates.
ALTER SUBSCRIPTION … SKIP
ERROR: duplicate key value violates unique constraint "tbl_pkey"
DETAIL: Key (c)=(1) already exists.
CONTEXT: processing remote data for replication origin "pg_16389" during
"INSERT" for replication target relation "public.tbl" in transaction 740
finished at 0/1554338
サーバログ
• エラーになった操作、テーブル名、トランザクションID、トランザクション
が完了するLSNがサーバログに書かれる
• この情報を元に特定のトランザクションをスキップする
© 2022, Amazon Web Services, Inc. or its affiliates.
ALTER SUBSCRIPTION … SKIP
ERROR: duplicate key value violates unique constraint "tbl_pkey"
DETAIL: Key (c)=(1) already exists.
CONTEXT: processing remote data for replication origin "pg_16389" during "INSERT"
for replication target relation "public.tbl" in transaction 740 finished at
0/1554338
20
=# ALTER SUBSCRIPTION sub SKIP (lsn = ‘0/1554338’);
サーバログ
SQL
LOG: logical replication starts skipping transaction at LSN 0/1554338
LOG: logical replication completed skipping transaction at LSN 0/1554338
サーバログ
© 2022, Amazon Web Services, Inc. or its affiliates.
pg_basebackupの強化
• データベースクラスタ全体の物理バックアップを取得するツール
• サーバ側での圧縮(gzip, lz4, zstd)、クライアント側(gzip, lz4, zstd)での
圧縮をサポート
例)--compress=server-zstd, --compress=client-lz4,
--compress=server-zstd:level=9,workers=4
• バックアップの出力先(サーバ or クライアント)を指定可能に
例)--target=server:/some/path, --target=client
21
© 2022, Amazon Web Services, Inc. or its affiliates.
バックアップサイズとバックアップ取得時間を比較
• バックアップサイズは、圧縮方法、圧縮レベルを変えて検証
• バックアップ時間は、圧縮方法、並列数を変えて検証
• 同一サーバ上からpg_basebackupを実行したためサーバ側圧縮のみ実施
22
0
10
20
30
40
50
60
70
80
90
100
none server:zstd server:lz4 server:gzip
バックアップ時間(s)
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
none server:zstd server:lz4 server:gzip
バックアップサイズ(MB)
© 2022, Amazon Web Services, Inc. or its affiliates.
contrib/basebackup_to_shell
• 新しいバックアップ先としてshellを指定できるようになる
例) --target=shell:
• shared_preload_libraries = ‘basebackup_to_shell’
• basebackup_to_shell.command = ‘backup.sh %f %d’
23
© 2022, Amazon Web Services, Inc. or its affiliates.
[非互換] 排他バックアップが廃止
• バックアップには排他モード・非排他モードがあった
• SELECT pg_start_backup(‘label’, exclusive_backup => ‘true’);
• 排他モードでバックアップ取得中にサーバが再起動すると起動不可になる可
能性がある
• 排他モードは廃止
• pg_start_backup()とpg_stop_backup()は、pg_backup_start()と
pg_backup_stop()に関数名が変更
• 独自バックアップスクリプトで排他モードを使っている場合は、非排他モー
ドに移行する、もしくはpg_basebackupを利用する
24
© 2022, Amazon Web Services, Inc. or its affiliates.
archive_library
• WALアーカイブにライブラリを指定可能になった
• これまではarchive_commandにシェルコマンドを指定
• archiveプロセスが状態を持ちながら動作可能
• シェルコマンド起動(system()関数)のオーバーヘッドも省ける
• リファレンス実装としてcontrib/basic_archiveが追加
(test ! -f /path/to/dest && cp /path/to/src /path/to/des)
25
© 2022, Amazon Web Services, Inc. or its affiliates.
wal_compression = [off, on, pglz, lz4, zstd]
• WALの中のFull Page Imageを圧縮する
• lz4とzstdが新しく追加
• デフォルトはoff
26
0
200
400
600
800
1000
1200
1400
1600
off pglz lz4 zstd
WALサイズ
(3GBテーブルを全ページアップデート、FPIの割合約70%)
© 2022, Amazon Web Services, Inc. or its affiliates.
wal_compression = [off, on, pglz, lz4, zstd]
27
0
20000
40000
60000
80000
100000
120000
0 100 200 300 400 500 600
TPS (pgbench -T 300 -M prepared, sf:300)
off pglz lz4 zstd
© 2022, Amazon Web Services, Inc. or its affiliates.
contrib/pg_walinspect
• pg_waldumpコマンド相当の情報にSQLでアクセスできる
28
=# select * from pg_get_wal_record_info('1/A4619C00');
-[ RECORD 1 ]----+--------------------------------------------------------------------------------------
-------------------------------------
start_lsn | 1/A4619C10
end_lsn | 1/A4619E38
prev_lsn | 1/A4619BD0
xid | 774
resource_manager | Heap
record_type | LOCK
record_length | 545
main_data_length | 8
fpi_length | 484
description | off 46: xid 774: flags 0x01 LOCK_ONLY EXCL_LOCK
block_ref | blkref #0: rel 1663/5/16462 fork main blk 114 (FPW); hole: offset: 268, length: 116,
compression saved: 7592, method: zstd
© 2022, Amazon Web Services, Inc. or its affiliates.
contrib/pg_walinspect
• pg_waldumpコマンド相当の情報にSQLでアクセスできる
29
=# select * from pg_get_wal_stats('1/A45F7758', '1/B0115CB0') where "resource_manager/record_type" in ('Heap', 'Btree');
-[ RECORD 1 ]----------------+-------------------
resource_manager/record_type | Heap
count | 400000
count_percentage | 66.66533335999947
record_size | 46147442
record_size_percentage | 78.61281556682036
fpi_size | 78373262
fpi_size_percentage | 57.97230604301556
combined_size | 124520704
combined_size_percentage | 64.2213337278326
-[ RECORD 2 ]----------------+-------------------
resource_manager/record_type | Btree
count | 200000
count_percentage | 33.33266667999973
record_size | 12554093
record_size_percentage | 21.386073742022592
fpi_size | 56814156
fpi_size_percentage | 42.02514422849502
combined_size | 69368249
combined_size_percentage | 35.77655222013835
© 2022, Amazon Web Services, Inc. or its affiliates.
contrib/pg_walinspect
• pg_waldumpコマンド相当の情報にSQLでアクセスできる
30
=# select (sum(fpi_size) / sum(combined_size)) as fpi_ratio
from pg_get_wal_stats('1/A45F7758', '1/B0115CB0’);
fpi_ratio
------------------------
0.69724450466641785596
(1 row)
© 2022, Amazon Web Services, Inc. or its affiliates.
log_destination = jsonlog
• json形式でサーバログが出力可能になった
• logging_collector = onにする必要がある
• .jsonファイルにログが書かれる
31
{"timestamp":"2022-11-08 10:13:41.624
","pid":2934287,"session_id":"6369ad45.2cc60f","line_num":6,"session_start":"2022-11-08 10:13:41
JST","txid":0,"error_severity":"LOG","message":"database system is ready to accept
","backend_type":"postmaster","query_id":0}
{"timestamp":"2022-11-08
10:14:09.001","user":"masahiko","dbname":"postgres","pid":2934383,"remote_host":"[local]","session_id":"6369ad5e.2cc6
6f","line_num":1,"ps":"SELECT","session_start":"2022-11-08 10:14:06
","vxid":"3/2","txid":0,"error_severity":"ERROR","state_code":"42703","message":"column "a" does not
","statement":"select a;","cursor_position":8,"application_name":"psql","backend_type":"client backend","query_id":0}
© 2022, Amazon Web Services, Inc. or its affiliates.
log_destination = jsonlog
32
© 2022, Amazon Web Services, Inc. or its affiliates.
稼働統計情報が共有メモリベースに変更
• サーバの稼働統計情報(pg_stat_xxxで見れる情報)≠オプティマイザの統計
情報
• これまでは専用プロセス(stats collector)が集めていた
• 各プロセスはUDPでstats collectorに統計情報を送信
• 統計情報はファイルで共有
• これからは共有メモリ上で管理。stats collectorプロセスは廃止。
• サーバクラッシュ後に統計情報がリセットされる挙動はこれまでと同じ
33
© 2022, Amazon Web Services, Inc. or its affiliates.
単一列のソート性能が改善
• 単一列のソート時に扱うデータ量を削減することで、ソート性能が改善
• EXISTSやNOT EXISTSの時によく利用される
• 約700MBのテーブルでv14とv15の性能を比較
34
0
0.5
1
1.5
2
2.5
3
v14 v15
実行時間(ms)
© 2022, Amazon Web Services, Inc. or its affiliates.
その他の性能向上
• Parallel SELECT DISTINCT
• postgres_fdwがparallel commitをサポート
35
© 2022, Amazon Web Services, Inc. or its affiliates.
最後に
• PG15では、MERGE、ロジカルレプリケーションの強化、pg_basebackupの強
化を含む約200個の新しい改善が導入された
• PostgreSQL 10は昨日(11/10)にリリースされた10.23でEOL
• PostgreSQL 15.1も同時にリリースされた
• これバグかな?と思ったら
• もっと知りたい!
36
© 2022, Amazon Web Services, Inc. or its affiliates.
参考資料
• PostgreSQL 15.0 Documentation
(https://www.postgresql.org/docs/15/index.html)
• PostgreSQL 15 Release Note
(https://www.postgresql.org/docs/15/release-15.html)
• 篠田の虎の巻「PostgreSQL 15 Beta 1 新機能検証結果」
(https://h50146.www5.hpe.com/products/software/oe/linux/mainstream/support/lcc/pdf/PostgreSQL_15_Beta_1_New_Features_ja_2022052
4-1.pdf)
• PostgreSQL 15検証レポート – SRA OSS
(https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2022/10/pg15_report_20221020.pdf)
• オンライン物理バックアップの排他モードと非排他モードに ついて
(https://www.slideshare.net/nttdata-tech/postgresql-backup-mode-pgunconf34-nttdata)
• PostgreSQL の INSERT ON CONFLICT と MERGE の簡易性能比較
(https://qiita.com/fujii_masao/items/462bac9f6a107d6134c4)
• PostgreSQL 15 Statistics
(http://peter.eisentraut.org/blog/2022/10/25/postgresql-15-statistics)
• Speeding up sort performance in PostgreSQL 15
(https://www.citusdata.com/blog/2022/05/19/speeding-up-sort-performance-in-postgres-15/)
• Looking ahead at PostgreSQL 15
(https://www.slideshare.net/jkatz05/looking-ahead-at-postgresql-15)
• pg_basebackup could not set compression worker count - unsupported parameter
(http://rhaas.blogspot.com/2022/11/pgbasebackup-could-not-set-compression.html)
37
© 2022, Amazon Web Services, Inc. or its affiliates.
Thank you!
© 2022, Amazon Web Services, Inc. or its affiliates.
Masahiko Sawada
@masahiko_sawada
38

More Related Content

PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PDF
PostgreSQL 15 開発最新情報
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQL 15 開発最新情報
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL: XID周回問題に潜む別の問題

What's hot (20)

PDF
あなたの知らないPostgreSQL監視の世界
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
Inside vacuum - 第一回PostgreSQLプレ勉強会
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PPTX
WiredTigerを詳しく説明
PDF
いまさら聞けないPostgreSQL運用管理
PDF
Vacuum徹底解説
PDF
Where狙いのキー、order by狙いのキー
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
あなたの知らないPostgreSQL監視の世界
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA と PostgreSQL が挑んだ総力戦
Inside vacuum - 第一回PostgreSQLプレ勉強会
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
WiredTigerを詳しく説明
いまさら聞けないPostgreSQL運用管理
Vacuum徹底解説
Where狙いのキー、order by狙いのキー
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
トランザクション処理可能な分散DB 「YugabyteDB」入門(Open Source Conference 2022 Online/Fukuoka 発...
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
Ad

Similar to PostgreSQL 15の新機能を徹底解説 (20)

PDF
Chugoku db 17th-postgresql-9.6
PDF
PostgreSQL10徹底解説
PDF
Hackers Champloo 2016 postgresql-9.6
PDF
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PDF
Kof2016 postgresql-9.6
PDF
PostgreSQL 12の話
PDF
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
PDF
KOF2015 PostgreSQL 9.5
PDF
Postgre sql update_20170310
PDF
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PDF
PostgreSQL 9.6 新機能紹介
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PDF
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
PDF
20171106 ntt-tx-postgre sql-10
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL13 新機能紹介
PDF
20171028 osc-nagaoka-postgre sql-10
PDF
PostgreSQL9.3新機能紹介
PDF
Postgre sql9.3新機能紹介
PDF
Ntt tx-study-postgre sql-10
Chugoku db 17th-postgresql-9.6
PostgreSQL10徹底解説
Hackers Champloo 2016 postgresql-9.6
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
Kof2016 postgresql-9.6
PostgreSQL 12の話
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
KOF2015 PostgreSQL 9.5
Postgre sql update_20170310
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 9.6 新機能紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
20171106 ntt-tx-postgre sql-10
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL13 新機能紹介
20171028 osc-nagaoka-postgre sql-10
PostgreSQL9.3新機能紹介
Postgre sql9.3新機能紹介
Ntt tx-study-postgre sql-10
Ad

More from Masahiko Sawada (20)

PDF
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
PDF
Transparent Data Encryption in PostgreSQL
PDF
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
PDF
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
PDF
Bloat and Fragmentation in PostgreSQL
PDF
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
PDF
今秋リリース予定のPostgreSQL11を徹底解説
PDF
Vacuum more efficient than ever
PDF
Vacuumとzheap
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
Parallel Vacuum
PDF
PostgreSQLでスケールアウト
PDF
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
PDF
FDW-based Sharding Update and Future
PDF
What’s new in 9.6, by PostgreSQL contributor
PDF
pg_bigmと類似度検索
PDF
pg_bigmを触り始めた人に伝えたいこと
PDF
Introduction VAUUM, Freezing, XID wraparound
PDF
XID周回問題に潜む別の問題
PPTX
PostgreSQL共有バッファと関連ツール
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
Transparent Data Encryption in PostgreSQL
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
Transparent Data Encryption in PostgreSQL and Integration with Key Management...
Bloat and Fragmentation in PostgreSQL
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
今秋リリース予定のPostgreSQL11を徹底解説
Vacuum more efficient than ever
Vacuumとzheap
アーキテクチャから理解するPostgreSQLのレプリケーション
Parallel Vacuum
PostgreSQLでスケールアウト
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
FDW-based Sharding Update and Future
What’s new in 9.6, by PostgreSQL contributor
pg_bigmと類似度検索
pg_bigmを触り始めた人に伝えたいこと
Introduction VAUUM, Freezing, XID wraparound
XID周回問題に潜む別の問題
PostgreSQL共有バッファと関連ツール

PostgreSQL 15の新機能を徹底解説

  • 1. © 2022, Amazon Web Services, Inc. or its affiliates. © 2022, Amazon Web Services, Inc. or its affiliates. PostgreSQL開発者が PostgreSQL15の新機能を 徹底解説 澤田 雅彦 (Sawada Masahiko) Senior Software Development Engineer AWS
  • 2. © 2022, Amazon Web Services, Inc. or its affiliates. PostgreSQL 15 が10/15にリリース! 189個 の新機能 (229) 2472個 のコミット (2702) 412人 の開発者 (415) 34人 の日本人開発者 (36)
  • 3. © 2022, Amazon Web Services, Inc. or its affiliates. PostgreSQL 10がEOL 3
  • 4. © 2022, Amazon Web Services, Inc. or its affiliates. Index • SQL • Logical Replicationの改善 • WAL、リカバリ、バックアップ • 性能 • モニタリング 4
  • 5. © 2022, Amazon Web Services, Inc. or its affiliates. 本発表について • 本発表に掲載している検証結果は以下の環境で取得したものです • 環境や条件などによっては、異なる結果となる可能性があります • AWS EC2 m6ld.metal, RHEL8.6, 128 vCPUs, 512GB RAM, SSD 5
  • 6. © 2022, Amazon Web Services, Inc. or its affiliates. MERGE • ソーステーブルとターゲットテーブルの結合条件を元にテーブルに対して、 INSERT/UPDATE/DELETEを実行できる • SQL標準 6 user_id last_login 100 2022/9/26 11:00 200 2022/7/13 13:00 user_id login_at 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 user_id last_login 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後)
  • 7. © 2022, Amazon Web Services, Inc. or its affiliates. MERGE 7 user_id last_login 100 2022/9/26 11:00 200 2022/7/13 13:00 user_id login_at 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 user_id last_login 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後) MERGE INTO user_history u USING login_history l ON (u.user_id = l.user_id) WHEN MATCHED THEN UPDATE SET last_login = l.login_at WHEN NOT MATCHED THEN INSERT VALUES (l.user_id, l.login_at);
  • 8. © 2022, Amazon Web Services, Inc. or its affiliates. MERGE 8 user_id last_login 100 2022/9/26 11:00 200 2022/7/13 13:00 user_id login_at 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 user_id last_login 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後) MERGE INTO user_history u USING login_history l ON (u.user_id = l.user_id) WHEN MATCHED THEN UPDATE SET last_login = l.login_at WHEN NOT MATCHED THEN INSERT VALUES (l.user_id, l.login_at); user_idが一致する行があった場合の動作
  • 9. © 2022, Amazon Web Services, Inc. or its affiliates. MERGE 9 user_id last_login 100 2022/9/26 11:00 200 2022/7/13 13:00 user_id login_at 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 user_id last_login 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後) MERGE INTO user_history u USING login_history l ON (u.user_id = l.user_id) WHEN MATCHED THEN UPDATE SET last_login = l.login_at WHEN NOT MATCHED THEN INSERT VALUES (l.user_id, l.login_at); user_idが一致する行がなかった場合の動作
  • 10. © 2022, Amazon Web Services, Inc. or its affiliates. MERGEで指定できるアクション • INSERT • UPDATE • DELETE • DO NOTHING 10
  • 11. © 2022, Amazon Web Services, Inc. or its affiliates. MERGEの注意点 • 各行は0 or 1行と結合できる場合のみ動く • 到達しない条件がある場合はシンタックスエラー (ERROR: unreachable WHEN clause specified after unconditional WHEN clause) 11 11 user_id last_login 100 2022/9/26 11:00 200 2022/7/13 13:00 user_id login_at 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 100 2022/10/31 12:00 user_id last_login 100 2022/10/30 11:50 200 2022/10/14 10:40 300 2022/10/24 15:00 login_historyテーブル (ソース) user_historyテーブル (ターゲット) user_historテーブル (MERGE後) WHEN MATCHED THEN UPDATE SET last_login = l.login_at WHEN NOT MATCHED THEN INSERT VALUES (l.user_id, l.login_at); WHEN MATCHED AND user_id = 100 THEN DO NOTHING;
  • 12. © 2022, Amazon Web Services, Inc. or its affiliates. MERGEとINSERT … ON CONFLICT • どちらも「格納されている行に応じて動作を切り替える事」が可能 • MERGEはUPDATEだけでなく、INSERT/DELETEを指定することも可能 • MERGEとINSERT … ON CONFLICTは単純には置き換えられない • 同時実行性 • 性能 • トリガ 12
  • 13. © 2022, Amazon Web Services, Inc. or its affiliates. MERGEの性能 13 0 2000 4000 6000 8000 10000 12000 INSERT … ON CONFLICT MERGE 300万件UPDATEした場合(ms) 0 1000 2000 3000 4000 5000 6000 7000 INSERT … ON CONFLICT MERGE 300万件INSERTした場合(ms) • 「INSERTしたケース」と「コンフリクトしたからUPDATEしたケース」で INSERT … ON CONFLICTとMERGEの性能を比較
  • 14. © 2022, Amazon Web Services, Inc. or its affiliates. Logical Replicationとは • データベースの一部を他のデータベースに複製する機能 • WALをデコードした内容を送信する • Publisher(送信側)とSubscriber(受信側) • PUBLICATIONとSUBSCRIPTION • CDC、BI、メジャーバージョンアップ、マルチマスター 14
  • 15. © 2022, Amazon Web Services, Inc. or its affiliates. CREATE SUBSCRIPTION … WITH (two_phase = on) • 2相コミットの情報が複製可能になった • Off(デフォルト)だとPublisherで2相コミットしても、通常のトランザクショ ンとして複製される • 未コミット/未ロールバックのトランザクションがSubscriberにも残るように なるので注意 15
  • 16. © 2022, Amazon Web Services, Inc. or its affiliates. 行フィルターと列フィルター CREATE PUBLICATION pub1 FOR TABLE tbl (id, user), tbl2; CREATE PUBLICATION pub2 FOR TABLE tbl WHERE (id % 2 = 0); CREATE PUBLICATION pub3 FOR TABLE tbl (id, user) WHERE (id % 2 = 0); 16 • 送信側でデータをフィルタリング • 同時に指定することも可能
  • 17. © 2022, Amazon Web Services, Inc. or its affiliates. スキーマ単位で送信テーブルを指定 • これまではテーブルを複数指定するか、ALL TABLESで全テーブル指定のみ • 指定したスキーマ内の全テーブルを指定可能になった • スキーマに新たに追加されるテーブルも対象 17 CREATE PUBLICATION pub1 FOR TABLE tbl; CREATE PUBLICATION pub2 FOR ALL TABLES; CREATE PUBLICATION pub3 FOR TABLES IN SCHEMA s1;
  • 18. © 2022, Amazon Web Services, Inc. or its affiliates. ALTER SUBSCRIPTION … SKIP • より便利になった衝突解決のための新しい手段 • 衝突は様々な場面で起こり得る • 例)Subscriberで同時にINSERTして主キー違反 • 衝突が解決するまでLogical Replicationはリトライし続ける • 衝突を解決するには・・・ • 衝突している行を削除/更新 • Logical Replicationの開始地点を進める 18
  • 19. © 2022, Amazon Web Services, Inc. or its affiliates. ALTER SUBSCRIPTION … SKIP ERROR: duplicate key value violates unique constraint "tbl_pkey" DETAIL: Key (c)=(1) already exists. CONTEXT: processing remote data for replication origin "pg_16389" during "INSERT" for replication target relation "public.tbl" in transaction 740 finished at 0/1554338 サーバログ • エラーになった操作、テーブル名、トランザクションID、トランザクション が完了するLSNがサーバログに書かれる • この情報を元に特定のトランザクションをスキップする
  • 20. © 2022, Amazon Web Services, Inc. or its affiliates. ALTER SUBSCRIPTION … SKIP ERROR: duplicate key value violates unique constraint "tbl_pkey" DETAIL: Key (c)=(1) already exists. CONTEXT: processing remote data for replication origin "pg_16389" during "INSERT" for replication target relation "public.tbl" in transaction 740 finished at 0/1554338 20 =# ALTER SUBSCRIPTION sub SKIP (lsn = ‘0/1554338’); サーバログ SQL LOG: logical replication starts skipping transaction at LSN 0/1554338 LOG: logical replication completed skipping transaction at LSN 0/1554338 サーバログ
  • 21. © 2022, Amazon Web Services, Inc. or its affiliates. pg_basebackupの強化 • データベースクラスタ全体の物理バックアップを取得するツール • サーバ側での圧縮(gzip, lz4, zstd)、クライアント側(gzip, lz4, zstd)での 圧縮をサポート 例)--compress=server-zstd, --compress=client-lz4, --compress=server-zstd:level=9,workers=4 • バックアップの出力先(サーバ or クライアント)を指定可能に 例)--target=server:/some/path, --target=client 21
  • 22. © 2022, Amazon Web Services, Inc. or its affiliates. バックアップサイズとバックアップ取得時間を比較 • バックアップサイズは、圧縮方法、圧縮レベルを変えて検証 • バックアップ時間は、圧縮方法、並列数を変えて検証 • 同一サーバ上からpg_basebackupを実行したためサーバ側圧縮のみ実施 22 0 10 20 30 40 50 60 70 80 90 100 none server:zstd server:lz4 server:gzip バックアップ時間(s) 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 none server:zstd server:lz4 server:gzip バックアップサイズ(MB)
  • 23. © 2022, Amazon Web Services, Inc. or its affiliates. contrib/basebackup_to_shell • 新しいバックアップ先としてshellを指定できるようになる 例) --target=shell: • shared_preload_libraries = ‘basebackup_to_shell’ • basebackup_to_shell.command = ‘backup.sh %f %d’ 23
  • 24. © 2022, Amazon Web Services, Inc. or its affiliates. [非互換] 排他バックアップが廃止 • バックアップには排他モード・非排他モードがあった • SELECT pg_start_backup(‘label’, exclusive_backup => ‘true’); • 排他モードでバックアップ取得中にサーバが再起動すると起動不可になる可 能性がある • 排他モードは廃止 • pg_start_backup()とpg_stop_backup()は、pg_backup_start()と pg_backup_stop()に関数名が変更 • 独自バックアップスクリプトで排他モードを使っている場合は、非排他モー ドに移行する、もしくはpg_basebackupを利用する 24
  • 25. © 2022, Amazon Web Services, Inc. or its affiliates. archive_library • WALアーカイブにライブラリを指定可能になった • これまではarchive_commandにシェルコマンドを指定 • archiveプロセスが状態を持ちながら動作可能 • シェルコマンド起動(system()関数)のオーバーヘッドも省ける • リファレンス実装としてcontrib/basic_archiveが追加 (test ! -f /path/to/dest && cp /path/to/src /path/to/des) 25
  • 26. © 2022, Amazon Web Services, Inc. or its affiliates. wal_compression = [off, on, pglz, lz4, zstd] • WALの中のFull Page Imageを圧縮する • lz4とzstdが新しく追加 • デフォルトはoff 26 0 200 400 600 800 1000 1200 1400 1600 off pglz lz4 zstd WALサイズ (3GBテーブルを全ページアップデート、FPIの割合約70%)
  • 27. © 2022, Amazon Web Services, Inc. or its affiliates. wal_compression = [off, on, pglz, lz4, zstd] 27 0 20000 40000 60000 80000 100000 120000 0 100 200 300 400 500 600 TPS (pgbench -T 300 -M prepared, sf:300) off pglz lz4 zstd
  • 28. © 2022, Amazon Web Services, Inc. or its affiliates. contrib/pg_walinspect • pg_waldumpコマンド相当の情報にSQLでアクセスできる 28 =# select * from pg_get_wal_record_info('1/A4619C00'); -[ RECORD 1 ]----+-------------------------------------------------------------------------------------- ------------------------------------- start_lsn | 1/A4619C10 end_lsn | 1/A4619E38 prev_lsn | 1/A4619BD0 xid | 774 resource_manager | Heap record_type | LOCK record_length | 545 main_data_length | 8 fpi_length | 484 description | off 46: xid 774: flags 0x01 LOCK_ONLY EXCL_LOCK block_ref | blkref #0: rel 1663/5/16462 fork main blk 114 (FPW); hole: offset: 268, length: 116, compression saved: 7592, method: zstd
  • 29. © 2022, Amazon Web Services, Inc. or its affiliates. contrib/pg_walinspect • pg_waldumpコマンド相当の情報にSQLでアクセスできる 29 =# select * from pg_get_wal_stats('1/A45F7758', '1/B0115CB0') where "resource_manager/record_type" in ('Heap', 'Btree'); -[ RECORD 1 ]----------------+------------------- resource_manager/record_type | Heap count | 400000 count_percentage | 66.66533335999947 record_size | 46147442 record_size_percentage | 78.61281556682036 fpi_size | 78373262 fpi_size_percentage | 57.97230604301556 combined_size | 124520704 combined_size_percentage | 64.2213337278326 -[ RECORD 2 ]----------------+------------------- resource_manager/record_type | Btree count | 200000 count_percentage | 33.33266667999973 record_size | 12554093 record_size_percentage | 21.386073742022592 fpi_size | 56814156 fpi_size_percentage | 42.02514422849502 combined_size | 69368249 combined_size_percentage | 35.77655222013835
  • 30. © 2022, Amazon Web Services, Inc. or its affiliates. contrib/pg_walinspect • pg_waldumpコマンド相当の情報にSQLでアクセスできる 30 =# select (sum(fpi_size) / sum(combined_size)) as fpi_ratio from pg_get_wal_stats('1/A45F7758', '1/B0115CB0’); fpi_ratio ------------------------ 0.69724450466641785596 (1 row)
  • 31. © 2022, Amazon Web Services, Inc. or its affiliates. log_destination = jsonlog • json形式でサーバログが出力可能になった • logging_collector = onにする必要がある • .jsonファイルにログが書かれる 31 {"timestamp":"2022-11-08 10:13:41.624 ","pid":2934287,"session_id":"6369ad45.2cc60f","line_num":6,"session_start":"2022-11-08 10:13:41 JST","txid":0,"error_severity":"LOG","message":"database system is ready to accept ","backend_type":"postmaster","query_id":0} {"timestamp":"2022-11-08 10:14:09.001","user":"masahiko","dbname":"postgres","pid":2934383,"remote_host":"[local]","session_id":"6369ad5e.2cc6 6f","line_num":1,"ps":"SELECT","session_start":"2022-11-08 10:14:06 ","vxid":"3/2","txid":0,"error_severity":"ERROR","state_code":"42703","message":"column "a" does not ","statement":"select a;","cursor_position":8,"application_name":"psql","backend_type":"client backend","query_id":0}
  • 32. © 2022, Amazon Web Services, Inc. or its affiliates. log_destination = jsonlog 32
  • 33. © 2022, Amazon Web Services, Inc. or its affiliates. 稼働統計情報が共有メモリベースに変更 • サーバの稼働統計情報(pg_stat_xxxで見れる情報)≠オプティマイザの統計 情報 • これまでは専用プロセス(stats collector)が集めていた • 各プロセスはUDPでstats collectorに統計情報を送信 • 統計情報はファイルで共有 • これからは共有メモリ上で管理。stats collectorプロセスは廃止。 • サーバクラッシュ後に統計情報がリセットされる挙動はこれまでと同じ 33
  • 34. © 2022, Amazon Web Services, Inc. or its affiliates. 単一列のソート性能が改善 • 単一列のソート時に扱うデータ量を削減することで、ソート性能が改善 • EXISTSやNOT EXISTSの時によく利用される • 約700MBのテーブルでv14とv15の性能を比較 34 0 0.5 1 1.5 2 2.5 3 v14 v15 実行時間(ms)
  • 35. © 2022, Amazon Web Services, Inc. or its affiliates. その他の性能向上 • Parallel SELECT DISTINCT • postgres_fdwがparallel commitをサポート 35
  • 36. © 2022, Amazon Web Services, Inc. or its affiliates. 最後に • PG15では、MERGE、ロジカルレプリケーションの強化、pg_basebackupの強 化を含む約200個の新しい改善が導入された • PostgreSQL 10は昨日(11/10)にリリースされた10.23でEOL • PostgreSQL 15.1も同時にリリースされた • これバグかな?と思ったら • もっと知りたい! 36
  • 37. © 2022, Amazon Web Services, Inc. or its affiliates. 参考資料 • PostgreSQL 15.0 Documentation (https://www.postgresql.org/docs/15/index.html) • PostgreSQL 15 Release Note (https://www.postgresql.org/docs/15/release-15.html) • 篠田の虎の巻「PostgreSQL 15 Beta 1 新機能検証結果」 (https://h50146.www5.hpe.com/products/software/oe/linux/mainstream/support/lcc/pdf/PostgreSQL_15_Beta_1_New_Features_ja_2022052 4-1.pdf) • PostgreSQL 15検証レポート – SRA OSS (https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2022/10/pg15_report_20221020.pdf) • オンライン物理バックアップの排他モードと非排他モードに ついて (https://www.slideshare.net/nttdata-tech/postgresql-backup-mode-pgunconf34-nttdata) • PostgreSQL の INSERT ON CONFLICT と MERGE の簡易性能比較 (https://qiita.com/fujii_masao/items/462bac9f6a107d6134c4) • PostgreSQL 15 Statistics (http://peter.eisentraut.org/blog/2022/10/25/postgresql-15-statistics) • Speeding up sort performance in PostgreSQL 15 (https://www.citusdata.com/blog/2022/05/19/speeding-up-sort-performance-in-postgres-15/) • Looking ahead at PostgreSQL 15 (https://www.slideshare.net/jkatz05/looking-ahead-at-postgresql-15) • pg_basebackup could not set compression worker count - unsupported parameter (http://rhaas.blogspot.com/2022/11/pgbasebackup-could-not-set-compression.html) 37
  • 38. © 2022, Amazon Web Services, Inc. or its affiliates. Thank you! © 2022, Amazon Web Services, Inc. or its affiliates. Masahiko Sawada @masahiko_sawada 38