PostgreSQLとは（PostgreSQL再入門）
今だから聞く、PostgreSQLの概要と動向（商用DBからの移行やAmazon RDS for PostgreSQLの動向）
2017年9月11日

SRA OSS, Inc. 日本支社
佐藤 友章
sato@sraoss.co.jp© 2017 SRA OSS, Inc. Japan1

PostgreSQLの概要© 2017 SRA OSS, Inc. Japan2

PostgreSQLとは• 標準SQLの大部分とその他の先進的な機能をサポートする本格的なオープンソース
RDBMS• 20年以上の歴史を持ち、現在も活発な開発体制• 1年に1度のメジャーバージョンアップ
• 1年に数回のマイナーバージョンアップ

• 豊富なプラットフォームに対応• Unix系OS全般、Windows 2000 SP4以降、Mac OS X

• 豊富なサポート言語• C、ECPG、C++、Java、Tcl/TK、Python、Perl、PHP、Ruby、ODBC、.NET Data Providerなど© 2017 SRA OSS, Inc. Japan3

PostgreSQLのライセンス• The PostgreSQL License• https://www.postgresql.org/about/licence/• BSDライセンスに類似• 広告条項はなし（修正BSDライセンス）

COPYRIGHTファイル
PostgreSQL Database Management System(formerly known as Postgres, then as Postgres95)• 使用、複製、改変、配布の自由• 複製においては以下を含めることが条件• 著作権表示• ライセンス条文• 免責条項

Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
Portions Copyright (c) 1994, The Regents of the University of California
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreementis hereby granted, provided that the above copyright notice and thisparagraph and the following two paragraphs appear in all copies.

• GPLと比較すると、派生物を再配布する
際にソースコード公開、ライセンス継承の義務がない

IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TOPROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

© 2017 SRA OSS, Inc. Japan

4

PostgreSQLの開発体制• 特定のオーナー企業を持たない方式• 単独の企業に独占されることなく、幅広い層の厚い開発体制

コントリビュータ
メジャーコントリビュータ

支援企業

Fujii Masao
Harada Hitoshi
Ishii Tatsuo
Kaigai Kouhei
Suzuki Koichi⋮ 30～40名

コアチーム

開発コミュニティJosh Berkus
Tom LanePeter Eisentraut
Magnus Hagander
Bruce Momjian
Dave Pageなど…
※PostgreSQLサイトより© 2017 SRA OSS, Inc. Japan5

日本におけるPostgreSQLのコミュニティ
ユーザコミュニティ

ビジネスコミュニティ

日本PostgreSQLユーザ会（JPUG）

PostgreSQLエンタープライズ・コンソーシ
アム（PGECons）• 1999年設立
日本におけるOSSコミュニティのロールモデルでもある• NPO法人• 5,000人強のML会員• 全国各地の支部• 普及活動を中心に• 2012年設立• 正会員企業17社、一般会員企業37社（2016年12月現在）• エンタープライズ用途に向けた共同検証やプロモーション活動© 2017 SRA OSS, Inc. Japan

6

PostgreSQLの生い立ち

1977～1985

Ingres

CA-Ingres II
Illustra1986～1994

Postgresアメリカカリフォル
ニア大学（UCB）で開発された、最も初期のRDBMS

1994～1995

Postgres95
UCBで研究目的で開発。ユーザ増加。バージョン4.2
で打ち切り

Informix
1996～

PostgreSQL

ソースコードの見なおしと改良。SQLに対応© 2017 SRA OSS, Inc. Japan

7

PostgreSQLの歴史！？

900,000

800,000

PostgreSQLソースコード行数

700,000

600,000

500,000

ビットマップ
スキャン

更新の高速化

レプリケーション、
Windows 64bit

多CPU
スケール

マテビュー、更新ビュー、更新FDW、
データチェックサム

400,000

ウィンドウ関数、再帰SQL

300,000

高速JSON、レプリケーション
スロット

200,000

100,000

PITR、
Windows

４CPU
スケール

行単位セキュリティ、
BRINインデックス

同期レプリケーション、
外部テーブル0
2005/1/19 2005/11/8
8.0
8.1

2006/12/5
8.2

2008/2/4
8.3

2009/7/1
8.4

2010/9/20
9.0

2011/9/12
9.1© 2017 SRA OSS, Inc. Japan

2012/9/10
9.2

2013/9/9 2014/12/18
9.3
9.4

2016/1/7
9.5

2016/9/29
9.6
8

PostgreSQL 9.6の概要© 2017 SRA OSS, Inc. Japan9

