SlideShare a Scribd company logo
Copyright © 2015 NTT DATA Corporation
2015年9月12日
株式会社 NTTデータ
PostgreSQL 9.5 新機能紹介
Java Küeche 勉強会 「RDB最前線」 in 沖縄
2Copyright © 2015 NTT DATA Corporation
本日は
PostgreSQL9.5の新機能を紹介します
8/6にAlpha 2 リリース!
3Copyright © 2015 NTT DATA Corporation
PostgreSQL 開発者@ NTT データ
社内 PostgreSQL 営業・技術支援
GresCube 開発・サポート
PostgreSQL のコア機能を開発
レプリケーション運用性向上
REINDEX SCHEMA / VERBOSE
pgbench(ベンチマークツール)の改善
pg_bigm(全文検索モジュール)
コア機能へのパッチレビューア
澤田 雅彦 @sawada_masahiko
4Copyright © 2015 NTT DATA Corporation
Thanks to
• Postgres 9.5 feature highlight (Michael Paquier)
• http://michael.otacoo.com/
• Waiting for 9.5 (Hubert Lubaczewski)
• http://www.depesz.com/
• 9.5 COMING TO YOU LIVE (Keith Fiske)
• http://slides.keithf4.com/pg95live/#/
• PostgreSQL Deep Dive (Satoshi Nagayasu)
• http://pgsqldeepdive.blogspot.jp/
• 日々の記録 別館(nuko_yokohama)
• http://d.hatena.ne.jp/nuko_yokohama/
5Copyright © 2015 NTT DATA Corporation
INDEX
PostgreSQLの進化の歴史
PostgreSQL 9.5 新機能紹介
性能向上系機能
開発に役に立つ機能
運用に役に立つ機能
9.6ではこんな機能が入るかも?
Copyright © 2015 NTT DATA Corporation 6
PostgreSQLの進化の歴史
7Copyright © 2015 NTT DATA Corporation
進化の歴史
カリフォルニア大学のPostgresプロジェクト(1985~1993)が母体。
近年はエンタープライズ向けの機能・性能改善を重視している。
最新版は、9.4.4(2015年6月リリース)
2003
2004
2005
2006
2007
2008
2009
2000
2011
2010
7.3
8.0
• Windows対応
• セーブポイント
• メディア故障対応(PITR)
• テーブルスペース
2012
2013
2014
7.4
8.2
• CPUスケール
• オンライン索引作成
• GIN: 汎用転置索引
8.4
• Window関数・再帰クエリ
• VACUUM用メモリ自動管理
• 他DBMS互換性向上
9.0
• レプリケーション
• 列 / 条件付きトリガ
• Windows 64bit対応
9.1
• 同期レプリケーション
• パーティショニング強化
• 一時テーブル強化
9.2
• カスケードレプリケーション
• スケーラビリティ向上
• Index検索の強化
9.3
• 切替え時間短縮
• Viewの改良
• DB間連携強化、等
8.1
• パーティショニング
• 2相コミット
• バッファ管理改良
9.4
• レプリケーションの
運用性向上
• NoSQL対応強化
• 大容量メモリ対応
8.3
• HOT: 更新性能向上
• VACUUM自動化
• 全文テキスト検索
Copyright © 2015 NTT DATA Corporation 8
PostgreSQL 9.5 とは?
9Copyright © 2015 NTT DATA Corporation
Q1. 特徴は?
A1. 大規模、特にDWH的な用途に強くなった!
Q2. いつリリース?
A2. 年内にはリリース予定 (8月にAlpha2がリリース)
10Copyright © 2015 NTT DATA Corporation
本日紹介する PostgreSQL 9.5 新機能
性能改善系
• BRIN INDEX
• WAL圧縮
運用に役立つ系
• pg_rewind
• Row Level Security(RLS)
開発に役立つ系
• UPSERT (INSERT ON CONFLICT)
• 外部テーブルの継承
• IMPORT FOREIGN SCHEMA
• GROUPING SETS, CUBE, ROLLUP
• JSONB型の演算子、関数の追加
• TABLESAMPLE句
3カテゴリ、10機能を紹介
Copyright © 2015 NTT DATA Corporation 11
性能改善系 新機能
12Copyright © 2015 NTT DATA Corporation
BRIN INDEX (Block Range INdex)
Block Range(min/max)
1 - 128 1 ~ 1000
129 - 256 1001 ~ 2000
: :
インデックス作成
CREATE INDEX hoge_brin ON hoge USING brin(col);
近接している
ブロックの束に対して
列の最小値/最大値
をインデックスに記録
:
テーブル
BRINインデックス
128
ブロック
128
ブロック
128
ブロック
128
ブロック
ブロック
凡例
13Copyright © 2015 NTT DATA Corporation
BRIN INDEX (Block Range INdex)
Block Range(min/max)
1 - 128 1 ~ 1000
129 - 256 1001 ~ 2000
: :
検索する範囲を
絞り高速に検索
:
テーブル
BRINインデックス
検索
SELECT * FROM hoge
WHERE col BETWEEN 1500 AND 1700;
ブロック
凡例
14Copyright © 2015 NTT DATA Corporation
BRIN INDEX (Block Range INdex)のFAQ
Q. BRIN INDEXの特徴は?
A. DWH用途向けのインデックス。
他のインデックスに比べ、インデックスサイズが小さい。(ブロック束の粒度は調整可能)
Q. 使いどころは?
A. 巨大なテーブルにて、ある特定の範囲を検索するときに有用 。(例えば、8月分の売り上
げを検索するなど)
さらに、カラムのデータとテーブル内の物理的な順序が相関しているとより効果的。
Q. 使用上の注意点は?
A. Btreeの代替となるインデックスではないことに注意。
静的で大規模なデータ(まさにDWH系)の検索に向いています。
15Copyright © 2015 NTT DATA Corporation
WAL圧縮
Full Page Writes(FPW)を圧縮することでWALサイズを縮小
性能改善、ディスク領域削減、レプリケーションに有用
wal_compression = off(デフォルト) / on
FPW FPW FPW FPW
Compressed
FPW
OFF
ON
WALサイズを
縮小
Compressed
FPW
Compressed
FPW
Compressed
FPW
16Copyright © 2015 NTT DATA Corporation
WAL圧縮(2)
pgbenchを使って圧縮効果を測定
※pgbench -c 5 -t 10000で測定
※②ではfiller列にランダム文字列を設定
約70%
約30%
1,200 MB
1,000 MB
800 MB
600 MB
400 MB
200 MB
0
100MB
70MB
60MB
50MB
40MB
30MB
20MB
10MB
0MB
17Copyright © 2015 NTT DATA Corporation
性能向上系まとめ
・ BRIN INDEX
・ WAL圧縮
Copyright © 2015 NTT DATA Corporation 18
開発に役立つ系新機能
19Copyright © 2015 NTT DATA Corporation
UPSERT
INSERT INTO emp VALUES (3, '鈴木', '開発')
ON CONFLICT (id)
DO UPDATE
SET name = EXCLUDED.name,
role = EXCLUDED.role;
行がなければINSERT、あればUPDATEを実行
id name role
1 斉藤 開発
2 田中 営業
3 鈴木 開発
4 山下 経理
5 佐藤 営業
id=3の行がなければ
INSERT INTO emp VALUES (3, '鈴木', '開発');
id=3の行があれば
UPDATE emp SET name = '鈴木', role = '開発'
WHERE id = 3;
20Copyright © 2015 NTT DATA Corporation
UPSERT(2)
• ON CONFLICT句では列名、制約名が指定可能
• ON CONFLICT (列名)
• ON CONFLICT 制約名
• 衝突時(CONFLICT)の動作はDO UPDATE/NOTHINGが指定可能
• DO UPDATE SET col1 = EXCLUDED.col1 WHERE col1 = ‘hoge’
• DO NOTHING
• EXCLUDED句を使うことで、VALUES句内のデータを使うことが可能
INSERT INTO emp VALUES (3, '鈴木', '開発')
ON CONFLICT (id)
DO UPDATE
SET name = EXCLUDED.name, role = EXCLUDED.role;
21Copyright © 2015 NTT DATA Corporation
FDW強化
PostgreSQL独自機能である
Foreign Data Wrapper (FDW)が
大幅に強化されました!
FDWの主な9.5新機能
• Foreign Table Inheritance
• IMPORT FOREIGN SCHEMA
22Copyright © 2015 NTT DATA Corporation
FDW(Foreign Data Wrapper)とは?
ID NAME
1 沖縄
2 新潟
…
ID NAME
1 沖縄
2 新潟
…
外部テーブル
テーブル
外部のデータをPostgreSQLのテーブルとして扱う機能
1,沖縄
2,新潟
…
CSVファイル
PostgreSQL
Oracle
read()
SELECT
SELECT
oracle_fdw
file_fdw
23Copyright © 2015 NTT DATA Corporation
FDW強化 - IMPORT FOREIGN SCHEMA -
bar スキーマ
リモート先リモート元
CREATE FOREIGN TABLE …
CREATE FOREIGN TABLE …
CREATE FOREIGN TABLE …
これまではリモート元、リモート先それぞれでテーブル定義を実行する必要があった
fdw スキーマ
CREATE TABLE …
CREATE TABLE …
CREATE TABLE …
凡例
実テーブル
外部テーブル
24Copyright © 2015 NTT DATA Corporation
FDW強化 - IMPORT FOREIGN SCHEMA -
bar スキーマ
リモート先からテーブル、ビュー、マテビューの定義をインポートできる
fdw スキーマ
CREATE TABLE …
CREATE TABLE …
CREATE TABLE …
スキーマ内の
テーブル、ビュー、マテビュー
定義をインポート
IMPORT FOREIGN SCHEMA
bar INTO fdw;
凡例
実テーブル
外部テーブル
リモート先リモート元
25Copyright © 2015 NTT DATA Corporation
FDW強化 - Foreign Table Inheritance -
外部テーブルで継承(INHERITS)が使用可能
=# CREATE FOREIGN TABLE hoge_2015_10 (date timestamp,
value text)
INHERITS (hoge_parent)
SERVER pg_server
OPTIONS(table_name ‘hoge_2015_10’);
26Copyright © 2015 NTT DATA Corporation
FDW強化 - Foreign Table Inheritance -
外部テーブルも含んだパーティショニングが可能に
Partitioning
+
FDW
SQL
子 子 子
子
子
凡例
実テーブル
外部テーブル
親
外部サーバとの通信など
子 CSV
postgres_fdw file_fdwpostgres_fdw
27Copyright © 2015 NTT DATA Corporation
GROUPING SETS, CUBE, ROLLUP
SQLの新しい構文が追加
• 1回のクエリで複数の異なる条件のGROUP処理が簡単・速く
brand | size | sum
-------+------+-----
Foo | | 30
Bar | | 20
| L | 15
| M | 35
| | 50
(5 rows)
 SELECT brand, size, sum(sales) FROM items_sold GROUP BY
