PostgreSQL 本体の高速化の軌跡の高速化の軌跡高速化の軌跡の高速化の軌跡軌跡〜 これまでとこれから 〜

長田悠吾
SRA OSS, Inc. 日本支社
2019/4/18

技術開発室

PostgreSQLとは●

代表的なオープンソースのなオープンソースのオープンソースののRDBMSの１つ–●

PostgreSQLライセンスので研究・開発された 配布–●

カリフォルニア大学で研究・開発された 大学で研究・開発された で研究・開発された 研究・開発された された Ingres(‘70),
Postgres(‘80)がルーツルーツ

BSDタイプの緩いライセンスいライセンスライセンスの

特定のオーナー企業を持たず、コミュニティによる開発が続のオーナー企業を持たず、コミュニティによる開発が続を持たず、コミュニティによる開発が続持たず、コミュニティによる開発が続たず、コミュニティによる開発が続コミュニティによる開発が続による開発が続開発された がルーツ続
けられていライセンスる開発が続–

年１回のメジャーバージョンアップのメジャーバージョンア大学で研究・開発された ップ
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

2

PostgreSQLの軌跡
1.0 (1995.9)
6.0 (1997.1)
6.1 (1997.6)
6.2 (1997.10)
6.3 (1998.3)
6.4 (1998.10)
6.5 (1999.6)

コード行数行数
1,400,000
1,200,000

PostgreSQL各バージョンのバージョンの行数とリリース日、主な追加機能とリリースの日、コミュニティによる開発が続主な追加機能なオープンソースの追加機能

7.0 (2000.5)
7.1 (2001.4)
7.2 (2002.2)
7.3 (2002.11)
7.4 (2003.11)

1,000,000

2012.9800,000

2005.1

2011.92008.2
2010.92006.122009.72005.11600,000

hot (fast)
UPDATE

BitmapScan

2014.122013.92016.1

JSONB

many
core
scale

ReplicationRLS,
UPSERT

PITR

0

8.0

8.1

4core
scale
8.2

8.3

SSI,
FDW

OLAP,
CTE
8.4

9.0

9.1

JIT
compileParallel

400,000
200,000

2018.102017.102016.99.2

logicalRepli.

Mview,
UView

9.3

9.4

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

9.5

9.6

10.0

11.0
3

基本的なオープンソースのなオープンソースのア大学で研究・開発された ーキテクチャ
SQLクエリメモリ

ディによる開発が続スのク
読み書きみ込みみ

読み書きみ書き出しき出し
共有バッファバッファ

CPU

テーブル
ファイル

チェックポイント時に書き出しき出し戻しし

クエリ実行

WAL
書き出しき出し出しし

WALバッファコミット時に時にに同期書き出しき出し込みみ

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

WAL
ファイル

4

高速化のアプローチのア大学で研究・開発された プローチ●

ディによる開発が続スのク I/O●–

テーブル保存場所の分散の分散–

バッファ管理の改善の改善

クラスのタ構成–

レプリケーションの利用– テーブルサイズの肥大化防止の肥大化のアプローチ防止●

クエリ処理の改善●

大規模データデータ–

マルチCPU同時に実行性能の向上–

パーティによる開発が続ショニング–SQL 機能の強化のアプローチ–

パラレルクエリ–プランナやエクゼキュータの改善エクゼキュータの改善–

Just-in-Time コンパイル

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

5ディによる開発が続スのク I/O の改善

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

6

WAL
●

WAL (Write Ahead Log)–

PostgreSQL のト時にランザクションログ●–●

追加、コミュニティによる開発が続更新、コミュニティによる開発が続削除などの操作を記録なオープンソースのどの操作を記録を持たず、コミュニティによる開発が続記録実装されたのは されたのは PostgreSQL 7.1

それ以前は、トランザクションをコミットする度に、変更されたデータは、コミュニティによる開発が続ト時にランザクションを持たず、コミュニティによる開発が続コミット時にする開発が続度に、変更されたデータに、コミュニティによる開発が続変更されたデータを持たず、コミュニティによる開発が続全てディスクに同期書き込みしていたてディによる開発が続スのクに同期書き出しき出し込みみしていライセンスた–書き出しき出し込みみ性能は非常に低かったに低かったかった–

1000万件のデータロードにのデータロードにに12時に間以上→ WALの導入により書き込み性能が大幅に改善により書き込み性能が大幅に改善書き出しき出し込みみ性能がルーツ大幅に改善に改善

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

7

バッファ管理の改善●●●

ページ置き換えアルゴリズムき出し換えアルゴリズムえアルゴリズムア大学で研究・開発された ルゴリズの肥大化防止ム–

キャッシュヒット時に率の改善（の改善（LRU → ARC / 2Q) (8.0)–

共有バッファバッファへの同時にア大学で研究・開発された クセスの改良（clock ア大学で研究・開発された ルゴリズの肥大化防止ム）(8.1)

ディによる開発が続スのクへの同期–

バックグラウンドにライタによる開発が続定のオーナー企業を持たず、コミュニティによる開発が続期的なオープンソースのなオープンソースの書き出しき出し込みみ（8.0）–

負荷分散チェックポイント時に（8.3）

