SlideShare a Scribd company logo
1 of 100
Download to read offline
ハッカーズチャンプルーハッカーズチャンプルー 20162016
(2016-06-25)(2016-06-25)
PostgreSQL 9.6PostgreSQL 9.6 がが
やってくる!やってくる!
ぬこ@横浜ぬこ@横浜 (@nuko_yokohama)(@nuko_yokohama)
http://www.yunphoto.net
2
自己紹介
「 PostgreSQL ラーメン」
でググってください。
3
4
自己紹介
某通信系 SI 会社@横浜 で働いてます。
JPUG( 日本 PostgreSQL ユーザ会 ) 枠
で、たまに登壇したりしている
PostgreSQL おじさんです。
PostgreSQL の変な使い方を探るのが趣味
( 漢数字型 , あいまい全文検索 , neo4j_fdw, 数当てゲーム ,
スーパーユーザ強制ロギング HOOK, 履歴保存データ型などなど )
5
今日は今日は JPUGJPUG 枠として枠として
沖縄に来ました。沖縄に来ました。
初の沖縄なので、ちょっと初の沖縄なので、ちょっと
テンション上がってます。テンション上がってます。
http://www.yunphoto.net
6
目次
はじめに
PostgreSQL の概要と歴史
PostgreSQL 9.6 の新機能
おわりに
7
はじめに
8
DBMS の話とか
地味ですまんな
9
でも DBMS 自体は
重要なミドルウェア
というのは今も昔も
変わりないのです
10
さて
11
PostgreSQL を
知ってる?
使っている?
仕事で使ってる?
12
PostgreSQL の
概要と歴史
13
PostgreSQL の概要
MySQL と並ぶ OSS DBMS
ライセンスは BSD ライクなもの
高度なクエリにも対応
性能面でも商用 DBMS とも遜色なし
9.0 以降はレプリケーションも対応
多種多様なデータ型サポート
非常に高い拡張性
活発な開発コミュニティ
14
要するに、無料で使える
スゲー ORDBMS
15
PostgreSQL の歴史
(古代~近世)
POSTGRES
プロジェクト
の時代
Postgres95
の時代
※SQL サポート
PostgreSQL
の時代
※6.0 から開始1986 年
1995 年
1997 年
2015 年
POSTGRES プロジェクト
からの年齢だと
何気にアラサー・・・
16
6.0 ~
発展途上の時代
GEQO
マルチバイト文字セット
MVCC
7.0 ~
やっと実用的に
WAL
TOAST
VACUUM 改善
8.0 ~
商用レベルへ
Windows 対応
PITR
自動 VACUUM
HOT
9.0 ~
エンタープライズ化
レプリケーション
外部表
メニーコア性能向上
マテリアライズドビュー
JSON 対応
1997 年
2000 年
2005 年
2010 年
PostgreSQL の歴史(近代)
昔の (7.x 時代 ) の感覚で
PostgreSQL 使えねーと
思ってる人もまだいるのかなあ。
17
9.0
レプリケーション
ストアド改良
列トリガ
排他制約
64bit Windows 対応
9.1
同期レプリケーション
外部データラッパ (FDW)
WITH 句+更新文
UNLOGGED TABLE
9.2
パフォーマンス向上
カスケードレプリケーション
Index Only Scan
範囲型サポート
JSON 型サポート
9.3
マテリアライズドビュー
更新可能ビュー
更新 FDW
JSON 型の機能拡張
エンタープライズ向け用途エンタープライズ向け用途
実験的な高度な機能実験的な高度な機能
2010 年
2011 年
2012 年
2013 年
PostgreSQL の歴史(現代)
レプリケーションが本体機能に
なったことで色々な案件で
使われるようになったのかな?
18
9.4
JSONB
ALTER SYSTEM
マテビュー改善
ロジカル・デコーディング
WAL バッファ並列挿入
9.5
BRIN
UPSERT
Row Level Security
Import foreign schema
pg_rewind
9.6
さて、何が入るのか!
そして・・・そして・・・ 9.4, 9.59.4, 9.5
そして開発中のそして開発中の 9.69.6 に至るに至る
2014 年
2015 年
2016 年
PostgreSQL の歴史(現代)
9.4, 9.5 でも面白い機能が
いろいろ入りました
19
まずは・・・
祝・ PostgreSQL
9.6 beta1 リリースPostgreSQL 9.6 beta1 Release!
私たちは喜んでいます私たちは喜んでいます
(2016-05-12)
20
PostgreSQL 9.6( 開発中 )
開発自体は昨年から開始
数回の commitfest で取り込む機能を議論
2015/11, 2016/01, 2016/03
2016/05/12 beta1 リリース
2016/06/23 beta2 リリース
以降、 beta→RC
2016/09 9.6.0 リリース ( 予定? )
なんと、一昨日
beta2 リリース!
21
余談ですが、ちょっと前に
コミュニティでは
次を 9.6 beta2 にするか
10.0 beta2 にするか議論してました
結局、 9.6 になったみたい
22
PostgreSQL 9.6 の
新機能
23
PostgreSQL 9.6 新機能
新機能カテゴリ 項目数 備考
サーバ 67 性能向上 33 項目、監視 11 項目
レプリケーションとリカバリ 5
クエリ 3
ユーティリティコマンド 13
権限管理 3
データ型 9
関数 17
サーバサイド言語 8
クライアント・インタフェース 4
クライアント・アプリケーション 25 psql は 12 項目
サーバ・アプリケーション 3
ソースコード 20
追加モジュール 21 postgres_fdw は 7 項目
beta1 時点の情報
合計 198 項目
24
Parallel sequential scans, joins and aggregates
Elimination of repetitive scanning of old data by
autovacuum
Synchronous replication now allows multiple standby
servers for increased reliability
Full-text search for phrases
Support for remote joins, sorts, and updates in
postgres_fdw
Substantial performance improvements, especially in
the area of improving scalability on many-CPU servers
PostgreSQL 9.6 主な新機能
25
PostgreSQL 9.6 主な新機能
Parallel sequential scans, joins and aggregates
Elimination of repetitive scanning of old data by
autovacuum
Synchronous replication now allows multiple standby
servers for increased reliability
Full-text search for phrases
Support for remote joins, sorts, and updates in
postgres_fdw
Substantial performance improvements, especially in
the area of improving scalability on many-CPU servers
26
パラレルクエリ
今、一番 HOT な機能。
beta1 から beta2 で
GUC 等が変更されてました。
27
tmp=# EXPLAIN (ANALYZE, VERBOSE) SELECT AVG(data) FROM tmp;
Aggregate (cost=16925.00..16925.01 rows=1 width=4) (actual time=187.215..187.215 rows=1 loops=1)
Output: avg(data)
-> Seq Scan on public.tmp (cost=0.00..14425.00 rows=1000000 width=4) (actual time=0.043..87.114
rows=1000000 loops=1)
Output: id, data
Planning time: 0.041 ms
Execution time: 187.249 ms
PostgreSQL 9.5 まで
1 つのクエリを 1 プロセスで順々に処理していた。
SeqScan Aggregate
28
tmp=# EXPLAIN (ANALYZE, VERBOSE) SELECT AVG(data) FROM tmp;
Finalize Aggregate (cost=10633.55..10633.56 rows=1 width=32) (actual time=116.537..116.537 rows=1 loops=1)
Output: avg(data)
-> Gather (cost=10633.33..10633.54 rows=2 width=32) (actual time=114.831..116.524 rows=3 loops=1)
Output: (PARTIAL avg(data))
Workers Planned: 2
Workers Launched: 2
-> Partial Aggregate (cost=9633.33..9633.34 rows=1 width=32) (actual time=110.293..110.294 rows=1 loops=3)
Output: PARTIAL avg(data)
Worker 0: actual time=104.469..104.470 rows=1 loops=1
Worker 1: actual time=111.816..111.816 rows=1 loops=1
-> Parallel Seq Scan on public.tmp (cost=0.00..8591.67 rows=416667 width=4) (actual time=3.734..66.54
7 rows=333333 loops=3)
Output: id, data
Worker 0: actual time=11.160..65.808 rows=295156 loops=1
Worker 1: actual time=0.014..57.334 rows=248600 loops=1
Planning time: 0.046 ms
Execution time: 116.608 ms
PostgreSQL 9.6 から
1 つのクエリでも複数プロセスを使って処理可能になった。
Paralell
SeqScan
Partial
Aggregate
Gather
Final
Aggregate
Worker
Worker
Worker
Worker
29
パラレルスキャン関連のパラメータ
パラレルスキャンパラメータ
パラメータ名 意味 デフォルト値 備考
max_worker_processes ワーカープロセス数の最
大値
8 変更のためには再起動が必要
max_parallel_workers_per
_gather
並列度の最大値 2 beta2 で、名前が変わった。
0 にすると並列化しなくなる。
force_parallel_mode 並列処理を強制させる。 of
parallel_setup_cost ワーカプロセス起動の推
定コスト
1000
parallel_tuple_cost ワーカプロセスから別プ
ロセスへ1タプルを転送
する推定コスト
0.1
min_parallel_relation_size 並列化する最小のテーブ
ルサイズ
8 (MB) beta2 で追加
これと検索対象のテーブルサイズに依存
30
並列数の決定には、サーバの CPU 数は
何も関係していない!(重要)
おおまかに言えば、テーブルサイズ(ページ数)が
min_parallel_relation_size( デフォルト: 1000) ページを
超えると並列スキャンを行う。
以降、 3 倍毎に並列数が増加する。
並列数の決定
倍数も今後調整可能に
なるのかな・・・?
31
テーブルサイズとパラメータによる並列数決定の例
並列数の決定
テーブルサイズ
(ページ数)
max_worker
_processes
max_parallel
_workers_pe
r_gather
ワーカ
起動数
補足
1640 8 2 0 ページ数は 1000 を超えて
いるが・・・
3279 8 2 2 3000 を超えたのでワーカを
2 つ起動する
9837 8 4 3 3000*3 を超えたのでワーカ
を 3 つ起動する
9837 8 0 0 max_parallel_workers_per
_gather が 0 なので起動し
ない
9837 1 3 1 max_worker_processes が
1 に制限されている。
1 じゃないの?
→ 次スライド参照
beta1 での
検証結果です
32
bench=# SHOW parallel_setup_cost ;
parallel_setup_cost
---------------------
1000
(1 row)
bench=# EXPLAIN ANALYZE SELECT AVG(abalance) FROM pgbench_accounts ;
QUERY PLAN
Aggregate (cost=2890.00..2890.01 rows=1 width=32) (actual time=20.053..20.054 rows=1 loops=1)
-> Seq Scan on pgbench_accounts (cost=0.00..2640.00 rows=100000 width=4) (actual time=0.006..6.521
rows=100000 loops=1)
Planning time: 0.208 ms
Execution time: 20.093 ms
(4 rows)
パラレルクエリ用変数の調整
前スライドでページ数が 1600 のときにワーカが起動しないの
は、 cost 上パラレルクエリで実施するよりも、フツーに
SeqScan したほうが低いと判断されたから。
33
bench=# SET parallel_setup_cost TO 300;
SET
bench=# EXPLAIN ANALYZE SELECT AVG(abalance) FROM pgbench_accounts ;
QUERY PLAN
Finalize Aggregate (cost=2675.41..2675.42 rows=1 width=32) (actual time=12.707..12.708 rows=1 loops=1)
-> Gather (cost=2675.29..2675.40 rows=1 width=32) (actual time=12.434..12.698 rows=2 loops=1)
Workers Planned: 1
Workers Launched: 1
-> Partial Aggregate (cost=2375.29..2375.30 rows=1 width=32) (actual time=9.743..9.743 rows=1
loops=2)
-> Parallel Seq Scan on pgbench_accounts (cost=0.00..2228.24 rows=58824 width=4) (actual
time=0.007..6.190 rows=
50000 loops=2)
Planning time: 0.049 ms
Execution time: 13.414 ms
(8 rows)
パラレルクエリ用変数の調整
paralell_setup_cost/paralell_tuple_cost を調整することで、
パラレルクエリに変更が可能。
上の例は paralell_setup_cost を 1000→300 に調整。
34
パラレルスキャン対象でない実行計画
パラレルスキャン対象外の SQL 関数を
使っているとき
max_worker_processes,
max_parallel_workers_per_gather
等のパラメータ設定
他、細々とした制約があるっぽい
パラレルスキャンできない時
35
特定の SQL 関数を含む場合、
パラレルスキャンの実行計画が選択されない。
一番身近な関数だと、シーケンス制御関数の
nextval(), currval(), setval(), lastval() などが
パラレルスキャン対象外となる。
パラレルスキャンできない SQL 関数の一覧は、
以下の SQL 文で取得可能。
パラレルスキャンできない
SQL 関数
SELECT proname FROM pg_proc WHERE proparallel = 'u';
36
PostgreSQL 9.6 新機能
Parallel sequential scans, joins and aggregates
Elimination of repetitive scanning of old data by
autovacuum
Synchronous replication now allows multiple standby
servers for increased reliability
Full-text search for phrases
Support for remote joins, sorts, and updates in
postgres_fdw
Substantial performance improvements, especially in
the area of improving scalability on many-CPU servers
37
autovacuum 改善
38
9.5 までの autovacuum では
XID 周回を防ぐための vacuum 時に
全ページを処理していた。
9.6 からは frozen tuples しか含まない
ページを Visibility Map を参照して
効率的に処理をスキップできる。
autovacuum 改善
39
この改善の恩恵
変更がほとんどないような
巨大なテーブルの
autovacuum 時のコストを
大きく削減する。
目立たないけど、とても重要な改善
autovacuum 改善
40
PostgreSQL 9.6 新機能
Parallel sequential scans, joins and aggregates
Elimination of repetitive scanning of old data by
autovacuum
Synchronous replication now allows multiple standby
servers for increased reliability
Full-text search for phrases
Support for remote joins, sorts, and updates in
postgres_fdw
Substantial performance improvements, especially in
the area of improving scalability on many-CPU servers
41
複数同期
スタンバイサーバ
42
Master
async
async
PostgreSQL 9.5 まで
同期レプリケーション可能な
スレーブサーバは 1 台のみ。
Slave
Slave
Slave
sync
43
Master
sync
sync
PostgreSQL 9.6 から
同期レプリケーション可能な
スレーブサーバが N 台に!
Slave
Slave
Slave
sync
( N 台構成のフェールオーバ機構、作るの大変そう・・・)
44
primary_conninfo = '2(standby1, standby2, standby3)'
synchronous_standby_names の書き方
複数同期させる場合には recovery.conf の primary_conninfo に
N(name, name, ...) みたいに書く。
primary_conninfo = 'standby1, standby2, standby3'
従来の記法も対応している。
この場合は、同期サーバ数は 1 になる。
45
PostgreSQL 9.6 新機能
Parallel sequential scans, joins and aggregates
Elimination of repetitive scanning of old data by
autovacuum
Synchronous replication now allows multiple standby
servers for increased reliability
Full-text search for phrases
Support for remote joins, sorts, and updates in
postgres_fdw
Substantial performance improvements, especially in
the area of improving scalability on many-CPU servers
46
PostgreSQL 自体に
全文検索機能は
昔からある。
47
9.6 から入った機能
フレーズ検索
ts_phrase()
<-> 演算子
48
tsearch=# SELECT
data
FROM animal
WHERE to_tsvector('english', data) @@ to_tsquery('english', 'dog');
data
--------------------------------------------------
I like cats and dogs.
In my bed, four dogs and five cats are sleeping.
Miss Magee's dog is very strong.
(3 rows)
tsearch=# SELECT
data
FROM animal
WHERE to_tsvector('english', data) @@ to_tsquery('english', 'dog & cat');
data
--------------------------------------------------
I like cats and dogs.
In my bed, four dogs and five cats are sleeping.
(2 rows)
これまでの全文検索
複数のワードの指定はできたが、語順を意識した検索は不可
(dog, cat の順に出現する文書も cat, dog の順に出現する文書
も両方ヒットしていた )
49
tsearch=# SELECT
data
FROM animal
WHERE
to_tsvector('japanese', data) @@
tsquery_phrase(
to_tsquery('japanese', 'dog'), to_tsquery('japanese', 'cat'), 3);
data
--------------------------------------------------
In my bed, four dogs and five cats are sleeping.
(1 row)
tsearch=# SELECT
data
FROM animal
WHERE
to_tsvector('japanese', data) @@
tsquery_phrase(
to_tsquery('japanese', 'cat'), to_tsquery('japanese', 'dog'), 3);
data
-----------------------
I like cats and dogs.
(1 row)
フレーズ検索
それぞれ、「 dog→cat 」「 cat→dog 」の順序で並んだテキ
ストが検索されている。
フレーズ検索関数 tsquery_phrase() を使う。
50
tsearch=# SELECT
data
FROM animal
WHERE
to_tsvector(data) @@
(to_tsquery('like') <-> to_tsquery('cat'));
data
-----------------------
I like cats and dogs.
(1 row)
<-> 演算子
X <-> Y は
tsquery_phrase( X, Y, 1) と同義です。
全文検索用演算子として、 9.6 では
新たに
<->
という演算子が追加された。
※ 演算子が簡単に追加できるのも PostgreSQL のいいところ。
51
閑話休題
52
なんかさっきから
英文の例しか
ないんだけど
日本語全文検索は?
53
PostgreSQL
本体機能だけでは
日本語全文検索は
できない ( 絶望 )
54
追加モジュール
textseach_ja を使えば
日本語全文検索は可能
http://textsearch-ja.projects.pgfoundry.org/textsearch_ja.html
しかし、公式には 9.0 で
開発が止まっている(泣)
55
が、少し修正すれば
一応、 PostgreSQL 9.6 でも
textsearch_ja は
動くようです(検証中)
56
9.6 + textsearch_ja
とりあえず、フレーズ検索を使っても動くようです。
tsearch=# SELECT
ts_rank_cd(
to_tsvector('japanese', data),
tsquery_phrase(
to_tsquery('japanese', ' セリヌンティウス '),
to_tsquery('japanese', ' メロス '), 3) ),
ts_headline('japanese', data,
tsquery_phrase(to_tsquery(
'japanese', ' セリヌンティウス '), to_tsquery('japanese', ' メロス '), 10))
FROM meros
WHERE to_tsvector('japanese', data) @@ tsquery_phrase(
to_tsquery('japanese', ' セリヌンティウス '), to_tsquery('japanese', ' メロス '), 3);
ts_rank_cd | ts_headline
0.1 | <b> セリヌンティウス </b> 。」 <b> メロス </b> は眼に涙を浮べて言った。「私を殴れ。
ちから一ぱいに頬を殴れ。私は、途中で一度、悪い
(1 row)