GROUPING SETS ((brand), (size), ());
ブランドごとの集計
サイズごとの集計
全ての集計
<基本となるGRUPPING SETS>
28Copyright © 2015 NTT DATA Corporation
GROUPING SETS, CUBE, ROLLUP
GRUPPING SET
(),
(d1),
(d2),
(d3),
(d1,d2),
(d1 ,d3),
( d2,d3),
(d1,d2,d3)
GROUP BY CUBE (d1, d2, d3);
列挙された要素について、
全ての組み合わせごとに集計
いずれもGROUPING SETをさらに便利にする構文
GRUPPING SET
(),
(d1),
(d1,d2),
(d1,d2,d3)
列挙された要素について、
左側から絞り込んだ組み合わせごとに集計
GROUP BY CUBE (d1, d2, d3); GROUP BY ROLLUP (d1, d2, d3);
29Copyright © 2015 NTT DATA Corporation
PostgreSQLにおけるJSONの歴史
v9.2 (2012年) v9.3 (2013年) v9.4 (2014年) v9.5
TEXT型 + 構文チェッカ
利用可能な関数と演算子
はわずか
演算子4個追加
要素抽出の演算子(->)
関数10個追加
JSONから行への変換
バイナリ形式 + 構文チェッカ
GINインデックス対応
JSON型
サポート
JSONB型
サポート !?
関数と演算子の
充実化
30Copyright © 2015 NTT DATA Corporation
JSONB型に追加された新しい関数・演算子
関数
演算子
-、-# 削除
|| 追加
jsonb_concat() 追加
jsonb_delete() 削除
jsonb_set() 更新
jsonb_pretty() JSONB型を見やすく整形
NEW!
NEW!
NEW!
NEW!
NEW!
NEW!
※JSONB型でのみ使用できる関数・演算子です
31Copyright © 2015 NTT DATA Corporation
JSONB型に追加された新しい関数・演算子 - 追加 -
※同様のことがjsonb_concat関数で可能です
jsonb=# SELECT '{ "key1" : 1, "key2" : 2 }'::jsonb || '{"key3" : 3}'::jsonb ;
?column?
-----------------------------------
{"key1": 1, "key2": 2, "key3": 3}
jsonb=# SELECT '{ "key1" : 1, "key2" : 2 }'::jsonb || '{"key1" : 999}'::jsonb ;
?column?
--------------------------
{"key1": 999, "key2": 2}
32Copyright © 2015 NTT DATA Corporation
JSONB型に追加された新しい関数・演算子 - 削除 -
※同様のことがjsonb_delete関数で可能です
jsonb=# SELECT '{ "key1" : 1, "key2" : 2 }'::jsonb - 'key1';
?column?
-------------
{"key2": 2}
jsonb=# SELECT '{ "key1" : { "key11" : 11 }, "key2" : 2 }'::jsonb #- '{key1, key11}';
?column?
-------------------------
{"key1": {}, "key2": 2}
jsonb=# SELECT '[ "hoge", "bar", "foo" ]'::jsonb - 1;
?column?
-----------------
["hoge", "foo"]
33Copyright © 2015 NTT DATA Corporation
JSONB型に追加された新しい関数・演算子 - 追加・置換 -
jsonb=# SELECT jsonb_set('{ "key1" : 1, "key2" : 2 }'::jsonb,
'{"key1"}',
'999');
jsonb_set
--------------------------
{"key1": 999, "key2": 2}
jsonb=# SELECT jsonb_set('{ "key1" : 1, "key2" : 2 }'::jsonb,
'{"key999"}',
'999');
jsonb_set
---------------------------------------
{"key1": 1, "key2": 2, "key999": 999}
34Copyright © 2015 NTT DATA Corporation
JSONB型に追加された新しい関数・演算子 - 追加・置換 -
jsonb=# SELECT jsonb_set('{ "key1" : { "key:array" : [1,2,3] } , "key2" : 2 }'::jsonb,
'{"key1", "key:array"}',
'999');
jsonb_set
-----------------------------------------
{"key1": {"key:array": 999}, "key2": 2}
jsonb=# SELECT jsonb_set('{ "key1" : { "key:array" : [1,2,3] } , "key2" : 2 }'::jsonb,
'{"key1", "key:array", 1}',
'999');
jsonb_set
-------------------------------------------------
{"key1": {"key:array": [1, 999, 3]}, "key2": 2}
35Copyright © 2015 NTT DATA Corporation
JSONB型に追加された新しい関数・演算子 - 整形 -
postgres=# SELECT jsonb_pretty(
'{ "key1" : { "nest-key1" : [1, 2], "nest-key2" : { "nest-nest-key3" : "value" }}}‘
);
jsonb_pretty
---------------------------------------
{ +
"key1": { +
"nest-key1": [ +
1, +
2 +
], +
"nest-key2": { +
"nest-nest-key3": "value“ +
} +
} +
}
(1 row)
36Copyright © 2015 NTT DATA Corporation
TABLESAMPLE句
• サンプリングメソッドをBERNOULLI、SYSTEMの2つから選択
• 取得する割合をパーセント(%)で指定
• REPEATABLEオプションを使うことでサンプルを選択することが可能
• TABLESAMPLE SYSTEM(10) REPEATABLE(4);
hoge テーブル
結果セット
SELECT * FROM hoge TABLESAMPLE SYSTEM(10);
Sample Scan
テーブル内の行を
サンプリング
して結果を取得
37Copyright © 2015 NTT DATA Corporation
TABLESAMPLE句(2)
タプル単位でランダムに選択
• シーケンシャルI/O
• SYSTEMより遅い
タプル1
タプル2
タプル7
タプル8
タプル4
タプル5
タプル13
タプル9
タプル10
タプル12
タプル3
タプル11
BERNOULLIを指定
タプル1
タプル2
タプル7
タプル8
タプル4
タプル5
タプル13
タプル9
タプル10
タプル12
タプル3
タプル11
SYSTEMを指定
テーブル テーブル
ブロック
選択されたタプル
選択されないタプル
サンプリング方法は、BERNOULLI(ベルヌーイ)、SYSTEMから選択可能
ブロック単位でランダムに選択
• ランダムI/O
• BERNOULLIより早い
38Copyright © 2015 NTT DATA Corporation
TABLESAMPLE句(3)
• BERNOULLI、SYSTEM共にページまたはタプル毎に指定された確率で選択される
• 1000行のテーブルで10%を指定してもちょうど100行とは限らない
• 選択されるタプルはデッドタプルも含む
• 確実に見える行のみをサンプリング対象としたい場合は、事前にVACUUMまたはVACUUM
FULLが必要
• WHERE句と併用した場合は、「サンプリング」→「WHERE句の評価」の順
• サンプリングをしてテーブルを結合する場合は注意が必要
• サンプリングの影響でテーブルの一貫性がないように見えてしまうことも
• 結合したテーブルに対してサンプリングしたい場合はマテビューを使う
39Copyright © 2015 NTT DATA Corporation
TABLESAMPLE句についてのFAQ
Q. SYSTEM、BERNOULLIの使い分けは?
A. 遅くてもより正確な行数を取得したい→BERNOULI
多少取得行数はずれるが、速くサンプリングしたい→SYSTEM
Q. TABLESAMPLEの使いどころは?
A. 例えば、
• テーブルの中身全部をちゃんと見なくてもいい検索の時(傾向分析等)
• 総量計算の見積もり
• 「10%サンプリングして結果を10倍」 > 「全件カウント」
• SELECT item, count(*) * 10 FROM item_table TABLESAMPLE BERNOULLI(10)
WHERE item = ‘xxx’ GROUP BY item;
など
40Copyright © 2015 NTT DATA Corporation
開発に役立つ系新機能まとめ
・ UPSERT (INSERT ON CONFLICT)
・ FDW強化(Foreign table inheritance, IMPORT FOREIGN SCHEMA)
・ GROUPING SETS, CUBE, ROLLUP
・ JSONB型の演算子、関数の追加
・ TABLESAMPLE句
Copyright © 2015 NTT DATA Corporation 41
運用に役立つ系新機能
Copyright © 2015 NTT DATA Corporation 42
バージョンアップ時の非互換に注意
ちょっとその前に。
43Copyright © 2015 NTT DATA Corporation
演算子の優先度が変わりました
9.4以前の優先度
.
::
[ ]
+ -
^
* / %
+ -
IS
ISNULL
NOTNULL
(any other operator)
IN
BETWEEN
OVERLAPS
LIKE ILIKE SIMILAR
< >
=
NOT
AND
OR
9.5の優先度
.
::
[ ]
+ -
^
* / %
+ -
(any other operator)
OVERLAPS
BETWEEN IN LIKE ILIKE
SIMILAR
< > = <= >= <>
IS ISNULL NOTNULL
NOT
AND
OR
例えば、
 IS, IS NULL,IS NOT NULLが同じ優先度に
 「<,>,=…」と「IS,IS NULL…」の優先度が逆転