ア大学で研究・開発された クセスの戦略–

大規模データなオープンソースのシーケンスのスのキャン (8.3)●–

使用頻度に、変更されたデータの高いライセンスページがルーツバッファから押し出されるのを防止し出しされる開発が続のを持たず、コミュニティによる開発が続防止

大量挿入により書き込み性能が大幅に改善の性能改善（8.4）
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

8

不要領域の回収（の回のメジャーバージョンアップ収（VACUUM）●●

多版型同時に実行制御（Multi Version Concurrent Control: MVCC) (6.5)–

更新時に：古い行を残したまま新しい行を追記（追記型）いライセンス行を持たず、コミュニティによる開発が続残したまま新しい行を追記（追記型）したまま新しいライセンス行を持たず、コミュニティによる開発が続追記（追記型）–

読み書きみ込みみと書き出しき出し込みみがルーツ互いをブロックしないいライセンスを持たず、コミュニティによる開発が続ブロックしなオープンソースのいライセンス

古い行を残したまま新しい行を追記（追記型）いライセンス行がルーツ残したまま新しい行を追記（追記型）ったままだと、コミュニティによる開発が続テーブルサイズの肥大化防止の肥大化のアプローチがルーツ発された 生し性能が劣化し性能がルーツ劣化のアプローチ→ VACUUM で研究・開発された 不要領域の回収（を持たず、コミュニティによる開発が続回のメジャーバージョンアップ収する開発が続必要がルーツある開発が続●

VACUUM の改善–

コンカレント時に VACUUM (7.2)–

自動VACUUM (7.4)–

VACUUM の遅延実行 (8.0)–

VACUUM 高速化のアプローチ (8.2, 8.4, 9.6, 10, 11)

VACUUM
で研究・開発された 回のメジャーバージョンアップ収

ID

商品名

価格

1

リンゴ

5

2

バナナ

10

2

バナナ

12

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

更新

9ページの効率の改善（的なオープンソースのなオープンソースの利用●●

フィによる開発が続ルファクタ (8.2)–

テーブルページの空き領域に余裕をもたせる機能き出し領域の回収（に余裕をもたせる機能を持たず、コミュニティによる開発が続もたせる開発が続機能–

同じページの中で更新操作が出来るため効率が良くなるページの中で更新操作が出来るため効率が良くなるで研究・開発された 更新操作を記録がルーツ出し来るため効率が良くなるる開発が続ため効率が良くなる効率の改善（がルーツ良くなオープンソースのる開発が続HOT (Heap Only Tuple) (8.3)–

不要なオープンソースのインデックスのの更新を持たず、コミュニティによる開発が続抑制

ID=Index 2

空き領域に余裕をもたせる機能き出し領域の回収（→ 更新性能がルーツ向上–

テーブルページ内の不要領域が再利用される機会を増加の不要領域の回収（がルーツ再利用される開発が続機会を増加を持たず、コミュニティによる開発が続増加→ VACUUM の必要性がルーツ減り、テーブルサイズの肥大化が抑制り書き込み性能が大幅に改善、コミュニティによる開発が続テーブルサイズの肥大化防止の肥大化のアプローチがルーツ抑制
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

10ディによる開発が続スのク I/O 関連その他 その他●●●

テーブル空き領域に余裕をもたせる機能間 (8.0)–

テーブルやエクゼキュータの改善インデックスのなオープンソースのどを持たず、コミュニティによる開発が続格納する記憶領域する開発が続記憶領域の回収（–用途に合わせて複数のディスクシステムを使い分けることで性能向上に合わせて複数のディスクシステムを使い分けることで性能向上わせて複数とリリース日、主な追加機能のディによる開発が続スのクシスのテムを持たず、コミュニティによる開発が続使いライセンス分ける開発が続ことで研究・開発された 性能向上

UNLOGGED テーブル（9.0）–

ト時にランザクションログ（WAL）に記録しなオープンソースのいライセンステーブル–

書き出しき出し込みみがルーツ高速

pg_prewarm (9.4)–

指定のオーナー企業を持たず、コミュニティによる開発が続したテーブルを持たず、コミュニティによる開発が続事前は、トランザクションをコミットする度に、変更されたデータにメモリバッファに載せることでアクセスを高速化せる開発が続ことで研究・開発された ア大学で研究・開発された クセスのを持たず、コミュニティによる開発が続高速化のアプローチ–

サーバ起動時にに前は、トランザクションをコミットする度に、変更されたデータ回のメジャーバージョンアップの共有バッファバッファの内の不要領域が再利用される機会を増加容を復元できるように（を持たず、コミュニティによる開発が続復元できるように（で研究・開発された き出しる開発が続ように（11）Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

11クエリ実行の高速化のアプローチ

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

12

多CPUで研究・開発された の同時に実行性能の改善●

全てディスクに同期書き込みしていた体的なオープンソースのなオープンソースのロックの見直しによる競合の削減 しによる開発が続競合わせて複数のディスクシステムを使い分けることで性能向上の削減り、テーブルサイズの肥大化が抑制 (8.2)●

同時に実行性能の大幅に改善に改善（32〜64 コア大学で研究・開発された ）（9.2）–