PostgreSQL 9.6の新機能• パラレル問い合わせ処理• VACUUMにおけるXID凍結処理の改善• ストリーミングレプリケーションの拡張• 全文検索におけるフレーズ検索• 多CPUサーバにおける性能向上• postgres_fdwの改善© 2017 SRA OSS, Inc. Japan10

PostgreSQL 9.6の新機能 パラレルクエリ（1）• 現在のところ、参照のみのクエリでテーブルをシーケンシャルスキャンする時、ハッシュ結合や入れ子ループ結合や集約で並列化することが可能• パラレル処理の動作概要• 複数のワーカプロセスを使って、テーブルを同時並列にアクセスすることで処理効率を向上• 元のバックエンドプロセスはグループリーダとなり、各ワーカプロセスを起動し、処理を振り分け、結果の集計処理（Gather）を行う
Worker 0
Worker 1
クライアントバックエンド＝Gather⋮
Worker n

データベース© 2017 SRA OSS, Inc. Japan11

PostgreSQL 9.6の新機能 パラレルクエリ（2）• パラレル処理を行うかはプランナが決定• デフォルトでは無効（max_parallel_workers_per_gather = 0）
• min_parallel_relation_size（デフォルトでは8MB）をもとにワーカプロセスの個数を決定• テーブルサイズがmin_parallel_relation_size×3n-1以上ならn並列（n≧1）• ワーカの起動コストや各ワーカからの集計コストが高いと、パラレル処理は選択されない
パラレルシーケンシャルスキャンの実行計画=> EXPLAIN (ANALYZE, VERBOSE, COSTS OFF) SELECT * FROM pgbench_accounts WHERE abalance >= 10000;
QUERY PLAN-------------------------------------------------------------------------------------------------Gather (actual time=163.620..163.620 rows=0 loops=1)
Output: aid, bid, abalance, filler
Workers Planned: 2Workers Launched: 2-> Parallel Seq Scan on public.pgbench_accounts (actual time=153.514..153.514 rows=0 loops=3)
Output: aid, bid, abalance, filler
Filter: (pgbench_accounts.abalance >= 10000)
Rows Removed by Filter: 666667
Worker 0: actual time=157.969..157.969 rows=0 loops=1
Worker 1: actual time=140.092..140.092 rows=0 loops=1
Planning time: 0.059 ms
Execution time: 164.589 ms(12 行)© 2017 SRA OSS, Inc. Japan

12

PostgreSQL 9.6の新機能 パラレルクエリ（3）• パラレルクエリによる性能向上
192コアマシンでcount(*)が19倍の性能向上

澤田 雅彦（NTT OSSセンタ）、「PostgreSQL開発者によるPostgreSQL 9.6徹底解説」、 PGConf.ASIA 2016、http://www.pgconf.asia/JP/material/

TPC-Hのクエリ22本中15本が並列化を選択、並列化した全クエリで性能向上

Amit Kapila（EnterpriseDB）、「PostgreSQLのパラレル・クエリー」、PGConf.ASIA
2016、http://www.pgconf.asia/JP/material/© 2017 SRA OSS, Inc. Japan13

PostgreSQL 9.6の新機能 VACUUMにおけるXID凍結処理の改善• トランザクションID（XID）値の周回を防ぐ• 従来動作の問題点• すべてのページを走査するため、大きなテーブルでは処理に時間を要する• サイズは大きいが普段アクセス量が少ないテーブルも対象となる
従来

テーブルデータ

テーブルデータ

可視性
マップ

すべて可視のページ

VACUUM
プロセス

XID凍結を要する
ページ

XID凍結を要する
ページ

全ページを処理© 2017 SRA OSS, Inc. Japan

新実装
可視性マップVACUUM
プロセス

可視性マップを参照して、必要なページのみを処理
14

PostgreSQL 9.6の新機能 ストリーミングレプリケーションの拡張（1）
複数の同期スタンバイに対応• 9.5までは同期スタンバイは1つだけ

synchronous_standby_names= '2 (s1, s2, s3)'

• 複数指定したとしても、そのうち1つは同期スタンバイ（sync）、残りは同期スタンバイの交代候補である潜在的な同期スタンバイ（potential）• 9.6では複数の同期スタンバイを指定できるようになった

application_name = 's1'

プライマリ

スタンバイs1（sync）

application_name = 's2'

従来からの指定方法
ストリーミング
レプリケーション# 3つのうち1つが同期スタンバイとなる
synchronous_standby_names = 's1, s2, s3'

新しい指定方法

スタンバイs2（sync）
application_name = 's3'