よりSQL標準に合った、演算子の優先度になりました
44Copyright © 2015 NTT DATA Corporation
演算子の優先度が変わりました
※ 優先度は「IS」 > 「>」なので、「3 IS true」が先に評価される
※優先度は「IS」 < 「>」
SELECT 4 > 3 IS true;
(9.4以前)
ERROR: argument of IS TRUE must be type boolean,
not type integer
(9.5)
?column?
----------
t
45Copyright © 2015 NTT DATA Corporation
演算子の優先度が変わりました
ただ、優先度が変わるケースがわかりづらい。。
9.5にバージョンアップ時に優先度の変更に気づくためには?
operator_precedence_warning = on
(9.5)
=# SET operator_precedence_warning to on;
SET
=# SELECT 4 > 3 IS true;
WARNING: operator precedence change: IS is now lower
precedence than >
LINE 1: SELECT 4 > 3 IS true;
^
?column?
----------
t
(1 row)
バージョンアップ時は、
このパラメータをON
にして、WARNING
が出たSQLを直せば
OK!
Copyright © 2015 NTT DATA Corporation 46
運用に役立つ系新機能
47Copyright © 2015 NTT DATA Corporation
ROW LEVEL SECURITY (RLS)
id name age role
1 斉藤 27 開発
2 田中 53 営業
3 鈴木 45 開発
4 山下 39 経理
5 佐藤 31 営業
role = ‘開発’
が見れるユーザ
ユーザが閲覧・操作できる行を指定できる機能
GRANTによるアクセス制御
role = ‘営業’
が見れるユーザ
テーブルへの
アクセス権が
ないユーザ
スーパーユーザー
または
テーブルの所有者
RSLによるアクセス制御
48Copyright © 2015 NTT DATA Corporation
ROW LEVEL SECURITY (RLS)
id name age role
1 斉藤 27 開発
2 田中 53 営業
3 鈴木 45 開発
4 山下 39 経理
5 佐藤 31 営業
ユーザfoo
empテーブル
例) 開発者の情報のみをユーザfooに閲覧許可したい
① CREATE POLICY emp_foo_policy ON emp
FOR SELECT
TO foo
USING (role = '開発');
② ALTER TABLE emp ENABLE ROW LEVEL SECURITY;
SELECT *
FROM tmp;
49Copyright © 2015 NTT DATA Corporation
pg_rewind
これまではフェイルバック時にはフルバックアップの転送が必須
レプリケー
ション
マスタ スタン
バイ
停止 マスタ
マスタスタン
バイ
レプリケー
ション
停止 マスタ
両系稼働
マスタ単独稼働
両系稼働
フルバックアップ転送
マスタ故障により
フェイルオーバ
旧マスタの再組込み
(フェイルバック)
面倒!大変!時間かかりすぎ!
9.4
フル
バック
アップ
50Copyright © 2015 NTT DATA Corporation
pg_rewind
フェイルバック時にDBデータを差分バックアップ転送できる機能
レプリケー
ション
マスタ スタン
バイ
停止 マスタ
マスタスタン
バイ
レプリケー
ション
停止 マスタ
差分
バック
アップ
両系稼働
マスタ単独稼働
両系稼働
差分バックアップ転送
マスタ故障により
フェイルオーバ
旧マスタの再組込み
(フェイルバック)
pg_rewind
フェイルバック時間を大幅短縮!
9.5
51Copyright © 2015 NTT DATA Corporation
運用に役立つ機能まとめ
• Row Level Security
• pg_rewind
Copyright © 2015 NTT DATA Corporation 52
9.6には、こんな機能が入るかも?
53Copyright © 2015 NTT DATA Corporation
9.6提案中の機能
PG PG
PG
backend
凡例
実テーブル
外部テーブル
Parallel
Query
worker worker worker
Join
Pushdown
SQL
VACUUM
強化
54Copyright © 2015 NTT DATA Corporation
マルチ同期レプリケーション(quorum commit)
マスタ
スタンバイ
例えば、
スタンバイのうち2台から応答があったら
同期レプリケーションは完了と判断したい!
同期レプリケーションのより柔軟な構成を可能にする機能
55Copyright © 2015 NTT DATA Corporation
さいごに
PostgreSQL 9.5 使ってみませんか?
ソースコードはこちら
http://www.postgresql.org/ftp/source/v9.5alpha2/
バグ報告はこちら
http://www.postgresql.org/support/submitbug/
Copyright © 2011 NTT DATA Corporation
Copyright © 2015 NTT DATA Corporation
ご清聴ありがとうございました
Copyright © 2015 NTT DATA Corporation 57
参考資料
58Copyright © 2015 NTT DATA Corporation
参照スケーラビリティ向上
9.4に比べ、参照スケーラビリティが大きく向上
Scalability and Performance Improvements in PostgreSQL by Amit Kapila
https://www.pgcon.org/2015/schedule/attachments/378_postgresql-95-scalability-perf-improvements.pdf
DBデータが全てShared Bufferに収まるケース DBデータが全てメモリに収まるケース
LWLock
を改善
バッファ置換、
バッファ管理方法
を改善
59Copyright © 2015 NTT DATA Corporation
id …
10
20 …
30 …
40 …
50 …
SKIP LOCKED句
SELECT * FROM hoge
WHERE id > 20
FOR UPDATE
NOWAIT;
SELECT * FROM hoge
WHERE id > 20
FOR UPDATE
SKIP LOCKED;
行ロックが取れる行だけロックして結果を取得
30 …
50 …
②
行ロックが取れる行のみ
(id = 30と50)
結果を返す
②
行ロックが一つでも
取れなかったら
ERROR終了
①
他処理によって
既に行ロックされてる
60Copyright © 2015 NTT DATA Corporation
スタンバイWALアーカイブ
スタンバイサーバでのWALアーカイブが可能に!
archive_modeにalwaysが追加
レプリケー
ション
マスタ
スタン
バイ
スタン
バイ
スタン
バイ
WAL
アーカイブ
archive_mode = off
WAL
アーカイブ
archive_mode = always
archive_mode = always