グループコミット時にの効率の改善（化のアプローチ
ロック負荷軽減り、テーブルサイズの肥大化が抑制–

頻繁にアクセスされる構造を分割してキャッシュに乗りやすくにア大学で研究・開発された クセスのされる開発が続構造を分割してキャッシュに乗りやすくを持たず、コミュニティによる開発が続分割してキャッシュに乗りやすくしてキャッシュに乗りやすくり書き込み性能が大幅に改善やエクゼキュータの改善すく●

WALバッファ同時に書き出しき出し込みみによる開発が続性能向上（9.4）●

内の不要領域が再利用される機会を増加部的なオープンソースのなオープンソースのロック実装されたのは の改訂によるスピンロック軽減 による開発が続スのピンロック軽減り、テーブルサイズの肥大化が抑制 (9.5)●

管理の改善用ハッシュテーブルのパーティによる開発が続ション数とリリース日、主な追加機能の増加 (9.5)

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

13

CPUスのケーラビリティによる開発が続性能改善点（9.6）

ProcArrayLock

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

149.5 - 9.6 性能改善
参照性能

読み書きみ書き出しき出し性能

PGCon2016
Faster PostgreSQL: Improved Writes, Amit Kapila
https://www.pgcon.org/2016/schedule/events/915.en.html
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

15

インデックスの機能の強化のアプローチ●

ビット時にマップインデックスの (8.1)–●

GINインデックスの（8.2）–●●

and / or で研究・開発された 並べられた複数条件を、複数のインデックスの同時使用で検索べられた複数とリリース日、主な追加機能条件のデータロードにを持たず、コミュニティによる開発が続、コミュニティによる開発が続複数とリリース日、主な追加機能のインデックスのの同時に使用で研究・開発された 検索

全てディスクに同期書き込みしていた文検索なオープンソースのどで研究・開発された 利用

インデックスのオンリースのキャン（9.2）–

テーブルデータにア大学で研究・開発された クセスのせずに、コミュニティによる開発が続インデックスのだけを持たず、コミュニティによる開発が続読み書きむ検索検索–

インデックスのがルーツ付与されたキーの値の取得が高速されたキーの値の取得が高速の取得が高速がルーツ高速

カバリングインデックスの (11)–

インデックスのがルーツ付与されたキーの値の取得が高速されていライセンスなオープンソースのいライセンス列の値もインデックスに含めることができるの値の取得が高速もインデックスのに含めることができるめ効率が良くなるる開発が続ことがルーツで研究・開発された き出しる開発が続
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

16

BRIN インデックスの (9.6)– いライセンスくつかのブロック（＝ページ）の塊ごとに最大値・最小値を保持するごとに最大値の取得が高速・最小値の取得が高速を持たず、コミュニティによる開発が続保持たず、コミュニティによる開発が続する開発が続
インデックスのサイズの肥大化防止がルーツ小さいライセンス

このSELECTで研究・開発された は、コミュニティによる開発が続
ブロック128・・・255 は
読み書きみ飛ばし可能！ばし可能！

最大： '2013-12-05'
最小： '2013-01-23'

SELECT * FROM t2
WHERE dt >= '2015-10-01';
インデックスのからスのキャンする開発が続とき出し、コミュニティによる開発が続読み書きみ飛ばし可能！ばせる開発が続ブロックがルーツ分かる開発が続時に刻のような単調増加する値をのようなオープンソースの単調増加する開発が続値の取得が高速を持たず、コミュニティによる開発が続
キーに持たず、コミュニティによる開発が続つ大規模データデータの範囲検索に向いライセンスていライセンスる開発が続

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

17

マテリア大学で研究・開発された ライズの肥大化防止ドにビュー (9.3)
●

●

●

●

クエリの結果がデータベースに格がルーツデータベースのに格納する記憶領域されていライセンスる開発が続

V
name
G1
G2
G3

通常に低かったのビューより書き込み性能が大幅に改善も高速なオープンソースの応答ががルーツ
可能
テーブルがルーツ更新された時にには、コミュニティによる開発が続ク
エリとデータがルーツ不一致となるとなオープンソースのる開発が続
手動の「リフレッシュ」でリフレッシュ」で研究・開発された クエリの再実行がルーツ必要
–

pid
P1
P1
P2

CREATE MATERIALIZED VIEW V
AS SELECT
device_name, pid, price
FROM devices dJOIN parts p
ON d.pid = p.pid;

JOINdevice
name
G1
G2
G3

pid
P1
P1
P2

クエリ実行
結果

price
10
10
20

parts
pid
P1
P2

price
10
20

自動更新、コミュニティによる開発が続差分更新の機能はなオープンソースのいライセンス

REFRESH MATERIALIZED VIEW V;

テーブル

テーブル

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

18

プランナ・エクゼキュータの改善
リリースのの毎に改善が重ねられている（以下はその抜粋）に改善がルーツ重ねられている（以下はその抜粋）ねられていライセンスる開発が続（以下はその抜粋）はその抜粋）

●

–

–

–
–

–
–

–

