28
1 Incoming PostgreSQL 9.4 2014-08-28 インサイトテクノロジー大阪支社にて 日本 PostgreSQL ユーザ会 関西支部支部長 宗近龍一郎 次バージョンの新機能をご紹介

PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

1

Incoming PostgreSQL 9.4

2014-08-28インサイトテクノロジー大阪支社にて

日本 PostgreSQL ユーザ会関西支部支部長 宗近龍一郎

次バージョンの新機能をご紹介

Page 2: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

2

はじめに● 本セッションでは・・・

● 日本 PostgreSQL ユーザ会について● PostgreSQL の現状について● 今秋リリース予定の PostgreSQL 9.4 バージョンについ

てお話します● なお、この講演の内容は dbtech show case 2014

Osaka で講演したものとほぼ同じです

Page 3: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

3

自己紹介1● 宗近 龍一郎 ( ムネチカ リュウイチロウ ) といいま

す● 日本 PostgreSQL ユーザ会の関西支部の支部長

をしています● 日本 PostgreSQL ユーザ会については後ほどご紹介を

します

● 大阪にある株式会社あすかという会社で取締役副社長をしています● 会場から歩いて 10 分ほど。扇町公園の近くに会社があ

ります

Page 4: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

4

自己紹介2● FaceBook は実名の「宗近 龍一郎」で● Twitter は @my_pp で書いてます。

Page 5: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

5

日本 PostgreSQL ユーザ会について● PostgreSQL の普及促進を目的に活動する特定非

営利活動( NPO )法人です。● 北は北海度から、南は沖縄まで 9 つの支部があ

り、それぞれの支部が特徴を出した活動をしています● 勉強会や OSC への出展/講演等

● いくつかの分科会活動があり、ドキュメントの充実や技術検証等を行っています● しくみ分科会、文書・書籍関連分科会等

Page 6: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

6

SRA OSS Inc. について● SRA OSS は、オープンソースソフトウェアのトータル・ソ

リューション・サプライヤーとして、コンサルティング、ソフトウェアサポート、トレーニング、そして PostgreSQL をベースにした PowerGres ファミリーの提供という事業を展開しています。

● PowerGres の開発元ではありますが、 PostgreSQL の開発元ではありません。

● 取締役日本支社長の石井さんが、 PostgreSQL に日本語、韓国語、中国語、その

● 他の英語以外の文字コードを扱える機能を追加したり、負荷分散に寄与するミドルウェアの pgpool-II の開発を行っています。

Page 7: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

7

日本 PostgreSQL ユーザ会ウェブサイト

● https://www.postgresql.jp/

Page 8: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

8

Let's Postgres

● http://lets.postgresql.jp/

Page 9: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

9

PostgreSQL とは?● 多機能、高性能な、オープンソースのリレーショナ

ルデータベースソフトウェア● INGRES 後継で長い歴史● BSDタイプのライセンス● オーナー企業が無い開発体制

企業

製品

よくある OSS開発体制

開発者

PostgreSQL

企業

企業

企業

PostgreSQL開発体制○

Page 10: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

10

PostgreSQL の軌跡

PG 7.0 PG 7.1 PG 7.2 PG 7.3 PG 7.4 PG 8.0 PG 8.1 PG 8.2 PG 8.3 PG 8.4 PG 9.0 PG 9.1 PG 9.20

20000

40000

60000

80000

100000

120000

PostgreSQL のコードサイズとリリース

コー

ドサ

イズ

(byt

e)

更新の高速化

ビットマップスキャンプリペアド

ステートメント

並列実行VACUUM外部キー、

JOIN構文

トランザクションログ

スキーマ

PITR 、Windows

12 CPUスケール

|2001年

4月

|2005年

1月

|2009年

7月

|2006年12月

|2002年

11月

ウィンドウ関数再帰 SQL 64 CPU

スケール

|2011年

9月

同期レプリケーション外部テーブル

レプリケーションWindows 64bit

コードサイズとリリース

1メジャーバージョンが1年毎にリリース

Page 11: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

11

今のバージョン 9.3 について● OSC2013沖縄で公演された藤井さんの資料がよく

まとまっています。● http://www.slideshare.net/hadoopxnttdata/postgre-sql93-24136770

● かいつまんで言うと以下の機能の実装● マテリアライズビュー● 更新可能ビュー● JSON の進化● FDW

Page 12: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

12

もっと古いバージョン● Postgres95とか PostgreSQL6.5というバージョンも

ありました● 古いことなので忘れてしまっても良いです ^^;

Page 13: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

13

9.4 拡張のサマリ (1)● 性能向上&性能チューニング補助

● GIN インデックスの性能向上

● バイナリ JSONデータ型  (JSONB)● 新しい SQL構文● 管理機能の拡張● 拡張のための基盤機能

● 論理レプリケーションのための基盤● 並列処理のための基盤

Page 14: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

14

9.4 拡張のサマリ (2)

バイナリ JSON+

高速 GIN

↓NoSQL 製品に負けない

非リレーション対応

パラレルクエリ、

両方向レプリケーション、

を実現する布石となる機能

Page 15: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

15

性能向上 (1)● GIN インデックスの性能向上

● 配列、ハッシュ( hstore )、全文検索テキストなど、複数要素を持つデータ型に対して「ある要素を持つもの」を検索するときに使われるインデックス

● サイズ縮小(2~10倍)、検索も高速化

key (整数型) tags (配列型)

100 'DBA' , 'SQL'

101 'SQL' , 'HACK'

102 'DBA'

103 'HACK'

GIN

'DBA' を含むものは?

Page 16: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

16

性能向上 (2)● WAL性能向上

● PostgreSQL はデータ更新にあたり、必ずWAL (Write Ahead Log=トランザクションログ)をストレージに書き出し、しばしば性能ボトルネックとなります