# 3つのうち1つを同期スタンバイとする
synchronous_standby_names = '1 (s1, s2, s3)'
# 3つのうち2つを同期スタンバイとする
synchronous_standby_names = '2 (s1, s2, s3)'
© 2017 SRA OSS, Inc. Japan

スタンバイs3（potential）
15

PostgreSQL 9.6の新機能 ストリーミングレプリケーションの拡張（2）
変更データ適用を保証するモード• 従来、同期モードを設定しても、WALデータのスタンバイへの転送、もしくは、転送後のストレージ書き込みを保証するのみ• データ保全という意味では有用だが、プライマリでのコミット完了後でも、スタンバイの問い合わせ結果に変更が反映されているとは限らない

直近の登録が出てこない問題（1）データ登録
BEGIN;INSERT INTO … ;COMMIT;• 9.6では、synchronous_coommitの選択肢にremote_applyが加わった
synchronous_commit設定

アプリサーバ（2）登録確認
SELECT … FROM … ;ストリーミング
レプリケーション

同期レプリケーションのコミット時の動作

off

WALデータのローカルストレージ書き込みも、同期スタンバイへの転送も待たない

local

WALデータのローカルストレージ書き込みを待つ

remote_write

WALデータのローカルストレージ書き込みと、同期スタンバイへの転送を待つ

remote_apply

WALデータのローカルストレージ書き込みと、同期スタンバイへの転送および同期スタンバイでの適用を待つ

on

WALデータのローカルストレージ書き込みと、同期スタンバイへの転送および同期スタンバ
イでのストレージ書き込みを待つ© 2017 SRA OSS, Inc. Japan16

PostgreSQL 9.6の新機能 その他• 全文検索におけるフレーズ検索• postgres_fdwの改善• 単語の並びに対する検索• 前の単語から続くフレーズを指定するtsquery演算子「<->」が追加された=> SELECT to_tsquery('design <-> of <-> the <-> database');to_tsquery-----------------------'design' <3> 'databas'(1 行)• 結合/ソートをリモートサーバ側で処理• DELETE/UPDATEをリモート側だけで実行• 関数・演算子のリモート処理• 詳細やその他の新機能については、
SRA OSSサイトのPostgreSQL技術情報ページで検証レポートを参照• http://www.sraoss.co.jp/technology/postgr
esql/9.6/verification_report.php=> SELECT phraseto_tsquery('full text searching');phraseto_tsquery-------------------------------'full' <-> 'text' <-> 'search'(1 行)• 多CPUサーバにおける性能向上• 共有データ構造の分割• 共有バッファページのPin/Unpin実装変更• ProcLockArrayへのコミット時処理の一括化• 一度に複数ブロックのファイル拡張© 2017 SRA OSS, Inc. Japan17

PostgreSQLの利用事例と派生製品© 2017 SRA OSS, Inc. Japan18

PostgreSQLの利用事例
国内の利用事例

海外の利用事例• NTT OSSセンタ• CCIXA（ブラジル連邦貯蓄銀行）• PostgreSQLの開発まで手掛けるユーザ企業• 社内の80％強のシステムにPostgreSQLが採用できると分析• システムリプレイスに応じて準備入れ替え• ATMおよびオンラインシステムで採用• 開発者も抱える• フランス社会保障システム• 汎用機のシステムからリプレイス• Zalando• 中国電力• ヨーロッパ最大のオンライン服飾販売サイト• 5TB、90台のデータベース• スマートメーターのシステムに採用• PGConf.ASIA 2016で講演

丹治 邦夫（中国電力）、石井 愛弓（NTTデータ）、「大規模社会インフラへのPostgreSQL適用事例」、PGConf.ASIA 2016、http://www.pgconf.asia/JP/material/

Zalandoのオンライン通販サイト、https://www.zalando.de/damen-home/© 2017 SRA OSS, Inc. Japan19

PostgreSQLの派生製品• ライセンスの制約が少ないため、商用/OSS製品のベースとして広く利用されている• PostgreSQLサイトに記載のものだけで41（開発終了も含む）• おもな派生製品• EnterpriseDBのEDB Postgres• Enterpriseエディションは、Oracle Databaseとの高い互換性を有し、性能障害対応やセキュリティ、パーティション強化などのエンタープライズ向けの機能をもつ• PivotalのGreenplum• シェアードナッシングアーキテクチャを採用し、超高速な処理性能と柔軟な拡張性が特長で、データ圧縮などの高度な機能をもつ• AmazonのRedshift• 富士通のEnterprise Database• Postgres XC/XL/X2• SRA OSSのPowerGres
PostgreSQL derived databases
https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases© 2017 SRA OSS, Inc. Japan20