IN/NOT IN 副問い合わせの大幅な高速化 いライセンス合わせて複数のディスクシステムを使い分けることで性能向上わせの大幅に改善なオープンソースの高速化のアプローチ(7.4)
ハッシュバケット時にを持たず、コミュニティによる開発が続使用したGROUP BY処
理の改善の改良 (7.4)
JOIN構文による開発が続結合わせて複数のディスクシステムを使い分けることで性能向上順序の最適化 の最適化のアプローチ (7.4)
インデックスのを持たず、コミュニティによる開発が続使用した MIN() とMAX() の最適化のアプローチ (8.1)
ソート時に処理の改善の性能向上 (8.2)
ORDER BY ... LIMIT を持たず、コミュニティによる開発が続ソート時にせずに処理の改善(8.3）
DISTINCT, UNION / INTERSECT /EXCEPT で研究・開発された ハッシュがルーツ利用可能に（8.4）

–
–

–

–

–

不要なオープンソースの OUTER JOIN の除などの操作を記録去（9.0）
FULL OUTER JONI で研究・開発された ハッシュジョインがルーツ使用可能に（9.1）
内の不要領域が再利用される機会を増加側にインデックススキャンを使う入れにインデックスのスのキャンを持たず、コミュニティによる開発が続使う入により書き込み性能が大幅に改善れ子ループの改善（ループの改善（9.2）
インデックスのスのキャンのコスのト時に推定のオーナー企業を持たず、コミュニティによる開発が続改善(9.3)
部分インデックスのを持たず、コミュニティによる開発が続使った場合わせて複数のディスクシステムを使い分けることで性能向上のコスのト時に推定のオーナー企業を持たず、コミュニティによる開発が続改善（9.5)–

複数とリリース日、主な追加機能列の値もインデックスに含めることができるに関する開発が続統計情報の計算 の計算 (10)–

集計計算の速度に、変更されたデータ改善 (11)Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

19

レプリケーションの利用

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

20

PostgreSQL のレプリケーション●

スのト時にリーミングレプリケーション (9.0)–

WAL を持たず、コミュニティによる開発が続利用した組み込みのレプリケーション機能み込みみのレプリケーション機能●●●

同期レプリケーション(9.1)、コミュニティによる開発が続カスのケードにレプリケーション (9.2),
複数とリリース日、主な追加機能サーバ対応 (9.6)、コミュニティによる開発が続Quorum コミット時に (10)

ロジカルレプリケーション (10)–テーブル単位のレプリケーションのレプリケーション–

複製先でのデータ加工が可能で研究・開発された のデータ加工が可能がルーツ可能

ロジカル
レプリケーション

マテリア大学で研究・開発された ライズの肥大化防止ドに
ビュー
分析用
インデックスのレプリケーションを持たず、コミュニティによる開発が続利用した性能改善–業を持たず、コミュニティによる開発が続務・更新用サーバと分析用サーバの分離–

複数とリリース日、主な追加機能サーバ間で研究・開発された の参照負荷分散

通常に低かったの業を持たず、コミュニティによる開発が続務
更新処理の改善Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

分析クエリ

21

参照負荷分散●クライア大学で研究・開発された ント時にア大学で研究・開発された プリケーションからは１つのPostgreSQL のように見えアルゴリズムる開発が続

更新クエリ
参照クエリ

●

クエリ振り分けり書き込み性能が大幅に改善分け

●

負荷分散

●

自動フェイルオーバ

Pgpool-II
更新クエリ
参照クエリ

参照クエリ
参照
クエリ

プライマリ

レプリケーションスのタンバイ

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

スのタンバイ22

パーティによる開発が続ショニング

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

23

テーブルパーティによる開発が続ショニング
巨大なオープンソースの親テーブルを複数の子テーブルに分割テーブルを持たず、コミュニティによる開発が続複数とリリース日、主な追加機能の子ループの改善（テーブルに分割してキャッシュに乗りやすく–

親テーブルを複数の子テーブルに分割テーブルへの検索時に、コミュニティによる開発が続必要なオープンソースの子ループの改善（テーブルのみを持たず、コミュニティによる開発が続検索–

挿入により書き込み性能が大幅に改善時にには適切な子テーブルに振り分けなオープンソースの子ループの改善（テーブルに振り分けり書き込み性能が大幅に改善分け

親テーブルを複数の子テーブルに分割テーブル（売上）

子ループの改善（テーブル（１月の売上）の売上）

子ループの改善（テーブル（２月の売上）の売上）

・
・
・

●

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

子ループの改善（テーブル（１２月の売上）の売上）
24

継承と制約によるパーティショニングと制約によるパーティショニングによる開発が続パーティによる開発が続ショニング●

子ループの改善（テーブルは親テーブルを複数の子テーブルに分割テーブルを持たず、コミュニティによる開発が続継承と制約によるパーティショニングして作を記録成–

検索時には「リフレッシュ」で制約によるパーティショニングによる開発が続除などの操作を記録外」により、必要な子テーブルのみが検索される 」により書き込み性能が大幅に改善、コミュニティによる開発が続必要なオープンソースの子ループの改善（テーブルのみがルーツ検索される開発が続 (8.1)–