More Related Content

What's hot (20)

PDF
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PDF
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
 
PDF
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
 
ODP
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
Shigeru Hanada
 
PDF
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
Insight Technology, Inc.
 
PDF
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
PDF
KOF2015 PostgreSQL 9.5
Toshi Harada
 
PDF
PostgreSQLでスケールアウト
Masahiko Sawada
 
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
NTT DATA Technology & Innovation
 
PDF
使ってみませんか?pg hint_plan
Masao Fujii
 
PDF
perfを使ったPostgreSQLの解析(前編)
Daichi Egawa
 
PDF
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
PDF
PostgreSQLコミュニティに飛び込もう
NTT DATA OSS Professional Services
 
PDF
Application of postgre sql to large social infrastructure jp
NTT DATA OSS Professional Services
 
PDF
PostgreSQL10徹底解説
Masahiko Sawada
 
PDF
GresCubeで快適PostgreSQLライフ
NTT DATA OSS Professional Services
 
PDF
9.3で進化した外部テーブル
Shigeru Hanada
 
PPTX
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
Ohyama Masanori
 
PDF
今秋リリース予定のPostgreSQL11を徹底解説
Masahiko Sawada
 
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
 
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
Shigeru Hanada
 
[B23] PostgreSQLのインデックス・チューニング by Tomonari Katsumata
Insight Technology, Inc.
 
外部データラッパによる PostgreSQL の拡張
Shigeru Hanada
 
KOF2015 PostgreSQL 9.5
Toshi Harada
 
PostgreSQLでスケールアウト
Masahiko Sawada
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
NTT DATA Technology & Innovation
 
使ってみませんか?pg hint_plan
Masao Fujii
 
perfを使ったPostgreSQLの解析(前編)
Daichi Egawa
 
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
 
PostgreSQLコミュニティに飛び込もう
NTT DATA OSS Professional Services
 
Application of postgre sql to large social infrastructure jp
NTT DATA OSS Professional Services
 
PostgreSQL10徹底解説
Masahiko Sawada
 
GresCubeで快適PostgreSQLライフ
NTT DATA OSS Professional Services
 
9.3で進化した外部テーブル
Shigeru Hanada
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
Ohyama Masanori
 
今秋リリース予定のPostgreSQL11を徹底解説
Masahiko Sawada
 

Similar to PostgreSQL 9.5 新機能紹介 (20)

PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
NTT DATA OSS Professional Services
 
PDF
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
 
PDF
PostgreSQL 12の話
Masahiko Sawada
 
PDF
Lt ingaoho-jsonb+postgeres fdw
Toshi Harada
 
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PDF
PostgreSQL 9.5 の新機能
Shigetaka Yachi
 
PDF
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
Toshi Harada
 
PDF
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
PDF
20190119 aws-study-pg-extension
Toshi Harada
 
PDF
Pgunconf 20121212-postgeres fdw
Toshi Harada
 
PDF
Chugokudb study-20150131
Toshi Harada
 
PDF
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
 
PDF
知って得するWebで便利なpostgre sqlの3つの機能
Soudai Sone
 
PDF
20181110 fok2018-pg-extension
Toshi Harada
 
PDF
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Ryuichiro Munechika
 
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 
PDF
pg_trgmと全文検索
NTT DATA OSS Professional Services
 
PDF
オープンソース・データベースの最新事情
Meiji Kimura
 
PDF
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
Meiji Kimura
 
JSONBはPostgreSQL9.5でいかに改善されたのか
NTT DATA OSS Professional Services
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
 
PostgreSQL 12の話
Masahiko Sawada
 
Lt ingaoho-jsonb+postgeres fdw
Toshi Harada
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PostgreSQL 9.5 の新機能
Shigetaka Yachi
 
20150530 pgunconf-pgbench-semi-structured-benchmark
Toshi Harada
 
MyNA JPUG study 20160220-postgresql-json-datatype
Toshi Harada
 
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
20190119 aws-study-pg-extension
Toshi Harada
 