PowerGresとは• 安心のサポートサービスと使いやすいGUI管理ツールを付属した製品• サポート期間は販売開始から7年• 別メニューで24時間365日のサポートも提供• WebベースのGUI管理ツールでデータベースを簡単に管理• PowerGres PlusはPostgreSQLにない独自の機能を追加• 12,000本以上のライセンスを出荷

PowerGresファミリーのラインアップ
PowerGres Plus

PowerGres HA

信頼性とセキュリティ

可用性PowerGres

WAL二重化
HAクラスタ
使いやすさと安心

透過的データ暗号化

サポートサービス
GUI管理ツール

PostgreSQL© 2017 SRA OSS, Inc. Japan21

PowerGres Plusの特長
透過的データ暗号化

WALの二重化• テーブル、インデックスはもちろん、バックアップ（≠ダンプ）、WAL、一時ファイルまで暗号化• WALを二重化して異なるディスクに格納• 片方のWALを失っても最新状態まで復旧できる• 暗号化を意識する必要がなく、アプリケーションを修正しなくていい• 暗号化による性能への影響が小さい

PowerGres Plusの場合

250

200
150

ディスク
障害

性能低下は1％以下

100

性能低下は10％以下

50

最新状態まで復旧できない
WAL

PostgreSQLの場合

0
OLTP性能（100TPS）
暗号化なし

最新状態まで復旧できるロード性能（秒）ディスク障害暗号化あり（AES256/AES-NI有効）WAL© 2017 SRA OSS, Inc. Japan

二重化WAL22

PowerGres V9.6リリース• 8/24、PostgreSQL 9.6をベースにしたPowerGres V9.6をリリース• パラレルクエリなど、PostgreSQL 9.6の新機能が使える• すべての機能が60日間無償で試せる評価版もダウンロード可能

詳しくは「powergres」で検索
powergres検索

SRA OSS、OSSデータベースPostgreSQLの商用版
PowerGres 9.6の販売を開始© 2017 SRA OSS, Inc. Japan23

PostgreSQLの周辺ツールとクラスタ構成© 2017 SRA OSS, Inc. Japan24

PostgreSQLの周辺ツール• pgBadger• pg_reorg• http://dalibo.github.io/pgbadger/• ログを高速に解析し、SQLの実行やサーバの動作に関するレポートを作成するツール• アプリケーションを遅くしているSQLを見つ
け出したい人にお勧め• https://github.com/ossc-db/pg_reorg• 参照や更新を妨げずにCLUSTERやVACUUM FULLを実行するツール• どうしてもVACUUM FULLを実行したい人にお勧め• （FULLでない）VACUUMをちゃんと実行しておけば、VACUUM FULLが必要になることは少ない• pg_statsinfo• http://pgstatsinfo.sourceforge.net/index_ja.html• サーバの動作に関する情報を定期的に集めるツール• いざというときに備えて情報をとっておきたい人にお勧めpgBadgerのレポート© 2017 SRA OSS, Inc. Japan25

PostgreSQLのクラスタ構成（1） クラスタリングの目的• 高可用性の確保• サービスを停止させたくない• 1つのサーバが故障しても、別のサーバが肩代わりする• 参照負荷分散• 大量のアクセスをさばきたい• 負荷を分散して検索性能を向上• 並列処理• 大量のデータを解析したい• 複数のサーバで並列的に処理© 2017 SRA OSS, Inc. Japan26

PostgreSQLのクラスタ構成（2） おもなクラスタ技術• Pgpool-II• HAクラスタ• Pacemaker＋DRBD、共有ストレージなどを利用• 待機側はサービス停止• クライアントとPostgreSQLの間に入ってレプリケーション機能を提供• コネクションプーリング、負荷分散、自動フェイルオーバなどほかの機能もある• ストリーミングレプリケーション• Postgres-XC/XL/X2• PostgreSQL自体をもつ、レプリケーション機能• PostgreSQLを改造したクラスタシステム• プライマリ（更新可能）＋複数のスタンバイ（検索のみ）• 書き込み性能の負荷分散• 簡単、確実、速い
PostgreSQL
Pgpool-II（アクティブ）参照・更新（プライマリ）

仮想IP参照
クライアントPgpool-IIによるクラスタ構成

相互監視

Pgpool-II（スタンバイ）参照

PostgreSQL（スタンバイ）© 2017 SRA OSS, Inc. Japan

PostgreSQL（スタンバイ）

ストリーミング
レプリケーション27

オープンソースとともに© 2017 SRA OSS, Inc. Japan28