挿入により書き込み性能が大幅に改善時にはト時にリガー関数とリリース日、主な追加機能で研究・開発された レコードにを持たず、コミュニティによる開発が続振り分けり書き込み性能が大幅に改善分ける開発が続

INSERT トリガー

継承と制約によるパーティショニング
子ループの改善（テーブル（１月の売上）の売上）

CHECK制約

親テーブルを複数の子テーブルに分割テーブル（売上）

子ループの改善（テーブル（２月の売上）の売上）

CHECK制約・・・

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

子ループの改善（テーブル（１２月の売上）の売上）

CHECK制約25

宣言的なオープンソースのパーティによる開発が続ショニング
組み込みのレプリケーション機能み込みみのテーブルパーティによる開発が続ショニング機能 (10)–CREATE TABLE 文で研究・開発された パーティによる開発が続ショニングがルーツ構築可能●

プランナがルーツパーティによる開発が続ショニング情報の計算 を持たず、コミュニティによる開発が続考慮●

挿入により書き込み性能が大幅に改善の高速化のアプローチ

パーティによる開発が続ションテーブルに 20 万行を持たず、コミュニティによる開発が続挿入により書き込み性能が大幅に改善
2000
1800

–

他の機能との連その他 携強化のアプローチ●●

パーティによる開発が続ション単位のレプリケーションの結合わせて複数のディスクシステムを使い分けることで性能向上 (11)パーティによる開発が続ション単位のレプリケーションの集約によるパーティショニング (11)

1600
1400
1200
ms

●

1000
800
600
400
200
0

継承と制約によるパーティショニングとト時にリガを持たず、コミュニティによる開発が続利用

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

PARTITION 構文を持たず、コミュニティによる開発が続利用

26

パーティによる開発が続ション単位のレプリケーションの結合わせて複数のディスクシステムを使い分けることで性能向上●共通する開発が続パーティによる開発が続ションキーを持たず、コミュニティによる開発が続用いライセンスてテーブルを持たず、コミュニティによる開発が続結合わせて複数のディスクシステムを使い分けることで性能向上する開発が続場合わせて複数のディスクシステムを使い分けることで性能向上：–

パーティによる開発が続ショニングのされ方が同じであるならばがルーツ同じページの中で更新操作が出来るため効率が良くなるで研究・開発された ある開発が続なオープンソースのらば–

テーブル全てディスクに同期書き込みしていた体を持たず、コミュニティによる開発が続結合わせて複数のディスクシステムを使い分けることで性能向上する開発が続ので研究・開発された はなオープンソースのく・・・

JOIN
親テーブルを複数の子テーブルに分割テーブルA

親テーブルを複数の子テーブルに分割テーブルB

子ループの改善（テーブルA1

子ループの改善（テーブルB1

子ループの改善（テーブルA2

子ループの改善（テーブルB2

子ループの改善（テーブルA3

子ループの改善（テーブルB3
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

27

パーティによる開発が続ション単位のレプリケーションの結合わせて複数のディスクシステムを使い分けることで性能向上●共通する開発が続パーティによる開発が続ションキーを持たず、コミュニティによる開発が続用いライセンスてテーブルを持たず、コミュニティによる開発が続結合わせて複数のディスクシステムを使い分けることで性能向上する開発が続場合わせて複数のディスクシステムを使い分けることで性能向上：–

パーティによる開発が続ショニングのされ方が同じであるならばがルーツ同じページの中で更新操作が出来るため効率が良くなるで研究・開発された ある開発が続なオープンソースのらば–

子ループの改善（テーブル同士を結合した結果を連結するを持たず、コミュニティによる開発が続結合わせて複数のディスクシステムを使い分けることで性能向上した結果がデータベースに格を持たず、コミュニティによる開発が続連その他 結する開発が続

JOIN

子ループの改善（テーブルA1

子ループの改善（テーブルB1

例えば、えアルゴリズムば、コミュニティによる開発が続A1 と B2 で研究・開発された はキーの範囲がルーツ違うので結合する必要がないうので研究・開発された 結合わせて複数のディスクシステムを使い分けることで性能向上する開発が続必要がルーツなオープンソースのいライセンス

JOIN
子ループの改善（テーブルB2

子ループの改善（テーブルA2

JOIN
子ループの改善（テーブルA3

子ループの改善（テーブルB3

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

28

パラレルクエリ

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

29

パラレルクエリ (9.6)●

大き出しなオープンソースのテーブルに対する開発が続クエリを持たず、コミュニティによる開発が続複数とリリース日、主な追加機能のプロセスの（CPU）で研究・開発された 並べられた複数条件を、複数のインデックスの同時使用で検索列の値もインデックスに含めることができるに実行する開発が続ことで研究・開発された パフォーマンスのを持たず、コミュニティによる開発が続向上
workerテーブル

結果がデータベースに格

workerGatherworker

それぞれの結果がデータベースに格を持たず、コミュニティによる開発が続連その他 結複数とリリース日、主な追加機能のプロセスので研究・開発された 並べられた複数条件を、複数のインデックスの同時使用で検索行にテーブルを持たず、コミュニティによる開発が続スのキャン
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

30

パラレルクエリの強化のアプローチ●

パラレル化のアプローチがルーツで研究・開発された き出しる開発が続対象の広がりの広がりがルーツり書き込み性能が大幅に改善–––