Pgunconf 20121212-postgeres fdw
Toshi Harada
 
Chugokudb study-20150131
Toshi Harada
 
PGCon.jp 2014 jsonb-datatype-20141205
Toshi Harada
 
知って得するWebで便利なpostgre sqlの3つの機能
Soudai Sone
 
20181110 fok2018-pg-extension
Toshi Harada
 
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Ryuichiro Munechika
 
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 
pg_trgmと全文検索
NTT DATA OSS Professional Services
 
オープンソース・データベースの最新事情
Meiji Kimura
 
オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring
Meiji Kimura
 
Ad

More from NTT DATA OSS Professional Services (20)

PDF
Global Top 5 を目指す NTT DATA の確かで意外な技術力
NTT DATA OSS Professional Services
 
PDF
Spark SQL - The internal -
NTT DATA OSS Professional Services
 
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
PDF
Hadoopエコシステムのデータストア振り返り
NTT DATA OSS Professional Services
 
PDF
HDFS Router-based federation
NTT DATA OSS Professional Services
 
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
NTT DATA OSS Professional Services
 
PDF
Apache Hadoopの新機能Ozoneの現状
NTT DATA OSS Professional Services
 
PDF
Distributed data stores in Hadoop ecosystem
NTT DATA OSS Professional Services
 
PDF
Structured Streaming - The Internal -
NTT DATA OSS Professional Services
 
PDF
Apache Hadoopの未来 3系になって何が変わるのか?
NTT DATA OSS Professional Services
 
PDF
Apache Hadoop and YARN, current development status
NTT DATA OSS Professional Services
 
PDF
HDFS basics from API perspective
NTT DATA OSS Professional Services
 
PDF
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
NTT DATA OSS Professional Services
 
PDF
20170303 java9 hadoop
NTT DATA OSS Professional Services
 
PPTX
ブロックチェーンの仕組みと動向(入門編)
NTT DATA OSS Professional Services
 
PDF
Application of postgre sql to large social infrastructure
NTT DATA OSS Professional Services
 
PDF
Apache Hadoop 2.8.0 の新機能 (抜粋)
NTT DATA OSS Professional Services
 
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
NTT DATA OSS Professional Services
 
PDF
商用ミドルウェアのPuppet化で気を付けたい5つのこと
NTT DATA OSS Professional Services
 
PPTX
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
NTT DATA OSS Professional Services
 
Global Top 5 を目指す NTT DATA の確かで意外な技術力
NTT DATA OSS Professional Services
 
Spark SQL - The internal -
NTT DATA OSS Professional Services
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
Hadoopエコシステムのデータストア振り返り
NTT DATA OSS Professional Services
 
HDFS Router-based federation
NTT DATA OSS Professional Services
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
NTT DATA OSS Professional Services
 
Apache Hadoopの新機能Ozoneの現状
NTT DATA OSS Professional Services
 
Distributed data stores in Hadoop ecosystem
NTT DATA OSS Professional Services
 
Structured Streaming - The Internal -
NTT DATA OSS Professional Services
 
Apache Hadoopの未来 3系になって何が変わるのか?
NTT DATA OSS Professional Services
 
Apache Hadoop and YARN, current development status
NTT DATA OSS Professional Services
 
HDFS basics from API perspective
NTT DATA OSS Professional Services
 
SIerとオープンソースの美味しい関係 ~コミュニティの力を活かして世界を目指そう~
NTT DATA OSS Professional Services
 
20170303 java9 hadoop
NTT DATA OSS Professional Services
 
ブロックチェーンの仕組みと動向(入門編)
NTT DATA OSS Professional Services
 
Application of postgre sql to large social infrastructure
NTT DATA OSS Professional Services
 
Apache Hadoop 2.8.0 の新機能 (抜粋)
NTT DATA OSS Professional Services
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
NTT DATA OSS Professional Services
 
商用ミドルウェアのPuppet化で気を付けたい5つのこと
NTT DATA OSS Professional Services
 
今からはじめるPuppet 2016 ~ インフラエンジニアのたしなみ ~
NTT DATA OSS Professional Services
 
Ad

Recently uploaded (9)

PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 