tsquery_phrase() と textsearch_ja の組み合わせ例
57
PostgreSQLPostgreSQL でのでの
全文検索については全文検索については
それだけでそれだけで 11 時間くらい時間くらい
話せるほどネタが多いので話せるほどネタが多いので
全文検索に興味があったら全文検索に興味があったら
また沖縄に呼んでくださいまた沖縄に呼んでください
58
PostgreSQL 9.6 新機能
Parallel sequential scans, joins and aggregates
Elimination of repetitive scanning of old data by
autovacuum
Synchronous replication now allows multiple standby
servers for increased reliability
Full-text search for phrases
Support for remote joins, sorts, and updates in
postgres_fdw
Substantial performance improvements, especially in
the area of improving scalability on many-CPU servers
59
postgres_fdw 改善
リモート側での
結合・ソート・更新
60
postgres_fdw とは
別の PostgreSQL データベース内の表を
通常の表のように扱える
FDW(Foreign Data Wrapper) の一種
9.3 から利用可能
DBLINK みたいな機能。
透過的に SQL で書けるという
のがメリットです
61
local
PostgreSQL 9.5 まで
remote サーバのテーブルから結果を受け取って、
local 側で結合やソートを実施
更新時はカーソルを使って 1 行ずつ更新・・・
remote
外部テーブル 実テーブル
結合やソートを
含むクエリ
結合処理
ソート処理
結果
62
local
PostgreSQL 9.6 から
remote サーバで結合やソートを実施。
サーバ間転送量の削減になるかも!
更新文もカーソルを使わず remote サーバでそのまま実行。
remote
外部テーブル 実テーブル
結合やソートを
含むクエリ
そのまま結果
結合処理
ソート処理
63
bench=# EXPLAIN ANALYZE VERBOSE
SELECT AVG(a.data1), AVG(a.data2)
FROM table_a a JOIN table_b b ON (a.id = b.id)
WHERE a.data1 = 10000 ;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------
-----------
Aggregate (cost=349.93..349.94 rows=1 width=8) (actual time=1741.557..1741.558 rows=1 loops=1)
Output: avg(a.data1), avg(a.data2)
-> Hash Join (cost=238.80..349.12 rows=161 width=8) (actual time=99.229..1741.404 rows=11 loops=1)
Output: a.data1, a.data2
Hash Cond: (b.id = a.id)
-> Foreign Scan on public.table_b b (cost=100.00..197.75 rows=2925 width=4) (actual time=1.066..1648.609
rows=1000000 loops=1)
Output: b.id, b.data1, b.data2
Remote SQL: SELECT id FROM public.table_b
-> Hash (cost=138.66..138.66 rows=11 width=12) (actual time=0.807..0.807 rows=11 loops=1)
Output: a.data1, a.data2, a.id
Buckets: 1024 Batches: 1 Memory Usage: 9kB
-> Foreign Scan on public.table_a a (cost=100.00..138.66 rows=11 width=12) (actual time=0.794..0.796 rows=11
loops=1)
Output: a.data1, a.data2, a.id
Remote SQL: SELECT id, data1, data2 FROM public.table_a WHERE ((data1 = 10000))
Planning time: 1.559 ms
Execution time: 1748.602 ms
(16 rows)
9.5 での実行計画例(結合)
結合処理はローカル側で行っている。
結合処理のソースはリモートからローカルに転送されている。
64
bench=# EXPLAIN ANALYZE VERBOSE
SELECT AVG(a.data1), AVG(a.data2)
FROM table_a a JOIN table_b b ON (a.id = b.id)
WHERE a.data1 = 10000 ;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------
----------------------
Aggregate (cost=342.59..342.60 rows=1 width=64) (actual time=0.560..0.561 rows=1 loops=1)
Output: avg(a.data1), avg(a.data2)
-> Foreign Scan (cost=100.00..341.78 rows=161 width=8) (actual time=0.552..0.554 rows=10 loops=1)
Output: a.data1, a.data2
Relations: (public.table_a a) INNER JOIN (public.table_b b)
Remote SQL: SELECT r1.data1, r1.data2 FROM (public.table_a r1 INNER JOIN public.table_b r2 ON (((r1.id = r2.id)) AND
((r1.data1 = 10000))))
Planning time: 0.123 ms
Execution time: 0.789 ms
(8 rows)
9.6 での実行計画例(結合)
【ポイント】
リモートサーバで結合 SQL を実行
その結果、ローカルサーバに転送される行数は 10 行!
実行時間も 2000 倍以上向上!
65
local
PostgreSQL 9.5 まで
remote サーバのテーブルから結果を受け取って、
local 側で結合やソートを実施
remote
外部テーブル 実テーブル
結合やソートを
含むクエリ
結合処理
ソート処理
結果
1000000+10 件の
レコードが転送される
66
local
PostgreSQL 9.6 から
サーバ間転送量の削減→大幅な性能の向上!
remote
外部テーブル 実テーブル
結合やソートを
含むクエリ
そのまま結果
結合処理
結合結果の 10 件のみ
レコードが転送される
67
PostgreSQL 9.6 新機能
Parallel sequential scans, joins and aggregates
Elimination of repetitive scanning of old data by
autovacuum
Synchronous replication now allows multiple standby
servers for increased reliability
Full-text search for phrases
Support for remote joins, sorts, and updates in
postgres_fdw
Substantial performance improvements, especially in
the area of improving scalability on many-CPU servers
68
様々な性能改善
(特に CPU が多い環境での改善)
69
性能改善項目(一部)
frozen タプルのみのページの再 vacuum 抑止
vacuum 時の無駄なヒープ切り詰め抑止
btree vacuum 時のスタンバイへの影響低減
特定の GROUP BY 改善
ORDER BY 後まで SELECT 式評価を遅延
カーネル・ディスク・バッファ管理改善
他いろいろ・・・
性能改善については
個人の環境では
なかなか試せない・・・
70
性能改善項目
性能改善項目に関しては、
今後、 PostgreSQL に強い企業さんや
           (PostgreSQL Enterprise Consotium)