シーケンシャルスのキャン、コミュニティによる開発が続集約によるパーティショニング、コミュニティによる開発が続ネスのト時にループ結合わせて複数のディスクシステムを使い分けることで性能向上、コミュニティによる開発が続ハッシュ結合わせて複数のディスクシステムを使い分けることで性能向上 (9.6)
B-tree インデックスの、コミュニティによる開発が続ビット時にマップヒープスのキャン、コミュニティによる開発が続
マージ、コミュニティによる開発が続副問い合わせの大幅な高速化 いライセンス合わせて複数のディスクシステムを使い分けることで性能向上わせ (10)CREATE INDEX、コミュニティによる開発が続CREATE TABLE AS、コミュニティによる開発が続
CREATE MATERIALIZED VIEW、コミュニティによる開発が続UNION (11)Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

31

JIT コンパイラ基盤

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

32

JITコンパイル基盤 (11)従来るため効率が良くなるの実行●

SQL実行にあたって Just In Time コン
パイルを持たず、コミュニティによる開発が続行いライセンス、コミュニティによる開発が続ネイティによる開発が続ブ実行を持たず、コミュニティによる開発が続実現●

LLVMコンパイラ基盤を持たず、コミュニティによる開発が続使用●

繰り返し処理回数が多い場合に有効り書き込み性能が大幅に改善返し処理回数が多い場合に有効し処理の改善回のメジャーバージョンアップ数とリリース日、主な追加機能がルーツ多いライセンス場合わせて複数のディスクシステムを使い分けることで性能向上に有バッファ効●

プランナコスのト時にで研究・開発された JIT適用を持たず、コミュニティによる開発が続判断●

行データ取り書き込み性能が大幅に改善出しし、コミュニティによる開発が続SELECTリスのト時にの式、コミュニティによる開発が続WHERE句の式に適用されるの式に適用される開発が続

ＪＩＴによる実行による開発が続実行

SQL文字列の値もインデックスに含めることができる

SQL文字列の値もインデックスに含めることができる

Parseツリー

Parseツリー

Executorツリー

Executorツリー

実行bitcode

SELECT id, c1, c2, c3, (c4 * random() * 10)::int
FROM t1 WHERE typ = 101;
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

実行33

これからの高速化のアプローチ

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

34

PostgreSQL 12 の予定のオーナー企業を持たず、コミュニティによる開発が続
●

●

●

●

Generated column–「リフレッシュ」で式の計算結果がデータベースに格」を持たず、コミュニティによる開発が続カラムとしてレコードに内の不要領域が再利用される機会を増加に保存で研究・開発された き出しる開発が続SQL標準の機能の機能–

マテリア大学で研究・開発された ライズの肥大化防止ドにビューのカラム版のようなオープンソースのもの

Pluggable storage API（次のスライド）のスのライドに）–

PostgreSQL のスのト時にレージシスのテムの選択肢を増やすための基盤を持たず、コミュニティによる開発が続増やエクゼキュータの改善すため効率が良くなるの基盤–

追記型 MVCC 以外」により、必要な子テーブルのみが検索される のスのト時にレージによる開発が続高速化のアプローチの可能性

パーティによる開発が続ショニングテーブルの性能改善–

プランニングやエクゼキュータの改善検索の高速化のアプローチ–

テーブル更新時にのロック改善

CTE（WITH句の式に適用される）のインライン化のアプローチ–

現行で研究・開発された は WITH 句の式に適用されるのクエリは「リフレッシュ」で書き出しかれた通り書き込み性能が大幅に改善に」実行される開発が続（最適化のアプローチバリア大学で研究・開発された ）–それを持たず、コミュニティによる開発が続通常に低かったのサブクエリのようにクエリ内の不要領域が再利用される機会を増加に展開して最適化のアプローチの対象の広がりにで研究・開発された き出しる開発が続ように
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

35

Pluggable Storage●

PostgreSQL で研究・開発された 使用可能なオープンソースのスのト時にレージシスのテムの選択肢を増やすための基盤を持たず、コミュニティによる開発が続増やエクゼキュータの改善すため効率が良くなるの基盤

プランナ /
エクゼキュータ– テーブル作を記録成時にに、コミュニティによる開発が続USING 句の式に適用されるを持たず、コミュニティによる開発が続使ってア大学で研究・開発された クセスのメソッドにマネージャ

ア大学で研究・開発された クセスのメソッドに（AM）を持たず、コミュニティによる開発が続指定のオーナー企業を持たず、コミュニティによる開発が続で研究・開発された き出しる開発が続ようになオープンソースのる開発が続
CREATE TABLE tbl(...) USING heap;●

Heap AM
（既存）

zheap
AM

other
AM

省略時には default_table_access_method の値の取得が高速（デフォルト時に ‘heap’）がルーツ使われる開発が続– 新しいライセンスア大学で研究・開発された クセスのメソッドには CREATE ACCESS METHOD 文 (9.6)

で研究・開発された 作を記録成で研究・開発された き出しる開発が続

CREATE ACCESS METHOD myheap
TYPE TABLE HANDLER my_heap_tableam_handler;
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