PostgreSQL 9.5 新機能紹介

  • 1. Copyright © 2015 NTT DATA Corporation 2015年9月12日 株式会社 NTTデータ PostgreSQL 9.5 新機能紹介 Java Küeche 勉強会 「RDB最前線」 in 沖縄
  • 2. 2Copyright © 2015 NTT DATA Corporation 本日は PostgreSQL9.5の新機能を紹介します 8/6にAlpha 2 リリース!
  • 3. 3Copyright © 2015 NTT DATA Corporation PostgreSQL 開発者@ NTT データ 社内 PostgreSQL 営業・技術支援 GresCube 開発・サポート PostgreSQL のコア機能を開発 レプリケーション運用性向上 REINDEX SCHEMA / VERBOSE pgbench(ベンチマークツール)の改善 pg_bigm(全文検索モジュール) コア機能へのパッチレビューア 澤田 雅彦 @sawada_masahiko
  • 4. 4Copyright © 2015 NTT DATA Corporation Thanks to • Postgres 9.5 feature highlight (Michael Paquier) • http://michael.otacoo.com/ • Waiting for 9.5 (Hubert Lubaczewski) • http://www.depesz.com/ • 9.5 COMING TO YOU LIVE (Keith Fiske) • http://slides.keithf4.com/pg95live/#/ • PostgreSQL Deep Dive (Satoshi Nagayasu) • http://pgsqldeepdive.blogspot.jp/ • 日々の記録 別館(nuko_yokohama) • http://d.hatena.ne.jp/nuko_yokohama/
  • 5. 5Copyright © 2015 NTT DATA Corporation INDEX PostgreSQLの進化の歴史 PostgreSQL 9.5 新機能紹介 性能向上系機能 開発に役に立つ機能 運用に役に立つ機能 9.6ではこんな機能が入るかも?
  • 6. Copyright © 2015 NTT DATA Corporation 6 PostgreSQLの進化の歴史
  • 7. 7Copyright © 2015 NTT DATA Corporation 進化の歴史 カリフォルニア大学のPostgresプロジェクト(1985~1993)が母体。 近年はエンタープライズ向けの機能・性能改善を重視している。 最新版は、9.4.4(2015年6月リリース) 2003 2004 2005 2006 2007 2008 2009 2000 2011 2010 7.3 8.0 • Windows対応 • セーブポイント • メディア故障対応(PITR) • テーブルスペース 2012 2013 2014 7.4 8.2 • CPUスケール • オンライン索引作成 • GIN: 汎用転置索引 8.4 • Window関数・再帰クエリ • VACUUM用メモリ自動管理 • 他DBMS互換性向上 9.0 • レプリケーション • 列 / 条件付きトリガ • Windows 64bit対応 9.1 • 同期レプリケーション • パーティショニング強化 • 一時テーブル強化 9.2 • カスケードレプリケーション • スケーラビリティ向上 • Index検索の強化 9.3 • 切替え時間短縮 • Viewの改良 • DB間連携強化、等 8.1 • パーティショニング • 2相コミット • バッファ管理改良 9.4 • レプリケーションの 運用性向上 • NoSQL対応強化 • 大容量メモリ対応 8.3 • HOT: 更新性能向上 • VACUUM自動化 • 全文テキスト検索
  • 8. Copyright © 2015 NTT DATA Corporation 8 PostgreSQL 9.5 とは?
  • 9. 9Copyright © 2015 NTT DATA Corporation Q1. 特徴は? A1. 大規模、特にDWH的な用途に強くなった! Q2. いつリリース? A2. 年内にはリリース予定 (8月にAlpha2がリリース)
  • 10. 10Copyright © 2015 NTT DATA Corporation 本日紹介する PostgreSQL 9.5 新機能 性能改善系 • BRIN INDEX • WAL圧縮 運用に役立つ系 • pg_rewind • Row Level Security(RLS) 開発に役立つ系 • UPSERT (INSERT ON CONFLICT) • 外部テーブルの継承 • IMPORT FOREIGN SCHEMA • GROUPING SETS, CUBE, ROLLUP • JSONB型の演算子、関数の追加 • TABLESAMPLE句 3カテゴリ、10機能を紹介
  • 11. Copyright © 2015 NTT DATA Corporation 11 性能改善系 新機能
  • 12. 12Copyright © 2015 NTT DATA Corporation BRIN INDEX (Block Range INdex) Block Range(min/max) 1 - 128 1 ~ 1000 129 - 256 1001 ~ 2000 : : インデックス作成 CREATE INDEX hoge_brin ON hoge USING brin(col); 近接している ブロックの束に対して 列の最小値/最大値 をインデックスに記録 : テーブル BRINインデックス 128 ブロック 128 ブロック 128 ブロック 128 ブロック ブロック 凡例
  • 13. 13Copyright © 2015 NTT DATA Corporation BRIN INDEX (Block Range INdex) Block Range(min/max) 1 - 128 1 ~ 1000 129 - 256 1001 ~ 2000 : : 検索する範囲を 絞り高速に検索 : テーブル BRINインデックス 検索 SELECT * FROM hoge WHERE col BETWEEN 1500 AND 1700; ブロック 凡例
  • 14. 14Copyright © 2015 NTT DATA Corporation BRIN INDEX (Block Range INdex)のFAQ Q. BRIN INDEXの特徴は? A. DWH用途向けのインデックス。 他のインデックスに比べ、インデックスサイズが小さい。(ブロック束の粒度は調整可能) Q. 使いどころは? A. 巨大なテーブルにて、ある特定の範囲を検索するときに有用 。(例えば、8月分の売り上 げを検索するなど) さらに、カラムのデータとテーブル内の物理的な順序が相関しているとより効果的。 Q. 使用上の注意点は? A. Btreeの代替となるインデックスではないことに注意。 静的で大規模なデータ(まさにDWH系)の検索に向いています。
  • 15. 15Copyright © 2015 NTT DATA Corporation WAL圧縮 Full Page Writes(FPW)を圧縮することでWALサイズを縮小 性能改善、ディスク領域削減、レプリケーションに有用 wal_compression = off(デフォルト) / on FPW FPW FPW FPW Compressed FPW OFF ON WALサイズを 縮小 Compressed FPW Compressed FPW Compressed FPW
  • 16. 16Copyright © 2015 NTT DATA Corporation WAL圧縮(2) pgbenchを使って圧縮効果を測定 ※pgbench -c 5 -t 10000で測定 ※②ではfiller列にランダム文字列を設定 約70% 約30% 1,200 MB 1,000 MB 800 MB 600 MB 400 MB 200 MB 0 100MB 70MB 60MB 50MB 40MB 30MB 20MB 10MB 0MB
  • 17. 17Copyright © 2015 NTT DATA Corporation 性能向上系まとめ ・ BRIN INDEX ・ WAL圧縮
  • 18. Copyright © 2015 NTT DATA Corporation 18 開発に役立つ系新機能
  • 19. 19Copyright © 2015 NTT DATA Corporation UPSERT INSERT INTO emp VALUES (3, '鈴木', '開発') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, role = EXCLUDED.role; 行がなければINSERT、あればUPDATEを実行 id name role 1 斉藤 開発 2 田中 営業 3 鈴木 開発 4 山下 経理 5 佐藤 営業 id=3の行がなければ INSERT INTO emp VALUES (3, '鈴木', '開発'); id=3の行があれば UPDATE emp SET name = '鈴木', role = '開発' WHERE id = 3;
  • 20. 20Copyright © 2015 NTT DATA Corporation UPSERT(2) • ON CONFLICT句では列名、制約名が指定可能 • ON CONFLICT (列名) • ON CONFLICT 制約名 • 衝突時(CONFLICT)の動作はDO UPDATE/NOTHINGが指定可能 • DO UPDATE SET col1 = EXCLUDED.col1 WHERE col1 = ‘hoge’ • DO NOTHING • EXCLUDED句を使うことで、VALUES句内のデータを使うことが可能 INSERT INTO emp VALUES (3, '鈴木', '開発') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, role = EXCLUDED.role;
  • 21. 21Copyright © 2015 NTT DATA Corporation FDW強化 PostgreSQL独自機能である Foreign Data Wrapper (FDW)が 大幅に強化されました! FDWの主な9.5新機能 • Foreign Table Inheritance • IMPORT FOREIGN SCHEMA
  • 22. 22Copyright © 2015 NTT DATA Corporation FDW(Foreign Data Wrapper)とは? ID NAME 1 沖縄 2 新潟 … ID NAME 1 沖縄 2 新潟 … 外部テーブル テーブル 外部のデータをPostgreSQLのテーブルとして扱う機能 1,沖縄 2,新潟 … CSVファイル PostgreSQL Oracle read() SELECT SELECT oracle_fdw file_fdw
  • 23. 23Copyright © 2015 NTT DATA Corporation FDW強化 - IMPORT FOREIGN SCHEMA - bar スキーマ リモート先リモート元 CREATE FOREIGN TABLE … CREATE FOREIGN TABLE … CREATE FOREIGN TABLE … これまではリモート元、リモート先それぞれでテーブル定義を実行する必要があった fdw スキーマ CREATE TABLE … CREATE TABLE … CREATE TABLE … 凡例 実テーブル 外部テーブル
  • 24. 24Copyright © 2015 NTT DATA Corporation FDW強化 - IMPORT FOREIGN SCHEMA - bar スキーマ リモート先からテーブル、ビュー、マテビューの定義をインポートできる fdw スキーマ CREATE TABLE … CREATE TABLE … CREATE TABLE … スキーマ内の テーブル、ビュー、マテビュー 定義をインポート IMPORT FOREIGN SCHEMA bar INTO fdw; 凡例 実テーブル 外部テーブル リモート先リモート元
  • 25. 25Copyright © 2015 NTT DATA Corporation FDW強化 - Foreign Table Inheritance - 外部テーブルで継承(INHERITS)が使用可能 =# CREATE FOREIGN TABLE hoge_2015_10 (date timestamp, value text) INHERITS (hoge_parent) SERVER pg_server OPTIONS(table_name ‘hoge_2015_10’);
  • 26. 26Copyright © 2015 NTT DATA Corporation FDW強化 - Foreign Table Inheritance - 外部テーブルも含んだパーティショニングが可能に Partitioning + FDW SQL 子 子 子 子 子 凡例 実テーブル 外部テーブル 親 外部サーバとの通信など 子 CSV postgres_fdw file_fdwpostgres_fdw
  • 27. 27Copyright © 2015 NTT DATA Corporation GROUPING SETS, CUBE, ROLLUP SQLの新しい構文が追加 • 1回のクエリで複数の異なる条件のGROUP処理が簡単・速く brand | size | sum -------+------+----- Foo | | 30 Bar | | 20 | L | 15 | M | 35 | | 50 (5 rows)  SELECT brand, size, sum(sales) FROM items_sold GROUP BY GROUPING SETS ((brand), (size), ()); ブランドごとの集計 サイズごとの集計 全ての集計 <基本となるGRUPPING SETS>
  • 28. 28Copyright © 2015 NTT DATA Corporation GROUPING SETS, CUBE, ROLLUP GRUPPING SET (), (d1), (d2), (d3), (d1,d2), (d1 ,d3), ( d2,d3), (d1,d2,d3) GROUP BY CUBE (d1, d2, d3); 列挙された要素について、 全ての組み合わせごとに集計 いずれもGROUPING SETをさらに便利にする構文 GRUPPING SET (), (d1), (d1,d2), (d1,d2,d3) 列挙された要素について、 左側から絞り込んだ組み合わせごとに集計 GROUP BY CUBE (d1, d2, d3); GROUP BY ROLLUP (d1, d2, d3);
  • 29. 29Copyright © 2015 NTT DATA Corporation PostgreSQLにおけるJSONの歴史 v9.2 (2012年) v9.3 (2013年) v9.4 (2014年) v9.5 TEXT型 + 構文チェッカ 利用可能な関数と演算子 はわずか 演算子4個追加 要素抽出の演算子(->) 関数10個追加 JSONから行への変換 バイナリ形式 + 構文チェッカ GINインデックス対応 JSON型 サポート JSONB型 サポート !? 関数と演算子の 充実化
  • 30. 30Copyright © 2015 NTT DATA Corporation JSONB型に追加された新しい関数・演算子 関数 演算子 -、-# 削除 || 追加 jsonb_concat() 追加 jsonb_delete() 削除 jsonb_set() 更新 jsonb_pretty() JSONB型を見やすく整形 NEW! NEW! NEW! NEW! NEW! NEW! ※JSONB型でのみ使用できる関数・演算子です
  • 31. 31Copyright © 2015 NTT DATA Corporation JSONB型に追加された新しい関数・演算子 - 追加 - ※同様のことがjsonb_concat関数で可能です jsonb=# SELECT '{ "key1" : 1, "key2" : 2 }'::jsonb || '{"key3" : 3}'::jsonb ; ?column? ----------------------------------- {"key1": 1, "key2": 2, "key3": 3} jsonb=# SELECT '{ "key1" : 1, "key2" : 2 }'::jsonb || '{"key1" : 999}'::jsonb ; ?column? -------------------------- {"key1": 999, "key2": 2}
  • 32. 32Copyright © 2015 NTT DATA Corporation JSONB型に追加された新しい関数・演算子 - 削除 - ※同様のことがjsonb_delete関数で可能です jsonb=# SELECT '{ "key1" : 1, "key2" : 2 }'::jsonb - 'key1'; ?column? ------------- {"key2": 2} jsonb=# SELECT '{ "key1" : { "key11" : 11 }, "key2" : 2 }'::jsonb #- '{key1, key11}'; ?column? ------------------------- {"key1": {}, "key2": 2} jsonb=# SELECT '[ "hoge", "bar", "foo" ]'::jsonb - 1; ?column? ----------------- ["hoge", "foo"]
  • 33. 33Copyright © 2015 NTT DATA Corporation JSONB型に追加された新しい関数・演算子 - 追加・置換 - jsonb=# SELECT jsonb_set('{ "key1" : 1, "key2" : 2 }'::jsonb, '{"key1"}', '999'); jsonb_set -------------------------- {"key1": 999, "key2": 2} jsonb=# SELECT jsonb_set('{ "key1" : 1, "key2" : 2 }'::jsonb, '{"key999"}', '999'); jsonb_set --------------------------------------- {"key1": 1, "key2": 2, "key999": 999}
  • 34. 34Copyright © 2015 NTT DATA Corporation JSONB型に追加された新しい関数・演算子 - 追加・置換 - jsonb=# SELECT jsonb_set('{ "key1" : { "key:array" : [1,2,3] } , "key2" : 2 }'::jsonb, '{"key1", "key:array"}', '999'); jsonb_set ----------------------------------------- {"key1": {"key:array": 999}, "key2": 2} jsonb=# SELECT jsonb_set('{ "key1" : { "key:array" : [1,2,3] } , "key2" : 2 }'::jsonb, '{"key1", "key:array", 1}', '999'); jsonb_set ------------------------------------------------- {"key1": {"key:array": [1, 999, 3]}, "key2": 2}
  • 35. 35Copyright © 2015 NTT DATA Corporation JSONB型に追加された新しい関数・演算子 - 整形 - postgres=# SELECT jsonb_pretty( '{ "key1" : { "nest-key1" : [1, 2], "nest-key2" : { "nest-nest-key3" : "value" }}}‘ ); jsonb_pretty --------------------------------------- { + "key1": { + "nest-key1": [ + 1, + 2 + ], + "nest-key2": { + "nest-nest-key3": "value“ + } + } + } (1 row)
  • 36. 36Copyright © 2015 NTT DATA Corporation TABLESAMPLE句 • サンプリングメソッドをBERNOULLI、SYSTEMの2つから選択 • 取得する割合をパーセント(%)で指定 • REPEATABLEオプションを使うことでサンプルを選択することが可能 • TABLESAMPLE SYSTEM(10) REPEATABLE(4); hoge テーブル 結果セット SELECT * FROM hoge TABLESAMPLE SYSTEM(10); Sample Scan テーブル内の行を サンプリング して結果を取得
  • 37. 37Copyright © 2015 NTT DATA Corporation TABLESAMPLE句(2) タプル単位でランダムに選択 • シーケンシャルI/O • SYSTEMより遅い タプル1 タプル2 タプル7 タプル8 タプル4 タプル5 タプル13 タプル9 タプル10 タプル12 タプル3 タプル11 BERNOULLIを指定 タプル1 タプル2 タプル7 タプル8 タプル4 タプル5 タプル13 タプル9 タプル10 タプル12 タプル3 タプル11 SYSTEMを指定 テーブル テーブル ブロック 選択されたタプル 選択されないタプル サンプリング方法は、BERNOULLI(ベルヌーイ)、SYSTEMから選択可能 ブロック単位でランダムに選択 • ランダムI/O • BERNOULLIより早い
  • 38. 38Copyright © 2015 NTT DATA Corporation TABLESAMPLE句(3) • BERNOULLI、SYSTEM共にページまたはタプル毎に指定された確率で選択される • 1000行のテーブルで10%を指定してもちょうど100行とは限らない • 選択されるタプルはデッドタプルも含む • 確実に見える行のみをサンプリング対象としたい場合は、事前にVACUUMまたはVACUUM FULLが必要 • WHERE句と併用した場合は、「サンプリング」→「WHERE句の評価」の順 • サンプリングをしてテーブルを結合する場合は注意が必要 • サンプリングの影響でテーブルの一貫性がないように見えてしまうことも • 結合したテーブルに対してサンプリングしたい場合はマテビューを使う
  • 39. 39Copyright © 2015 NTT DATA Corporation TABLESAMPLE句についてのFAQ Q. SYSTEM、BERNOULLIの使い分けは? A. 遅くてもより正確な行数を取得したい→BERNOULI 多少取得行数はずれるが、速くサンプリングしたい→SYSTEM Q. TABLESAMPLEの使いどころは? A. 例えば、 • テーブルの中身全部をちゃんと見なくてもいい検索の時(傾向分析等) • 総量計算の見積もり • 「10%サンプリングして結果を10倍」 > 「全件カウント」 • SELECT item, count(*) * 10 FROM item_table TABLESAMPLE BERNOULLI(10) WHERE item = ‘xxx’ GROUP BY item; など
  • 40. 40Copyright © 2015 NTT DATA Corporation 開発に役立つ系新機能まとめ ・ UPSERT (INSERT ON CONFLICT) ・ FDW強化(Foreign table inheritance, IMPORT FOREIGN SCHEMA) ・ GROUPING SETS, CUBE, ROLLUP ・ JSONB型の演算子、関数の追加 ・ TABLESAMPLE句
  • 41. Copyright © 2015 NTT DATA Corporation 41 運用に役立つ系新機能
  • 42. Copyright © 2015 NTT DATA Corporation 42 バージョンアップ時の非互換に注意 ちょっとその前に。
  • 43. 43Copyright © 2015 NTT DATA Corporation 演算子の優先度が変わりました 9.4以前の優先度 . :: [ ] + - ^ * / % + - IS ISNULL NOTNULL (any other operator) IN BETWEEN OVERLAPS LIKE ILIKE SIMILAR < > = NOT AND OR 9.5の優先度 . :: [ ] + - ^ * / % + - (any other operator) OVERLAPS BETWEEN IN LIKE ILIKE SIMILAR < > = <= >= <> IS ISNULL NOTNULL NOT AND OR 例えば、  IS, IS NULL,IS NOT NULLが同じ優先度に  「<,>,=…」と「IS,IS NULL…」の優先度が逆転 よりSQL標準に合った、演算子の優先度になりました
  • 44. 44Copyright © 2015 NTT DATA Corporation 演算子の優先度が変わりました ※ 優先度は「IS」 > 「>」なので、「3 IS true」が先に評価される ※優先度は「IS」 < 「>」 SELECT 4 > 3 IS true; (9.4以前) ERROR: argument of IS TRUE must be type boolean, not type integer (9.5) ?column? ---------- t
  • 45. 45Copyright © 2015 NTT DATA Corporation 演算子の優先度が変わりました ただ、優先度が変わるケースがわかりづらい。。 9.5にバージョンアップ時に優先度の変更に気づくためには? operator_precedence_warning = on (9.5) =# SET operator_precedence_warning to on; SET =# SELECT 4 > 3 IS true; WARNING: operator precedence change: IS is now lower precedence than > LINE 1: SELECT 4 > 3 IS true; ^ ?column? ---------- t (1 row) バージョンアップ時は、 このパラメータをON にして、WARNING が出たSQLを直せば OK!
  • 46. Copyright © 2015 NTT DATA Corporation 46 運用に役立つ系新機能
  • 47. 47Copyright © 2015 NTT DATA Corporation ROW LEVEL SECURITY (RLS) id name age role 1 斉藤 27 開発 2 田中 53 営業 3 鈴木 45 開発 4 山下 39 経理 5 佐藤 31 営業 role = ‘開発’ が見れるユーザ ユーザが閲覧・操作できる行を指定できる機能 GRANTによるアクセス制御 role = ‘営業’ が見れるユーザ テーブルへの アクセス権が ないユーザ スーパーユーザー または テーブルの所有者 RSLによるアクセス制御
  • 48. 48Copyright © 2015 NTT DATA Corporation ROW LEVEL SECURITY (RLS) id name age role 1 斉藤 27 開発 2 田中 53 営業 3 鈴木 45 開発 4 山下 39 経理 5 佐藤 31 営業 ユーザfoo empテーブル 例) 開発者の情報のみをユーザfooに閲覧許可したい ① CREATE POLICY emp_foo_policy ON emp FOR SELECT TO foo USING (role = '開発'); ② ALTER TABLE emp ENABLE ROW LEVEL SECURITY; SELECT * FROM tmp;
  • 49. 49Copyright © 2015 NTT DATA Corporation pg_rewind これまではフェイルバック時にはフルバックアップの転送が必須 レプリケー ション マスタ スタン バイ 停止 マスタ マスタスタン バイ レプリケー ション 停止 マスタ 両系稼働 マスタ単独稼働 両系稼働 フルバックアップ転送 マスタ故障により フェイルオーバ 旧マスタの再組込み (フェイルバック) 面倒!大変!時間かかりすぎ! 9.4 フル バック アップ
  • 50. 50Copyright © 2015 NTT DATA Corporation pg_rewind フェイルバック時にDBデータを差分バックアップ転送できる機能 レプリケー ション マスタ スタン バイ 停止 マスタ マスタスタン バイ レプリケー ション 停止 マスタ 差分 バック アップ 両系稼働 マスタ単独稼働 両系稼働 差分バックアップ転送 マスタ故障により フェイルオーバ 旧マスタの再組込み (フェイルバック) pg_rewind フェイルバック時間を大幅短縮! 9.5
  • 51. 51Copyright © 2015 NTT DATA Corporation 運用に役立つ機能まとめ • Row Level Security • pg_rewind
  • 52. Copyright © 2015 NTT DATA Corporation 52 9.6には、こんな機能が入るかも?
  • 53. 53Copyright © 2015 NTT DATA Corporation 9.6提案中の機能 PG PG PG backend 凡例 実テーブル 外部テーブル Parallel Query worker worker worker Join Pushdown SQL VACUUM 強化
  • 54. 54Copyright © 2015 NTT DATA Corporation マルチ同期レプリケーション(quorum commit) マスタ スタンバイ 例えば、 スタンバイのうち2台から応答があったら 同期レプリケーションは完了と判断したい! 同期レプリケーションのより柔軟な構成を可能にする機能
  • 55. 55Copyright © 2015 NTT DATA Corporation さいごに PostgreSQL 9.5 使ってみませんか? ソースコードはこちら http://www.postgresql.org/ftp/source/v9.5alpha2/ バグ報告はこちら http://www.postgresql.org/support/submitbug/
  • 56. Copyright © 2011 NTT DATA Corporation Copyright © 2015 NTT DATA Corporation ご清聴ありがとうございました
  • 57. Copyright © 2015 NTT DATA Corporation 57 参考資料
  • 58. 58Copyright © 2015 NTT DATA Corporation 参照スケーラビリティ向上 9.4に比べ、参照スケーラビリティが大きく向上 Scalability and Performance Improvements in PostgreSQL by Amit Kapila https://www.pgcon.org/2015/schedule/attachments/378_postgresql-95-scalability-perf-improvements.pdf DBデータが全てShared Bufferに収まるケース DBデータが全てメモリに収まるケース LWLock を改善 バッファ置換、 バッファ管理方法 を改善
  • 59. 59Copyright © 2015 NTT DATA Corporation id … 10 20 … 30 … 40 … 50 … SKIP LOCKED句 SELECT * FROM hoge WHERE id > 20 FOR UPDATE NOWAIT; SELECT * FROM hoge WHERE id > 20 FOR UPDATE SKIP LOCKED; 行ロックが取れる行だけロックして結果を取得 30 … 50 … ② 行ロックが取れる行のみ (id = 30と50) 結果を返す ② 行ロックが一つでも 取れなかったら ERROR終了 ① 他処理によって 既に行ロックされてる
  • 60. 60Copyright © 2015 NTT DATA Corporation スタンバイWALアーカイブ スタンバイサーバでのWALアーカイブが可能に! archive_modeにalwaysが追加 レプリケー ション マスタ スタン バイ スタン バイ スタン バイ WAL アーカイブ archive_mode = off WAL アーカイブ archive_mode = always archive_mode = always