● データ更新に対するWAL 出力量が軽減● WAL 出力のロック競合が軽減(並列性向上)

table, index,etc,

WAL更新処理

postgresプロセス

Page 17: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

17

性能チューニング補助● pg_prewarm

● 指定したテーブルやインデックスのデータを共有バッファや OS バッファに載せるユーティリティツール– 再起動直後に動作が遅い場合の対策に

● EXPLAIN ANALYZE 出力が拡張– プラン作成時間と実行時間が(合算でなく)別表示– 「 Group Key: 」が表示

● 各種メッセージで行ロック待ち対象行が明示

ERROR: canceling statement due to user requestCONTEXT: while locking tuple (0,1) in relation "t1"

Page 18: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

18

バイナリ JSON 型● 新たな JSONデータ格納用JSONBデータ型

● 構文解析したうえでバイナリ格納– 従来JSON型はテキスト格納で、処理のつど構文解析– 要素間の空白文字や、無駄なキー重複定義は、データとして保持されない

● GIN インデックスが利用可能– JSONデータ内の要素を高速に検索可能

{"a":1,"b":2,"c":3}{ "a":1, "b":2, "c":3 }{"a":1, "b":200, "b":20,"b":2, "c":3}

JSONB では三つは同値

Page 19: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

19

新しい SQL 構文● CHECK オプション付き更新ビュー

– ビューとして見える内容しか挿入、更新できなくなります

● FILTER

– 集約処理時点でフィルタを設定できます

CREATE VIEW uv AS SELECT c1, c2 FROM t1 WITH CHECK OPTION;

SELECT grp, count(*) FILTER (WHERE status = 1) count(*) (WHERE status = 2) FROM tbl GROUP BY grp;

Page 20: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

20

管理機能の拡張 (1)● REFRESH MATERIALIZED VIEW [CONCURRENTLY]

– 単一ユニークキーならロック競合回避モードを選択可

● ALTER SYSTEMコマンド– SQL で postgresql.conf設定ファイルを書き換え

● ALTER TABLESPACE拡張● テーブルスペース毎に ramdom_page_cost指定

– ストレージデバイスに応じたチューニング● MOVEでまとめて指定テーブルスペースに移動

– 従来はオブジェクト毎に ALTER TABLE等で移動

Page 21: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

21

管理機能の拡張 (1)● REFRESH MATERIALIZED VIEW [CONCURRENTLY]

– 単一ユニークキーならロック競合回避モードを選択可

● ALTER SYSTEMコマンド– SQL で postgresql.conf設定ファイルを書き換え

● ALTER TABLESPACE拡張● テーブルスペース毎に random_page_cost指定

– ストレージデバイスに応じたチューニング● MOVEでまとめて指定テーブルスペースに移動

– 従来はオブジェクト毎に ALTER TABLE等で移動

Page 22: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

22

管理機能の拡張 (2)● pg_stat_archiverビュー

– アーカイブ状態を SQL コマンドから確認

● 設定項目追加● autovacuum_work_mem

– 自動 VACUUMにおける work_mem● session_preload_library

– 接続ごとの事前ロードライブラリ● wal_log_hints

– ヒントビット(フラグ)変更でも WAL を書き出すか指定/ onでチェックサム機能を有効にしたとき同様のWAL量となる

Page 23: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

23

管理機能の拡張 (3)● recovery_target = 'immediate'

● recovery.conf に、このように記述すると整合性がとれた段階でリカバリを停止して、起動するようになる

● psql \pset の拡張● タブ補完● 設定値一覧表示

Page 24: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

24

拡張のための基盤機能 (1)● 論理(ロジカル)変更出力フレームワーク

● WAL に行変更情報を出力できる● 読み取る API が用意されている● 行を特定するのに何を使うかをテーブル毎に指定

– 行全体の旧値、主キー、など

● レプリケーション、監査ログ、データ変更チェック(クエリキャッシュ無効化する、変更がなければ次のバックアップを取らない、など)に応用– PostgreSQL 本体付属ではないが、本機能を活用したマルチマスタレプリケータ「 BDR 」がある

Page 25: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

25

拡張のための基盤機能 (2)● 動的 (dynamic) バックエンドプロセス

– これまでは起動時に起動するのみ– 任意タイミングで起動、停止できる

● 動的 (dynamic)共有バッファ確保– 本機能によるメッセージキュー「 contrib/test_shm_mq 」

● これらは拡張フレームワーク● 将来のパラレルクエリを睨む

– 単一接続のクエリから、複数 CPUコアを使って処理を実行させるのに必要な枠組み

– 動的共有バッファはプロセス間のデータ交換に必要

Page 26: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

26

PostgreSQL 9.4 のスケジュール

● 1年前くらいに 9.4系開発開始(コードブランチ)● CF ( コミットフェスト)ごとに機能追加を行っていく● 現在ベータ版でのテスト段階 (beta2 が 7月リリー

ス )● beta1 → beta2 → rc1 → rc2 → 9.4 リリース

● 例年秋ごろ正式版がリリース

master

9.42013年 6月 13日コードブランチ

2014年 1月~最終の CF4 で仕様凍結

2014年5月 15日9.4beta1 リリース

2014年秋9.4 リリース?

Page 27: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

27

最近の面白いネタ● 9/11 に PostgreSQL の JSONB対応の開発に関わってきた Oleg Bartunov氏が来日。東京で講演をされます。● http://www.sraoss.co.jp/event_seminar/2014/0911.php

Page 28: PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介

28

ご清聴ありがとうございました

● ご質問

● 日本語の PostgreSQL情報は、

JPUG Web サイト

www.postgresql.jplets.postgresql.jp

JPUG メーリングリスト

[email protected]