36

さらに PostgreSQL 13 以降…
●●

Pluggable storage API を持たず、コミュニティによる開発が続利用した新しいライセンススのト時にレージの提案–

UNDOログに基づくスのト時にレージ形式（zheap）–

組み込みのレプリケーション機能み込みみのインメモリ列の値もインデックスに含めることができる指向スのト時にレージ（Zedstore）

組み込みのレプリケーション機能み込みみシャーディによる開発が続ング– テーブルパーティによる開発が続ショニングと FDW を持たず、コミュニティによる開発が続利用したシャーディによる開発が続ング●●

組み込みのレプリケーション機能み込みみのコネクションプール
–

現在はクライアント接続の度にプロセスが生成されており性能に影響を与えているはクライア大学で研究・開発された ント時に接続の度に、変更されたデータにプロセスのがルーツ生し性能が劣化成されており書き込み性能が大幅に改善性能に影響を与えているを持たず、コミュニティによる開発が続与されたキーの値の取得が高速えアルゴリズムていライセンスる開発が続–プロセスのを持たず、コミュニティによる開発が続複数とリリース日、主な追加機能の接続で研究・開発された 使いライセンスまわす仕組み込みのレプリケーション機能みがルーツ提案されていライセンスる開発が続より書き込み性能が大幅に改善効率の改善（的なオープンソースのなオープンソースのプランの生し性能が劣化成–●

Loose index scan, Incremental sort, ...

マテリア大学で研究・開発された ライズの肥大化防止ドにビューの差分更新–

全てディスクに同期書き込みしていた体を持たず、コミュニティによる開発が続リフレッシュする開発が続ので研究・開発された はなオープンソースのく、コミュニティによる開発が続必要なオープンソースの差分だけを持たず、コミュニティによる開発が続計算して更新する開発が続–

SRA OSS, Inc. Japan がルーツ現在はクライアント接続の度にプロセスが生成されており性能に影響を与えている取り書き込み性能が大幅に改善組み込みのレプリケーション機能んで研究・開発された いライセンスる開発が続テーマ
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

37

zheap●

UNDOログに基づくスのト時にレージ形式– EnterpriseDB 社で開発が進められているで研究・開発された 開発された がルーツ進められているめ効率が良くなるられていライセンスる開発が続– UNDO ログ●

データを持たず、コミュニティによる開発が続「リフレッシュ」で元できるように（の古い行を残したまま新しい行を追記（追記型）いライセンス状態に戻す」ためのトランザクションログに戻しす」ため効率が良くなるのト時にランザクションログ●

PostgreSQL で研究・開発された は古い行を残したまま新しい行を追記（追記型）いライセンス行を持たず、コミュニティによる開発が続残したまま新しい行を追記（追記型）したまま更新を持たず、コミュニティによる開発が続行う（追記型）ので研究・開発された 、コミュニティによる開発が続 UNDOログがルーツなオープンソースのいライセンス。

●

古い行を残したまま新しい行を追記（追記型）いライセンス行がルーツ残したまま新しい行を追記（追記型）ったままだと、コミュニティによる開発が続テーブルサイズの肥大化防止の肥大化のアプローチがルーツ発された 生し性能が劣化する開発が続→ VACUUM の必要性

– UNDO ログを持たず、コミュニティによる開発が続使うと●テーブルサイズの肥大化防止がルーツ小さく抑えアルゴリズムらられ、コミュニティによる開発が続性能も向上する開発が続●

VACUUM も必要なオープンソースのくなオープンソースのる開発が続可能性●

ただし、コミュニティによる開発が続以下はその抜粋）のデメリット時にもある開発が続– ロールバックがルーツ遅くなオープンソースのる開発が続– 他のト時にランザクションがルーツ存在はクライアント接続の度にプロセスが生成されており性能に影響を与えているする開発が続とき出しの検索がルーツ遅くなオープンソースのる開発が続

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

38

組み込みのレプリケーション機能み込みみシャーディによる開発が続ングの構想●外」により、必要な子テーブルのみが検索される 部サーバを持たず、コミュニティによる開発が続使ったパーティによる開発が続ショニング構成を持たず、コミュニティによる開発が続ベースの複数サーバでの並にまたがるトランザクション管理トランザクション管理

これらの機能がルーツ
まだ開発された 中で更新操作が出来るため効率が良くなる

外部サーバでの並サーバでの並での並並
列実行

親テーブルを複数の子テーブルに分割テーブル

子ループの改善（テーブル（FDW)

子ループの改善（テーブル子ループの改善（テーブル
（FDW)

FDW:
Foreign Data Wrapper（外」により、必要な子テーブルのみが検索される 部データラッパ）

子ループの改善（テーブル（FDW)

子ループの改善（テーブルCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

子ループの改善（テーブル39マテリア大学で研究・開発された ライズの肥大化防止ドにビューの差分更新●

Incremental View Maintenance (IVM)– マテリア大学で研究・開発された ライズの肥大化防止ビューの更新方が同じであるならば法の１つの１つ– 通常に低かったの REFRESH で研究・開発された は、コミュニティによる開発が続「リフレッシュ」で全てディスクに同期書き込みしていたデータ」の再計算がルーツ必要だがルーツ、コミュニティによる開発が続IVM で研究・開発された は「リフレッシュ」で差分」のみを持たず、コミュニティによる開発が続計