あたりが、今後検証結果を
出してくれるんじゃないかなーと
期待しています。
71
その他
GUC の変更
システムカタログの変更
SQL コマンドの改善
psql の改善
contrib の改善
72
GUC の変更
73
パラメータ名 変更の種別 内容 ぬこメモ
autovacuum_max_workers 最大値の変更 8388607 から 262143 になった。 10 より大きくしたことない気がするのでわりとどうでも
いい。
backend_flush_after 新規追加 ディスクフラッシュに関するパラメータ? 通常はデフォルト値 (16 ページ ) のままでいいのかな
あ?
bgwriter_flush_after 新規追加 上のパラメータの bgwriter 版? これも通常はデフォルト (64 ページ ) のままでいいのか
なあ?
checkpoint_flush_after 新規追加 上のパラメータの checkpointer 版? これも ( 略 )(32 ページ ) の ( 略 )
debug_assertions 既定値変更 既定値が on から of に変更 開発者向けオプション。
force_parallel_mode 新規追加 パラレルスキャンを強制? enable_* パラメータみたいなものかな?
idle_in_transaction_session_timeout 新規追加 一定時間の idle in transaction session を切断 運用ミスによるロングトランザクション防止に使えそ
う?
max_connections 最大値の変更 8388607 から 262143 になった。 これもせいぜい 1000 くらいまでしか上げないからな
あ・・・
max_parallel_workers_per_gather 新規追加 同期実行するワーカ数上限値 パラレルスキャンに関する重要なパラメータ。
beta2 で名称変更。
max_prepared_transactions 最大値の変更 8388607 から 262143 になった。 このパラメータ自体チューニングで使ったこと、あった
けなあ・・・
max_replication_slots 最大値の変更 8388607 から 262143 になった。 レプリケーションスロット数をそんな大きな値に設定し
たことがそもそもない。
max_wal_senders 最大値の変更 8388607 から 262143 になった。 wal sender プロセス数って、もうちょっと上限小さくて
もいいんじゃないかなあという気も。
max_worker_processes 最大値の変更 8388607 から 262143 になった。 ワーカプロセス数って、もうちょっと上限 ( 略 )
min_parallel_relation_size 新規追加 パラレルスキャン対象とする最小ページ数 beta2 で追加。
old_snapshot_threshold 新規追加 非常に古いスナップショット読み込み挙動のフラグ? きちんと調べて、どういうときにデフォルト (-1) 以外之
設定が必要か理解しないと・・・
9.5 と 9.6 のパラメータ差分
74
パラメータ名 変更の種別 内容 ぬこメモ
parallel_setup_cost 新規追加 パラレルスキャンのコスト推定パラメータ パラレルスキャンのチューニング時に重要なパラメータ
になるのか、だいたいの場合デフォルトでいいのかくら
いは調べておかないと。
parallel_tuple_cost 新規追加 パラレルスキャンのコスト推定パラメータ パラレルスキャンのチューニング時に重要なパラメータ
になるのか ( 略 )
replacement_sort_tuples 新規追加 ソート方式 ( クイックソート / 外部ソート ) の切り替
え閾値 ( タプル数 )
既存の work_men/maintenance_work_mem との関係
も調べるのかな。
server_version 設定値変更 バージョン番号の変更 現状は 9.6 beta2
server_version_num 設定値変更 バージョン番号値の変更 90600
superuser_reserved_connections 最大値の変更 8388607 から 262143 になった。 max_connection と同じ話か。
synchronous_commit 値域の追加 値域に remote_apply の追加 WAL 反映完了まで待つモードの追加。各スレーブへの検
索で同じ結果が保証されるはず。
synchronous_standby_names 説明の変更 複数同期スタンバイに対応した説明変更 これも早く自分で動かしてみないとなあ。
syslog_sequence_numbers 新規追加 syslog でメッセージ分割したときの通番付与フラグ? あんまり syslog 出力って使ってないんだよなー。
syslog_split_messages 新規追加 syslog でメッセージ分割するかどうかのフラグ? あんまり syslog( 略 )
wal_level 値域の変更 archive,hot_standby が replica に統一された。 過去に PITR やレプリケーション設定方法を書いている
ドキュメントへの影響がw
wal_writer_delay 説明の変更 説明文の変更のみ。 フラッシュ関係のパラメータ追加とかが関係しているの
かな。
wal_writer_flush_after 新規追加 wal_writer の制御パラメータ またフラッシュ関係のパラメータか!
今回はこのうち
2 つの GUC を紹介します。
75
idle_in_transaction_session_timeout
SET idle_in_transaction_session_timeout = 3000;
SET
BEGIN;
BEGIN
SELECT 1;
?column?
----------
1
(1 row)
SELECT pg_sleep(3);
pg_sleep
----------
(1 row)
SELECT 2;
?column?
----------
2
(1 row)
! sleep 3
SELECT 3;
psql:timeout.sql:7: FATAL: terminating connection due to idle-in-transaction timeout
運用ミスで idel in transaction 状態が長時間継続するときに
強制切断することができる。
Idle in transaction が
3 秒以上になったら
セッションを切断する
この場合は、
query 実行中なので
3 秒以上でもセッションは
切断されない。
この場合は、
Idle in transaction 状態で
3 秒経過する。
Idle in transaction 状態で
3 秒経過したので
セッションが切断される。
76
wal_level の変更
9.6 では wal_level の値域が変更になった。
値域 9.5 まで 9.6 説明
minial ○ ○ デフォルト値。
最も WAL サイズが小さくなるが、 PITR やレ
プリケーションはできない。
archive ○ - PITR 用。
9.6 でも隠し設定値として使用可能。
hot_standby ○ - レプリケーション用
9.6 でも隠し設定値として使用可能。
replica - ○ 9.6 から追加されたレプリケーション /PITR
の WAL 形式が 9.6 で統一された。
logcal ○ ○ ロジカルデコーディング用の WAL 形式。
最もサイズが大きくなる。
77
PostgreSQL も毎年進化しているので
数年前に本で書いたことが
すぐに時代遅れになる (´ ・ ω ・ `)
78
システムカタログの
変更
79
システムカタログ
テーブル / ビュー名 変更種別 変更内容 ぬこメモ
pg_aggregate 列の追加 aggcombinefn, aggserialfn,
aggdeserialfn, aggserialtype の
追加
パラレル集約の関係?要調査
pg_am 全面変更 個々のアクセスメソッド用フラグが
消えて、ハンドラ関数ポインタに置
き換わったみたい。
インデックスのサポート能力って SQL か
らどうやって見ればいいのだろう。
pg_config カタログの追加 pg_config 相当の情報 リモートから config が参照可能になっ
たってことだね。
pg_init_privs カタログの追加 システム内オブジェクトの初期権限
管理用のカタログ?
普段使うものではない?要調査
pg_proc 列の追加 proparallel の追加 名前からすると、関数が並列処理に対応す
るかどうかのフラグ? CREATE
FUNCTION に影響あるのかな。
pg_replication_slots 列の追加 confirmed_flush_lsn の追加。 ロジカルレプリケーション利用者が受信し
た場所を示す列かな。
pg_stat_activity 列の変更 waiting が wait_event_type と
wait_event に分離した。
監視方式にも影響でるのかな?
pg_stat_progress_vacuum カタログの追加 VACUUM 処理進捗表示のためのカ
タログ
PostgreSQL: Documentation: 9.6:
Progress Reporting を見ればいいのだ
な。
pg_stat_wal_receiver カタログの追加 名前のとおり、 wal reciever の挙
動に関する稼働統計情報かな。
これを使うと、どういう監視が出来るよう
になるのかなあ。
80
pg_stat_vacuum_progress
bench=# SELECT p.relname, v.phase, v.heap_blks_total, v.heap_blks_scanned,
v.heap_blks_vacuumed, v.index_vacuum_count FROM pg_stat_progress_vacuum as v JOIN
pg_class as p ON (v.relid = p.oid);
-[ RECORD 1 ]------+-----------------
relname | pgbench_accounts
phase | scanning heap
heap_blks_total | 16394
heap_blks_scanned | 8844
heap_blks_vacuumed | 0
index_vacuum_count | 0
phase, heap_blks_total, heap_blks_scanned の結果から
VACUUM 処理の状況を判断する。
VACUUM が完了すると、このビューからレコードは見えなく
なる。
81
SQL コマンドの改善
82
SQL コマンドの改善
COPY が RETURNING に対応
EXTENSION 削除時の依存オブジェクトの削除
CREATE EXTENSION の CASCADE オプション追加
CREATE ACCESS METHOD の実装
CREATEUSER/NOCREATEUSER オプションを
CREATE ROLE 等から削除
VACUUM に DISABLE_PAGE_SKIPPING オプショ
ンが追加
etc...
今回はこのうち
1 つだけ紹介します。
83
COPY が RETURNING に対応
test=# TABLE book;
id | title | price
----+------------------+-------
1 | 働けメロス | 600
2 | 我輩はぬこである | 550
3 | リア充 | 780
(3 rows)
test=# COPY (DELETE FROM book RETURNING *) TO '/tmp/book.txt';
COPY 3
test=# TABLE book;
id | title | price
----+-------+-------
(0 rows)
test=# q
[nuko@localhost test]$ cat /tmp/book.txt
1 働けメロス 600
2 我輩はぬこである 550
3 リア充 780
RETURNING 句:更新結果を返却することが可能。
9.6 からは RETURNING の結果を COPY TO でファイルに
直接書き込むことが可能になった。
84
psql の改善
85
PostgreSQL 標準の CUI 対話的ターミナル
多彩なメタコマンド、タブ補完・・・
おそらく、商用含む RDBMS 標準の
対話的ターミナルとしては
一番使いやすいんじゃないかと思う。
psql って何?
個人の感想です
86
直前クエリの実行結果をクエリとして再実行
(gexec)
直前のエラー詳細出力
クロスタブ表示
(crosstabview)
タブ補完の改善
SHOW_CONTEXT メッセージ出力制御
etc...
psql の改善(一部)
今回は面白い追加機能を
2 つ紹介します。
87
psql の改善 (gexec)
test=# SELECT 'CREATE TABLE table_' || generate_series(1,4) || '(id int primary key, data jsonb)';
?column?
------------------------------------------------------
CREATE TABLE table_1(id int primary key, data jsonb)
CREATE TABLE table_2(id int primary key, data jsonb)
CREATE TABLE table_3(id int primary key, data jsonb)
CREATE TABLE table_4(id int primary key, data jsonb)
(4 rows)
test=# gexec
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
test=# d
List of relations
Schema | Name | Type | Owner
--------+---------+-------+-------
public | table_1 | table | nuko
public | table_2 | table | nuko
public | table_3 | table | nuko
public | table_4 | table | nuko
(4 rows)
名前の違うテーブルを多数生成する例
88
psql の改善 (crosstabview)
tmp=# TABLE sales ;
date | item | sales
------------+-------+-------
2016-05-16 | Ramen | 1650
2016-05-16 | Curry | 2500
2016-05-16 | Udon | 500
2016-05-16 | Soba | 600
2016-05-17 | Ramen | 2400
2016-05-17 | Curry | 800
2016-05-18 | Ramen | 1400
2016-05-18 | Curry | 1600
2016-05-18 | Udon | 1000
(9 rows)
tmp=# crosstabview date item sales
date | Ramen | Curry | Udon | Soba
------------+-------+-------+------+------
2016-05-16 | 1650 | 2500 | 500 | 600
2016-05-17 | 2400 | 800 | |
2016-05-18 | 1400 | 1600 | 1000 |
(3 rows)
直前クエリの結果から、クロスタブっぽい表示にする謎機能
89
crosstab の間違った応用例
psql でオセロゲームを作れということか・・・
90
contrib 改善
( 追加モジュールの改善 )
91
auto_explain の ratio 指定
bloom インデックスの追加
cube での K 近傍検索対応
hstore と JSON 変換
intarray のプラン改善用評価関数追加
pageinspect に関数追加
pgcrypto 関数の引数追加
pg_trgm の機能追加
etc...
contrib の改善(一部)
今回はこのうち
1 つだけ紹介します。
92
auto_explain というのは
閾値を超えたスロークエリの実行計画を出力
閾値が低すぎるとログ量が多くなる
→ 性能に影響が出てしまう・・・
9.6 での改善は、 ratio を指定して
一定の割合のみログ出力するというもの
auto_explain の ratio 指定
93
これは 2 月末の
PostgreSQL
Newbie-hackerthon
のときの測定結果
pgbench で測定。
sample_ratio による
tps への影響軽減を
確認できた。
94
おわりに
95
PostgreSQL 9.6 は地味だが
今後、化ける機能を含む
重要なリリースになりそう!
メニー CPU 環境での更なる
性能向上が見込めるはず
96
Let's Download & Testing
PostgreSQL 9.6!
97
ご清聴ご清聴
ありがとうありがとう
ございましたございました
http://www.yunphoto.net
98
PostgreSQL 9.6beta1 /beta2 Documentation
https://www.postgresql.org/docs/9.6/static/release-9-6.html
https://www.postgresql.org/docs/devel/static/release-9-6.html
Commitfest 2016-03
https://commitfest.postgresql.org/9/
篠田の虎の巻 5 「 PostgreSQL 9.6 新機能検証結果」
http://community.hpe.com/hpeb/attachments/hpeb/JapanEnterpriseTopics/195
.6/1/PostgreSQL%209.6%20New%20Features%20ja%2020160530-1.pdf
Michael Paquier - Open source developer based in Japan
http://michael.otacoo.com/
永安さんの PostgreSQL Deep Dive
PostgreSQL 9.6 のパラレルシーケンシャルスキャンを検証する
http://pgsqldeepdive.blogspot.jp/2015/12/parallel-seq-scan.html
masahiko sawada さんの Qiita ページ
PostgreSQL のマルチ同期レプリケーション
http://qiita.com/sawada_masahiko/items/748dfe3dd1cbf92f601c
参考にしたもの
99
私も微力ながら
PostgreSQL 9.6 新機能に
関する調査・検証結果を
ブログで公開中です
http://d.hatena.ne.jp/nuko_yokohama/
100
Question?
http://www.yunphoto.net

More Related Content

What's hot

PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaShigeru Hanada
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告Uptime Technologies LLC (JP)
 
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaPostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaShigeru Hanada
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門Yoshiyuki Asaba
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングKosuke Kida
 
明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)kasaharatt
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Toshi Harada
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会Satoshi Nagayasu
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121Kosuke Kida
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubToshi Harada
 
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etckasaharatt
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張Shigeru Hanada
 
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会Shigeru Hanada
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法Yohei Azekatsu
 

What's hot (20)

PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
 
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaPostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
 
明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)明日から使えるPostgre sql運用管理テクニック(監視編)
明日から使えるPostgre sql運用管理テクニック(監視編)
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
 
シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法シンプルでシステマチックな Linux 性能分析方法
シンプルでシステマチックな Linux 性能分析方法
 

Similar to Hackers Champloo 2016 postgresql-9.6

Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Toshi Harada
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012Shigeru Hanada
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10Toshi Harada
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLNoriyoshi Shinoda
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10Toshi Harada
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoShigeru Hanada
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...Insight Technology, Inc.
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告Amazon Web Services Japan
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubToshi Harada
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Toshi Harada
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCacheKohei KaiGai
 
20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JPKohei KaiGai
 
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】Kohei KaiGai
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Masayuki Ozawa
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMikiya Okuno
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep LearningSatoshi imai
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 

Similar to Hackers Champloo 2016 postgresql-9.6 (20)

Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache
 
20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP20180920_DBTS_PGStrom_JP
20180920_DBTS_PGStrom_JP
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 

More from Toshi Harada

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々Toshi Harada
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psqlToshi Harada
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12Toshi Harada
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-FunctionsToshi Harada
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extensionToshi Harada
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrepToshi Harada
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extensionToshi Harada
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsqlToshi Harada
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdevToshi Harada
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaToshi Harada
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiToshi Harada
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-klyToshi Harada
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseToshi Harada
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseDblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseToshi Harada
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseToshi Harada
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeMyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeToshi Harada
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwToshi Harada
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5Toshi Harada
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 

More from Toshi Harada (20)

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
 
Pgunconf14 pg13-psql
Pgunconf14 pg13-psqlPgunconf14 pg13-psql
Pgunconf14 pg13-psql
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseDblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
 
MyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatypeMyNA JPUG study 20160220-postgresql-json-datatype
MyNA JPUG study 20160220-postgresql-json-datatype
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 

Recently uploaded

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Hackers Champloo 2016 postgresql-9.6

  • 1. ハッカーズチャンプルーハッカーズチャンプルー 20162016 (2016-06-25)(2016-06-25) PostgreSQL 9.6PostgreSQL 9.6 がが やってくる!やってくる! ぬこ@横浜ぬこ@横浜 (@nuko_yokohama)(@nuko_yokohama) http://www.yunphoto.net
  • 3. 3
  • 4. 4 自己紹介 某通信系 SI 会社@横浜 で働いてます。 JPUG( 日本 PostgreSQL ユーザ会 ) 枠 で、たまに登壇したりしている PostgreSQL おじさんです。 PostgreSQL の変な使い方を探るのが趣味 ( 漢数字型 , あいまい全文検索 , neo4j_fdw, 数当てゲーム , スーパーユーザ強制ロギング HOOK, 履歴保存データ型などなど )
  • 13. 13 PostgreSQL の概要 MySQL と並ぶ OSS DBMS ライセンスは BSD ライクなもの 高度なクエリにも対応 性能面でも商用 DBMS とも遜色なし 9.0 以降はレプリケーションも対応 多種多様なデータ型サポート 非常に高い拡張性 活発な開発コミュニティ
  • 15. 15 PostgreSQL の歴史 (古代~近世) POSTGRES プロジェクト の時代 Postgres95 の時代 ※SQL サポート PostgreSQL の時代 ※6.0 から開始1986 年 1995 年 1997 年 2015 年 POSTGRES プロジェクト からの年齢だと 何気にアラサー・・・
  • 16. 16 6.0 ~ 発展途上の時代 GEQO マルチバイト文字セット MVCC 7.0 ~ やっと実用的に WAL TOAST VACUUM 改善 8.0 ~ 商用レベルへ Windows 対応 PITR 自動 VACUUM HOT 9.0 ~ エンタープライズ化 レプリケーション 外部表 メニーコア性能向上 マテリアライズドビュー JSON 対応 1997 年 2000 年 2005 年 2010 年 PostgreSQL の歴史(近代) 昔の (7.x 時代 ) の感覚で PostgreSQL 使えねーと 思ってる人もまだいるのかなあ。
  • 17. 17 9.0 レプリケーション ストアド改良 列トリガ 排他制約 64bit Windows 対応 9.1 同期レプリケーション 外部データラッパ (FDW) WITH 句+更新文 UNLOGGED TABLE 9.2 パフォーマンス向上 カスケードレプリケーション Index Only Scan 範囲型サポート JSON 型サポート 9.3 マテリアライズドビュー 更新可能ビュー 更新 FDW JSON 型の機能拡張 エンタープライズ向け用途エンタープライズ向け用途 実験的な高度な機能実験的な高度な機能 2010 年 2011 年 2012 年 2013 年 PostgreSQL の歴史(現代) レプリケーションが本体機能に なったことで色々な案件で 使われるようになったのかな?
  • 18. 18 9.4 JSONB ALTER SYSTEM マテビュー改善 ロジカル・デコーディング WAL バッファ並列挿入 9.5 BRIN UPSERT Row Level Security Import foreign schema pg_rewind 9.6 さて、何が入るのか! そして・・・そして・・・ 9.4, 9.59.4, 9.5 そして開発中のそして開発中の 9.69.6 に至るに至る 2014 年 2015 年 2016 年 PostgreSQL の歴史(現代) 9.4, 9.5 でも面白い機能が いろいろ入りました
  • 19. 19 まずは・・・ 祝・ PostgreSQL 9.6 beta1 リリースPostgreSQL 9.6 beta1 Release! 私たちは喜んでいます私たちは喜んでいます (2016-05-12)
  • 20. 20 PostgreSQL 9.6( 開発中 ) 開発自体は昨年から開始 数回の commitfest で取り込む機能を議論 2015/11, 2016/01, 2016/03 2016/05/12 beta1 リリース 2016/06/23 beta2 リリース 以降、 beta→RC 2016/09 9.6.0 リリース ( 予定? ) なんと、一昨日 beta2 リリース!
  • 21. 21 余談ですが、ちょっと前に コミュニティでは 次を 9.6 beta2 にするか 10.0 beta2 にするか議論してました 結局、 9.6 になったみたい
  • 23. 23 PostgreSQL 9.6 新機能 新機能カテゴリ 項目数 備考 サーバ 67 性能向上 33 項目、監視 11 項目 レプリケーションとリカバリ 5 クエリ 3 ユーティリティコマンド 13 権限管理 3 データ型 9 関数 17 サーバサイド言語 8 クライアント・インタフェース 4 クライアント・アプリケーション 25 psql は 12 項目 サーバ・アプリケーション 3 ソースコード 20 追加モジュール 21 postgres_fdw は 7 項目 beta1 時点の情報 合計 198 項目
  • 24. 24 Parallel sequential scans, joins and aggregates Elimination of repetitive scanning of old data by autovacuum Synchronous replication now allows multiple standby servers for increased reliability Full-text search for phrases Support for remote joins, sorts, and updates in postgres_fdw Substantial performance improvements, especially in the area of improving scalability on many-CPU servers PostgreSQL 9.6 主な新機能
  • 25. 25 PostgreSQL 9.6 主な新機能 Parallel sequential scans, joins and aggregates Elimination of repetitive scanning of old data by autovacuum Synchronous replication now allows multiple standby servers for increased reliability Full-text search for phrases Support for remote joins, sorts, and updates in postgres_fdw Substantial performance improvements, especially in the area of improving scalability on many-CPU servers
  • 26. 26 パラレルクエリ 今、一番 HOT な機能。 beta1 から beta2 で GUC 等が変更されてました。
  • 27. 27 tmp=# EXPLAIN (ANALYZE, VERBOSE) SELECT AVG(data) FROM tmp; Aggregate (cost=16925.00..16925.01 rows=1 width=4) (actual time=187.215..187.215 rows=1 loops=1) Output: avg(data) -> Seq Scan on public.tmp (cost=0.00..14425.00 rows=1000000 width=4) (actual time=0.043..87.114 rows=1000000 loops=1) Output: id, data Planning time: 0.041 ms Execution time: 187.249 ms PostgreSQL 9.5 まで 1 つのクエリを 1 プロセスで順々に処理していた。 SeqScan Aggregate
  • 28. 28 tmp=# EXPLAIN (ANALYZE, VERBOSE) SELECT AVG(data) FROM tmp; Finalize Aggregate (cost=10633.55..10633.56 rows=1 width=32) (actual time=116.537..116.537 rows=1 loops=1) Output: avg(data) -> Gather (cost=10633.33..10633.54 rows=2 width=32) (actual time=114.831..116.524 rows=3 loops=1) Output: (PARTIAL avg(data)) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost=9633.33..9633.34 rows=1 width=32) (actual time=110.293..110.294 rows=1 loops=3) Output: PARTIAL avg(data) Worker 0: actual time=104.469..104.470 rows=1 loops=1 Worker 1: actual time=111.816..111.816 rows=1 loops=1 -> Parallel Seq Scan on public.tmp (cost=0.00..8591.67 rows=416667 width=4) (actual time=3.734..66.54 7 rows=333333 loops=3) Output: id, data Worker 0: actual time=11.160..65.808 rows=295156 loops=1 Worker 1: actual time=0.014..57.334 rows=248600 loops=1 Planning time: 0.046 ms Execution time: 116.608 ms PostgreSQL 9.6 から 1 つのクエリでも複数プロセスを使って処理可能になった。 Paralell SeqScan Partial Aggregate Gather Final Aggregate Worker Worker Worker Worker
  • 29. 29 パラレルスキャン関連のパラメータ パラレルスキャンパラメータ パラメータ名 意味 デフォルト値 備考 max_worker_processes ワーカープロセス数の最 大値 8 変更のためには再起動が必要 max_parallel_workers_per _gather 並列度の最大値 2 beta2 で、名前が変わった。 0 にすると並列化しなくなる。 force_parallel_mode 並列処理を強制させる。 of parallel_setup_cost ワーカプロセス起動の推 定コスト 1000 parallel_tuple_cost ワーカプロセスから別プ ロセスへ1タプルを転送 する推定コスト 0.1 min_parallel_relation_size 並列化する最小のテーブ ルサイズ 8 (MB) beta2 で追加 これと検索対象のテーブルサイズに依存
  • 30. 30 並列数の決定には、サーバの CPU 数は 何も関係していない!(重要) おおまかに言えば、テーブルサイズ(ページ数)が min_parallel_relation_size( デフォルト: 1000) ページを 超えると並列スキャンを行う。 以降、 3 倍毎に並列数が増加する。 並列数の決定 倍数も今後調整可能に なるのかな・・・?
  • 31. 31 テーブルサイズとパラメータによる並列数決定の例 並列数の決定 テーブルサイズ (ページ数) max_worker _processes max_parallel _workers_pe r_gather ワーカ 起動数 補足 1640 8 2 0 ページ数は 1000 を超えて いるが・・・ 3279 8 2 2 3000 を超えたのでワーカを 2 つ起動する 9837 8 4 3 3000*3 を超えたのでワーカ を 3 つ起動する 9837 8 0 0 max_parallel_workers_per _gather が 0 なので起動し ない 9837 1 3 1 max_worker_processes が 1 に制限されている。 1 じゃないの? → 次スライド参照 beta1 での 検証結果です
  • 32. 32 bench=# SHOW parallel_setup_cost ; parallel_setup_cost --------------------- 1000 (1 row) bench=# EXPLAIN ANALYZE SELECT AVG(abalance) FROM pgbench_accounts ; QUERY PLAN Aggregate (cost=2890.00..2890.01 rows=1 width=32) (actual time=20.053..20.054 rows=1 loops=1) -> Seq Scan on pgbench_accounts (cost=0.00..2640.00 rows=100000 width=4) (actual time=0.006..6.521 rows=100000 loops=1) Planning time: 0.208 ms Execution time: 20.093 ms (4 rows) パラレルクエリ用変数の調整 前スライドでページ数が 1600 のときにワーカが起動しないの は、 cost 上パラレルクエリで実施するよりも、フツーに SeqScan したほうが低いと判断されたから。
  • 33. 33 bench=# SET parallel_setup_cost TO 300; SET bench=# EXPLAIN ANALYZE SELECT AVG(abalance) FROM pgbench_accounts ; QUERY PLAN Finalize Aggregate (cost=2675.41..2675.42 rows=1 width=32) (actual time=12.707..12.708 rows=1 loops=1) -> Gather (cost=2675.29..2675.40 rows=1 width=32) (actual time=12.434..12.698 rows=2 loops=1) Workers Planned: 1 Workers Launched: 1 -> Partial Aggregate (cost=2375.29..2375.30 rows=1 width=32) (actual time=9.743..9.743 rows=1 loops=2) -> Parallel Seq Scan on pgbench_accounts (cost=0.00..2228.24 rows=58824 width=4) (actual time=0.007..6.190 rows= 50000 loops=2) Planning time: 0.049 ms Execution time: 13.414 ms (8 rows) パラレルクエリ用変数の調整 paralell_setup_cost/paralell_tuple_cost を調整することで、 パラレルクエリに変更が可能。 上の例は paralell_setup_cost を 1000→300 に調整。
  • 35. 35 特定の SQL 関数を含む場合、 パラレルスキャンの実行計画が選択されない。 一番身近な関数だと、シーケンス制御関数の nextval(), currval(), setval(), lastval() などが パラレルスキャン対象外となる。 パラレルスキャンできない SQL 関数の一覧は、 以下の SQL 文で取得可能。 パラレルスキャンできない SQL 関数 SELECT proname FROM pg_proc WHERE proparallel = 'u';
  • 36. 36 PostgreSQL 9.6 新機能 Parallel sequential scans, joins and aggregates Elimination of repetitive scanning of old data by autovacuum Synchronous replication now allows multiple standby servers for increased reliability Full-text search for phrases Support for remote joins, sorts, and updates in postgres_fdw Substantial performance improvements, especially in the area of improving scalability on many-CPU servers
  • 38. 38 9.5 までの autovacuum では XID 周回を防ぐための vacuum 時に 全ページを処理していた。 9.6 からは frozen tuples しか含まない ページを Visibility Map を参照して 効率的に処理をスキップできる。 autovacuum 改善
  • 40. 40 PostgreSQL 9.6 新機能 Parallel sequential scans, joins and aggregates Elimination of repetitive scanning of old data by autovacuum Synchronous replication now allows multiple standby servers for increased reliability Full-text search for phrases Support for remote joins, sorts, and updates in postgres_fdw Substantial performance improvements, especially in the area of improving scalability on many-CPU servers
  • 43. 43 Master sync sync PostgreSQL 9.6 から 同期レプリケーション可能な スレーブサーバが N 台に! Slave Slave Slave sync ( N 台構成のフェールオーバ機構、作るの大変そう・・・)
  • 44. 44 primary_conninfo = '2(standby1, standby2, standby3)' synchronous_standby_names の書き方 複数同期させる場合には recovery.conf の primary_conninfo に N(name, name, ...) みたいに書く。 primary_conninfo = 'standby1, standby2, standby3' 従来の記法も対応している。 この場合は、同期サーバ数は 1 になる。
  • 45. 45 PostgreSQL 9.6 新機能 Parallel sequential scans, joins and aggregates Elimination of repetitive scanning of old data by autovacuum Synchronous replication now allows multiple standby servers for increased reliability Full-text search for phrases Support for remote joins, sorts, and updates in postgres_fdw Substantial performance improvements, especially in the area of improving scalability on many-CPU servers
  • 48. 48 tsearch=# SELECT data FROM animal WHERE to_tsvector('english', data) @@ to_tsquery('english', 'dog'); data -------------------------------------------------- I like cats and dogs. In my bed, four dogs and five cats are sleeping. Miss Magee's dog is very strong. (3 rows) tsearch=# SELECT data FROM animal WHERE to_tsvector('english', data) @@ to_tsquery('english', 'dog & cat'); data -------------------------------------------------- I like cats and dogs. In my bed, four dogs and five cats are sleeping. (2 rows) これまでの全文検索 複数のワードの指定はできたが、語順を意識した検索は不可 (dog, cat の順に出現する文書も cat, dog の順に出現する文書 も両方ヒットしていた )
  • 49. 49 tsearch=# SELECT data FROM animal WHERE to_tsvector('japanese', data) @@ tsquery_phrase( to_tsquery('japanese', 'dog'), to_tsquery('japanese', 'cat'), 3); data -------------------------------------------------- In my bed, four dogs and five cats are sleeping. (1 row) tsearch=# SELECT data FROM animal WHERE to_tsvector('japanese', data) @@ tsquery_phrase( to_tsquery('japanese', 'cat'), to_tsquery('japanese', 'dog'), 3); data ----------------------- I like cats and dogs. (1 row) フレーズ検索 それぞれ、「 dog→cat 」「 cat→dog 」の順序で並んだテキ ストが検索されている。 フレーズ検索関数 tsquery_phrase() を使う。
  • 50. 50 tsearch=# SELECT data FROM animal WHERE to_tsvector(data) @@ (to_tsquery('like') <-> to_tsquery('cat')); data ----------------------- I like cats and dogs. (1 row) <-> 演算子 X <-> Y は tsquery_phrase( X, Y, 1) と同義です。 全文検索用演算子として、 9.6 では 新たに <-> という演算子が追加された。 ※ 演算子が簡単に追加できるのも PostgreSQL のいいところ。
  • 55. 55 が、少し修正すれば 一応、 PostgreSQL 9.6 でも textsearch_ja は 動くようです(検証中)
  • 56. 56 9.6 + textsearch_ja とりあえず、フレーズ検索を使っても動くようです。 tsearch=# SELECT ts_rank_cd( to_tsvector('japanese', data), tsquery_phrase( to_tsquery('japanese', ' セリヌンティウス '), to_tsquery('japanese', ' メロス '), 3) ), ts_headline('japanese', data, tsquery_phrase(to_tsquery( 'japanese', ' セリヌンティウス '), to_tsquery('japanese', ' メロス '), 10)) FROM meros WHERE to_tsvector('japanese', data) @@ tsquery_phrase( to_tsquery('japanese', ' セリヌンティウス '), to_tsquery('japanese', ' メロス '), 3); ts_rank_cd | ts_headline 0.1 | <b> セリヌンティウス </b> 。」 <b> メロス </b> は眼に涙を浮べて言った。「私を殴れ。 ちから一ぱいに頬を殴れ。私は、途中で一度、悪い (1 row) tsquery_phrase() と textsearch_ja の組み合わせ例
  • 57. 57 PostgreSQLPostgreSQL でのでの 全文検索については全文検索については それだけでそれだけで 11 時間くらい時間くらい 話せるほどネタが多いので話せるほどネタが多いので 全文検索に興味があったら全文検索に興味があったら また沖縄に呼んでくださいまた沖縄に呼んでください
  • 58. 58 PostgreSQL 9.6 新機能 Parallel sequential scans, joins and aggregates Elimination of repetitive scanning of old data by autovacuum Synchronous replication now allows multiple standby servers for increased reliability Full-text search for phrases Support for remote joins, sorts, and updates in postgres_fdw Substantial performance improvements, especially in the area of improving scalability on many-CPU servers
  • 60. 60 postgres_fdw とは 別の PostgreSQL データベース内の表を 通常の表のように扱える FDW(Foreign Data Wrapper) の一種 9.3 から利用可能 DBLINK みたいな機能。 透過的に SQL で書けるという のがメリットです
  • 61. 61 local PostgreSQL 9.5 まで remote サーバのテーブルから結果を受け取って、 local 側で結合やソートを実施 更新時はカーソルを使って 1 行ずつ更新・・・ remote 外部テーブル 実テーブル 結合やソートを 含むクエリ 結合処理 ソート処理 結果
  • 62. 62 local PostgreSQL 9.6 から remote サーバで結合やソートを実施。 サーバ間転送量の削減になるかも! 更新文もカーソルを使わず remote サーバでそのまま実行。 remote 外部テーブル 実テーブル 結合やソートを 含むクエリ そのまま結果 結合処理 ソート処理
  • 63. 63 bench=# EXPLAIN ANALYZE VERBOSE SELECT AVG(a.data1), AVG(a.data2) FROM table_a a JOIN table_b b ON (a.id = b.id) WHERE a.data1 = 10000 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------- ----------- Aggregate (cost=349.93..349.94 rows=1 width=8) (actual time=1741.557..1741.558 rows=1 loops=1) Output: avg(a.data1), avg(a.data2) -> Hash Join (cost=238.80..349.12 rows=161 width=8) (actual time=99.229..1741.404 rows=11 loops=1) Output: a.data1, a.data2 Hash Cond: (b.id = a.id) -> Foreign Scan on public.table_b b (cost=100.00..197.75 rows=2925 width=4) (actual time=1.066..1648.609 rows=1000000 loops=1) Output: b.id, b.data1, b.data2 Remote SQL: SELECT id FROM public.table_b -> Hash (cost=138.66..138.66 rows=11 width=12) (actual time=0.807..0.807 rows=11 loops=1) Output: a.data1, a.data2, a.id Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Foreign Scan on public.table_a a (cost=100.00..138.66 rows=11 width=12) (actual time=0.794..0.796 rows=11 loops=1) Output: a.data1, a.data2, a.id Remote SQL: SELECT id, data1, data2 FROM public.table_a WHERE ((data1 = 10000)) Planning time: 1.559 ms Execution time: 1748.602 ms (16 rows) 9.5 での実行計画例(結合) 結合処理はローカル側で行っている。 結合処理のソースはリモートからローカルに転送されている。
  • 64. 64 bench=# EXPLAIN ANALYZE VERBOSE SELECT AVG(a.data1), AVG(a.data2) FROM table_a a JOIN table_b b ON (a.id = b.id) WHERE a.data1 = 10000 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------- ---------------------- Aggregate (cost=342.59..342.60 rows=1 width=64) (actual time=0.560..0.561 rows=1 loops=1) Output: avg(a.data1), avg(a.data2) -> Foreign Scan (cost=100.00..341.78 rows=161 width=8) (actual time=0.552..0.554 rows=10 loops=1) Output: a.data1, a.data2 Relations: (public.table_a a) INNER JOIN (public.table_b b) Remote SQL: SELECT r1.data1, r1.data2 FROM (public.table_a r1 INNER JOIN public.table_b r2 ON (((r1.id = r2.id)) AND ((r1.data1 = 10000)))) Planning time: 0.123 ms Execution time: 0.789 ms (8 rows) 9.6 での実行計画例(結合) 【ポイント】 リモートサーバで結合 SQL を実行 その結果、ローカルサーバに転送される行数は 10 行! 実行時間も 2000 倍以上向上!
  • 65. 65 local PostgreSQL 9.5 まで remote サーバのテーブルから結果を受け取って、 local 側で結合やソートを実施 remote 外部テーブル 実テーブル 結合やソートを 含むクエリ 結合処理 ソート処理 結果 1000000+10 件の レコードが転送される
  • 66. 66 local PostgreSQL 9.6 から サーバ間転送量の削減→大幅な性能の向上! remote 外部テーブル 実テーブル 結合やソートを 含むクエリ そのまま結果 結合処理 結合結果の 10 件のみ レコードが転送される
  • 67. 67 PostgreSQL 9.6 新機能 Parallel sequential scans, joins and aggregates Elimination of repetitive scanning of old data by autovacuum Synchronous replication now allows multiple standby servers for increased reliability Full-text search for phrases Support for remote joins, sorts, and updates in postgres_fdw Substantial performance improvements, especially in the area of improving scalability on many-CPU servers
  • 69. 69 性能改善項目(一部) frozen タプルのみのページの再 vacuum 抑止 vacuum 時の無駄なヒープ切り詰め抑止 btree vacuum 時のスタンバイへの影響低減 特定の GROUP BY 改善 ORDER BY 後まで SELECT 式評価を遅延 カーネル・ディスク・バッファ管理改善 他いろいろ・・・ 性能改善については 個人の環境では なかなか試せない・・・
  • 70. 70 性能改善項目 性能改善項目に関しては、 今後、 PostgreSQL に強い企業さんや            (PostgreSQL Enterprise Consotium) あたりが、今後検証結果を 出してくれるんじゃないかなーと 期待しています。
  • 73. 73 パラメータ名 変更の種別 内容 ぬこメモ autovacuum_max_workers 最大値の変更 8388607 から 262143 になった。 10 より大きくしたことない気がするのでわりとどうでも いい。 backend_flush_after 新規追加 ディスクフラッシュに関するパラメータ? 通常はデフォルト値 (16 ページ ) のままでいいのかな あ? bgwriter_flush_after 新規追加 上のパラメータの bgwriter 版? これも通常はデフォルト (64 ページ ) のままでいいのか なあ? checkpoint_flush_after 新規追加 上のパラメータの checkpointer 版? これも ( 略 )(32 ページ ) の ( 略 ) debug_assertions 既定値変更 既定値が on から of に変更 開発者向けオプション。 force_parallel_mode 新規追加 パラレルスキャンを強制? enable_* パラメータみたいなものかな? idle_in_transaction_session_timeout 新規追加 一定時間の idle in transaction session を切断 運用ミスによるロングトランザクション防止に使えそ う? max_connections 最大値の変更 8388607 から 262143 になった。 これもせいぜい 1000 くらいまでしか上げないからな あ・・・ max_parallel_workers_per_gather 新規追加 同期実行するワーカ数上限値 パラレルスキャンに関する重要なパラメータ。 beta2 で名称変更。 max_prepared_transactions 最大値の変更 8388607 から 262143 になった。 このパラメータ自体チューニングで使ったこと、あった けなあ・・・ max_replication_slots 最大値の変更 8388607 から 262143 になった。 レプリケーションスロット数をそんな大きな値に設定し たことがそもそもない。 max_wal_senders 最大値の変更 8388607 から 262143 になった。 wal sender プロセス数って、もうちょっと上限小さくて もいいんじゃないかなあという気も。 max_worker_processes 最大値の変更 8388607 から 262143 になった。 ワーカプロセス数って、もうちょっと上限 ( 略 ) min_parallel_relation_size 新規追加 パラレルスキャン対象とする最小ページ数 beta2 で追加。 old_snapshot_threshold 新規追加 非常に古いスナップショット読み込み挙動のフラグ? きちんと調べて、どういうときにデフォルト (-1) 以外之 設定が必要か理解しないと・・・ 9.5 と 9.6 のパラメータ差分
  • 74. 74 パラメータ名 変更の種別 内容 ぬこメモ parallel_setup_cost 新規追加 パラレルスキャンのコスト推定パラメータ パラレルスキャンのチューニング時に重要なパラメータ になるのか、だいたいの場合デフォルトでいいのかくら いは調べておかないと。 parallel_tuple_cost 新規追加 パラレルスキャンのコスト推定パラメータ パラレルスキャンのチューニング時に重要なパラメータ になるのか ( 略 ) replacement_sort_tuples 新規追加 ソート方式 ( クイックソート / 外部ソート ) の切り替 え閾値 ( タプル数 ) 既存の work_men/maintenance_work_mem との関係 も調べるのかな。 server_version 設定値変更 バージョン番号の変更 現状は 9.6 beta2 server_version_num 設定値変更 バージョン番号値の変更 90600 superuser_reserved_connections 最大値の変更 8388607 から 262143 になった。 max_connection と同じ話か。 synchronous_commit 値域の追加 値域に remote_apply の追加 WAL 反映完了まで待つモードの追加。各スレーブへの検 索で同じ結果が保証されるはず。 synchronous_standby_names 説明の変更 複数同期スタンバイに対応した説明変更 これも早く自分で動かしてみないとなあ。 syslog_sequence_numbers 新規追加 syslog でメッセージ分割したときの通番付与フラグ? あんまり syslog 出力って使ってないんだよなー。 syslog_split_messages 新規追加 syslog でメッセージ分割するかどうかのフラグ? あんまり syslog( 略 ) wal_level 値域の変更 archive,hot_standby が replica に統一された。 過去に PITR やレプリケーション設定方法を書いている ドキュメントへの影響がw wal_writer_delay 説明の変更 説明文の変更のみ。 フラッシュ関係のパラメータ追加とかが関係しているの かな。 wal_writer_flush_after 新規追加 wal_writer の制御パラメータ またフラッシュ関係のパラメータか! 今回はこのうち 2 つの GUC を紹介します。
  • 75. 75 idle_in_transaction_session_timeout SET idle_in_transaction_session_timeout = 3000; SET BEGIN; BEGIN SELECT 1; ?column? ---------- 1 (1 row) SELECT pg_sleep(3); pg_sleep ---------- (1 row) SELECT 2; ?column? ---------- 2 (1 row) ! sleep 3 SELECT 3; psql:timeout.sql:7: FATAL: terminating connection due to idle-in-transaction timeout 運用ミスで idel in transaction 状態が長時間継続するときに 強制切断することができる。 Idle in transaction が 3 秒以上になったら セッションを切断する この場合は、 query 実行中なので 3 秒以上でもセッションは 切断されない。 この場合は、 Idle in transaction 状態で 3 秒経過する。 Idle in transaction 状態で 3 秒経過したので セッションが切断される。
  • 76. 76 wal_level の変更 9.6 では wal_level の値域が変更になった。 値域 9.5 まで 9.6 説明 minial ○ ○ デフォルト値。 最も WAL サイズが小さくなるが、 PITR やレ プリケーションはできない。 archive ○ - PITR 用。 9.6 でも隠し設定値として使用可能。 hot_standby ○ - レプリケーション用 9.6 でも隠し設定値として使用可能。 replica - ○ 9.6 から追加されたレプリケーション /PITR の WAL 形式が 9.6 で統一された。 logcal ○ ○ ロジカルデコーディング用の WAL 形式。 最もサイズが大きくなる。
  • 79. 79 システムカタログ テーブル / ビュー名 変更種別 変更内容 ぬこメモ pg_aggregate 列の追加 aggcombinefn, aggserialfn, aggdeserialfn, aggserialtype の 追加 パラレル集約の関係?要調査 pg_am 全面変更 個々のアクセスメソッド用フラグが 消えて、ハンドラ関数ポインタに置 き換わったみたい。 インデックスのサポート能力って SQL か らどうやって見ればいいのだろう。 pg_config カタログの追加 pg_config 相当の情報 リモートから config が参照可能になっ たってことだね。 pg_init_privs カタログの追加 システム内オブジェクトの初期権限 管理用のカタログ? 普段使うものではない?要調査 pg_proc 列の追加 proparallel の追加 名前からすると、関数が並列処理に対応す るかどうかのフラグ? CREATE FUNCTION に影響あるのかな。 pg_replication_slots 列の追加 confirmed_flush_lsn の追加。 ロジカルレプリケーション利用者が受信し た場所を示す列かな。 pg_stat_activity 列の変更 waiting が wait_event_type と wait_event に分離した。 監視方式にも影響でるのかな? pg_stat_progress_vacuum カタログの追加 VACUUM 処理進捗表示のためのカ タログ PostgreSQL: Documentation: 9.6: Progress Reporting を見ればいいのだ な。 pg_stat_wal_receiver カタログの追加 名前のとおり、 wal reciever の挙 動に関する稼働統計情報かな。 これを使うと、どういう監視が出来るよう になるのかなあ。
  • 80. 80 pg_stat_vacuum_progress bench=# SELECT p.relname, v.phase, v.heap_blks_total, v.heap_blks_scanned, v.heap_blks_vacuumed, v.index_vacuum_count FROM pg_stat_progress_vacuum as v JOIN pg_class as p ON (v.relid = p.oid); -[ RECORD 1 ]------+----------------- relname | pgbench_accounts phase | scanning heap heap_blks_total | 16394 heap_blks_scanned | 8844 heap_blks_vacuumed | 0 index_vacuum_count | 0 phase, heap_blks_total, heap_blks_scanned の結果から VACUUM 処理の状況を判断する。 VACUUM が完了すると、このビューからレコードは見えなく なる。
  • 82. 82 SQL コマンドの改善 COPY が RETURNING に対応 EXTENSION 削除時の依存オブジェクトの削除 CREATE EXTENSION の CASCADE オプション追加 CREATE ACCESS METHOD の実装 CREATEUSER/NOCREATEUSER オプションを CREATE ROLE 等から削除 VACUUM に DISABLE_PAGE_SKIPPING オプショ ンが追加 etc... 今回はこのうち 1 つだけ紹介します。
  • 83. 83 COPY が RETURNING に対応 test=# TABLE book; id | title | price ----+------------------+------- 1 | 働けメロス | 600 2 | 我輩はぬこである | 550 3 | リア充 | 780 (3 rows) test=# COPY (DELETE FROM book RETURNING *) TO '/tmp/book.txt'; COPY 3 test=# TABLE book; id | title | price ----+-------+------- (0 rows) test=# q [nuko@localhost test]$ cat /tmp/book.txt 1 働けメロス 600 2 我輩はぬこである 550 3 リア充 780 RETURNING 句:更新結果を返却することが可能。 9.6 からは RETURNING の結果を COPY TO でファイルに 直接書き込むことが可能になった。
  • 85. 85 PostgreSQL 標準の CUI 対話的ターミナル 多彩なメタコマンド、タブ補完・・・ おそらく、商用含む RDBMS 標準の 対話的ターミナルとしては 一番使いやすいんじゃないかと思う。 psql って何? 個人の感想です
  • 87. 87 psql の改善 (gexec) test=# SELECT 'CREATE TABLE table_' || generate_series(1,4) || '(id int primary key, data jsonb)'; ?column? ------------------------------------------------------ CREATE TABLE table_1(id int primary key, data jsonb) CREATE TABLE table_2(id int primary key, data jsonb) CREATE TABLE table_3(id int primary key, data jsonb) CREATE TABLE table_4(id int primary key, data jsonb) (4 rows) test=# gexec CREATE TABLE CREATE TABLE CREATE TABLE CREATE TABLE test=# d List of relations Schema | Name | Type | Owner --------+---------+-------+------- public | table_1 | table | nuko public | table_2 | table | nuko public | table_3 | table | nuko public | table_4 | table | nuko (4 rows) 名前の違うテーブルを多数生成する例
  • 88. 88 psql の改善 (crosstabview) tmp=# TABLE sales ; date | item | sales ------------+-------+------- 2016-05-16 | Ramen | 1650 2016-05-16 | Curry | 2500 2016-05-16 | Udon | 500 2016-05-16 | Soba | 600 2016-05-17 | Ramen | 2400 2016-05-17 | Curry | 800 2016-05-18 | Ramen | 1400 2016-05-18 | Curry | 1600 2016-05-18 | Udon | 1000 (9 rows) tmp=# crosstabview date item sales date | Ramen | Curry | Udon | Soba ------------+-------+-------+------+------ 2016-05-16 | 1650 | 2500 | 500 | 600 2016-05-17 | 2400 | 800 | | 2016-05-18 | 1400 | 1600 | 1000 | (3 rows) 直前クエリの結果から、クロスタブっぽい表示にする謎機能
  • 91. 91 auto_explain の ratio 指定 bloom インデックスの追加 cube での K 近傍検索対応 hstore と JSON 変換 intarray のプラン改善用評価関数追加 pageinspect に関数追加 pgcrypto 関数の引数追加 pg_trgm の機能追加 etc... contrib の改善(一部) 今回はこのうち 1 つだけ紹介します。
  • 92. 92 auto_explain というのは 閾値を超えたスロークエリの実行計画を出力 閾値が低すぎるとログ量が多くなる → 性能に影響が出てしまう・・・ 9.6 での改善は、 ratio を指定して 一定の割合のみログ出力するというもの auto_explain の ratio 指定
  • 93. 93 これは 2 月末の PostgreSQL Newbie-hackerthon のときの測定結果 pgbench で測定。 sample_ratio による tps への影響軽減を 確認できた。
  • 96. 96 Let's Download & Testing PostgreSQL 9.6!
  • 98. 98 PostgreSQL 9.6beta1 /beta2 Documentation https://www.postgresql.org/docs/9.6/static/release-9-6.html https://www.postgresql.org/docs/devel/static/release-9-6.html Commitfest 2016-03 https://commitfest.postgresql.org/9/ 篠田の虎の巻 5 「 PostgreSQL 9.6 新機能検証結果」 http://community.hpe.com/hpeb/attachments/hpeb/JapanEnterpriseTopics/195 .6/1/PostgreSQL%209.6%20New%20Features%20ja%2020160530-1.pdf Michael Paquier - Open source developer based in Japan http://michael.otacoo.com/ 永安さんの PostgreSQL Deep Dive PostgreSQL 9.6 のパラレルシーケンシャルスキャンを検証する http://pgsqldeepdive.blogspot.jp/2015/12/parallel-seq-scan.html masahiko sawada さんの Qiita ページ PostgreSQL のマルチ同期レプリケーション http://qiita.com/sawada_masahiko/items/748dfe3dd1cbf92f601c 参考にしたもの