算して適用

PGConf.EU 2018
– テーブルの行 OID を持たず、コミュニティによる開発が続使用した方が同じであるならば法の１つを持たず、コミュニティによる開発が続提案●

増永先でのデータ加工が可能生し性能が劣化（お茶の水大学名誉教授）のアイデアが元の水大学で研究・開発された 名誉教授）のア大学で研究・開発された イデア大学で研究・開発された がルーツ元できるように（– PoC（Proof of Concept）実装されたのは 

●●ア大学で研究・開発された イデア大学で研究・開発された の実現可能性評価●

非常に低かったに簡約によるパーティショニングなオープンソースの実装されたのは で研究・開発された 、コミュニティによる開発が続単純ななオープンソースのJOINビューのみ対応

Time (ms)

●

45000
40000
35000
30000
25000
20000
15000
10000
5000
0

しかし、コミュニティによる開発が続行 OID は PostgreSQL 12 で研究・開発された 廃止される開発が続ことがルーツ決まっているまっていライセンスる開発が続–

リフレッシュ

IVM
500

5000 50000 500000

Updated rows

別の実装方法で現在開発中の実装されたのは 方が同じであるならば法の１つで研究・開発された 現在はクライアント接続の度にプロセスが生成されており性能に影響を与えている開発された 中で更新操作が出来るため効率が良くなる●

PGCon 2019 で研究・開発された 発された 表予定のオーナー企業を持たず、コミュニティによる開発が続
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

40

おわり書き込み性能が大幅に改善に●●

PostgreSQL の高速化のアプローチの歴史–

ディによる開発が続スのク負荷軽減り、テーブルサイズの肥大化が抑制から、コミュニティによる開発が続マルチCPU同時に実行性能の向上へ–

インデックスの、コミュニティによる開発が続マテリア大学で研究・開発された ライズの肥大化防止ドにビューなオープンソースのどの SQL 機能強化のアプローチ–

プランナ / エクゼキュータ、コミュニティによる開発が続VACUUM の改善

大規模データデータ対応 / 分析系機能–●

BRIN インデックスの、コミュニティによる開発が続パーティによる開発が続ショニング（シャーディによる開発が続ング）、コミュニティによる開発が続
パラレルクエリ、コミュニティによる開発が続JIT コンパイル

今後の可能性の可能性–《拡張性の活用》：Pluggable Storage、コミュニティによる開発が続FDW、コミュニティによる開発が続新しいライセンスインデックスの、コミュニティによる開発が続・・・–《新機能の実装されたのは 》：組み込みのレプリケーション機能み込みみコネクションプーリング、コミュニティによる開発が続IVM、コミュニティによる開発が続・・・

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

41

●CommitFest–●

https://www.pgcon.org/2012/schedule/events/416.en.html

Faster PostgreSQL: Improved Writes (Amit Kapila, PGCon 2016)–●

https://www.postgresql.org/list/pgsql-hackers/

Performance Improvements in PostgreSQL 9.2 (Robert Haas, PGCon 2012)–●https://commitfest.postgresql.org/

pgsql-hackers
–

●

参考資料

https://www.pgcon.org/2016/schedule/events/915.en.html

Towards Built-in Sharding in Community PostgreSQL (Amit Langote, Etsuro Fujita, Kyotaro Horiguchi, Masahiko Sawada , PGCon 2017)–https://www.pgcon.org/2017/schedule/events/1069.en.html●

Pluggable Storage in PostgreSQL (Andres Freund, PGConf.EU 2018)●https://www.postgresql.eu/events/pgconfeu2018/schedule/session/2207-pluggable-storage-in-postgresql/●

zheap: An answer to PostgreSQL bloat woes (Amit, Kapila, PGConf.EU 2018)–●

Towards more efficient query plans: PostgreSQL 11 and beyond (Alexander Kuzmenkov, PGConf.EU 2018)–●https://www.sraoss.co.jp/tech-blog/

PostgreSQL 技術情報の計算  (SRA OSS, Inc. 日本支社で開発が進められている）–●

http://rhaas.blogspot.com/2018/05/built-in-sharding-for-postgresql.html

SRA OSS Tech Blog–●

https://www.postgresql.eu/events/pgconfeu2018/schedule/session/2195-implementing-incremental-view-maintenance-on-postgresql/

Built-in Sharding for PostgreSQL (Robert Haas blog)–●

https://www.postgresql.eu/events/pgconfeu2018/schedule/session/2124-towards-more-efficient-query-plans-postgresql-11-and-beyond/

Implementing Incremental View Maintenance on PostgreSQL (Yugo Nagata, PGConf.EU 2018)–●https://www.postgresql.eu/events/pgconfeu2018/sessions/session/2104-zheap-an-answer-to-postgresql-bloat-woes/

https://www.sraoss.co.jp/technology/postgresql/

セミナー資料 (SRA OSS, Inc. 日本支社で開発が進められている）–

https://www.sraoss.co.jp/event_seminar/material.php

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

42

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

43