Upload
ryuichiro-munechika
View
3.653
Download
0
Embed Size (px)
Citation preview
1
Incoming PostgreSQL 9.4
2014-06-19db tech showcase 大阪 2014
日本 PostgreSQL ユーザ会関西支部支部長 宗近龍一郎
次バージョンの新機能をご紹介
2
はじめに● 本セッションでは・・・
● 日本 PostgreSQL ユーザ会について● PostgreSQL の現状について● 今秋リリース予定の PostgreSQL 9.4 バージョンについ
てお話します
3
自己紹介● 宗近 龍一郎 ( ムネチカ リュウイチロウ ) といいま
す● 日本 PostgreSQL ユーザ会の関西支部の支部長
をしています● 日本 PostgreSQL ユーザ会については後ほどご紹介を
します
● 大阪にある株式会社あすかという会社で取締役副社長をしています● 会場から歩いて 10 分ほど。扇町公園の近くに会社があ
ります
4
日本 PostgreSQL ユーザ会について● PostgreSQL の普及促進を目的に活動する特定非
営利活動( NPO )法人です。● 北は北海度から、南は沖縄まで 9 つの支部があ
り、それぞれの支部が特徴を出した活動をしています● 勉強会や OSC への出展/講演等
● いくつかの分科会活動があり、ドキュメントの充実や技術検証等を行っています● しくみ分科会、文書・書籍関連分科会等
7
PostgreSQL とは?● 多機能、高性能な、オープンソースのリレーショナ
ルデータベースソフトウェア● INGRES 後継で長い歴史● BSD タイプのライセンス● オーナー企業が無い開発体制
企業
製品
よくある OSS開発体制
開発者
PostgreSQL
企業
企業
企業
PostgreSQL開発体制○
8
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年毎にリリース
9
今のバージョン 9.3 について● OSC2013 沖縄で公演された藤井さんの資料がよく
まとまっています。● http://www.slideshare.net/hadoopxnttdata/postgre-sql93-24136770
● かいつまんで言うと以下の機能の実装● マテリアライズビュー● 更新可能ビュー● JSON の進化● FDW
10
もっと古いバージョン● Postgres95 とか PostgreSQL6.5 というバージョンも
ありました● 古いことなので忘れてしまっても良いです ^^;
11
9.4 拡張のサマリ (1)● 性能向上&性能チューニング補助
● GIN インデックスの性能向上
● バイナリ JSON データ型 (JSONB)● 新しい SQL構文● 管理機能の拡張● 拡張のための基盤機能
● 論理レプリケーションのための基盤● 並列処理のための基盤
12
9.4 拡張のサマリ (2)
バイナリ JSON+
高速 GIN
↓NoSQL 製品に負けない
非リレーション対応
パラレルクエリ、
両方向レプリケーション、
を実現する布石となる機能
13
性能向上 (1)● GIN インデックスの性能向上
● 配列、ハッシュ( hstore )、全文検索テキストなど、複数要素を持つデータ型に対して「ある要素を持つもの」を検索するときに使われるインデックス
● サイズ縮小(2~10倍)、検索も高速化
key(整数型)
tags (配列型)
100 'DBA' , 'SQL'
101 'SQL' , 'HACK'
102 'DBA'
103 'HACK'
GIN
'DBA' を含むものは?
14
性能向上 (2)● WAL 性能向上
● PostgreSQL はデータ更新にあたり、必ずWAL ( Write Ahead Log=トランザクションログ)をストレージに書き出し、しばしば性能ボトルネックとなります
● データ更新に対する WAL 出力量が軽減● WAL 出力のロック競合が軽減(並列性向上)
table, index,etc,
WAL更新処理
postgresプロセス
15
性能チューニング補助● pg_prewarm
● 指定したテーブルやインデックスのデータを共有バッファや OS バッファに載せるユーティリティツール– 再起動直後に動作が遅い場合の対策に
● EXPLAIN ANALYZE 出力が拡張– プラン作成時間と実行時間が(合算でなく)別表示– 「Group Key: 」が表示
● 各種メッセージで行ロック待ち対象行が明示
ERROR: canceling statement due to user requestCONTEXT: while locking tuple (0,1) in relation "t1"
16
バイナリ 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 では三つは同値
17
新しい 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;
18
管理機能の拡張 (1)● REFRESH MATERIALIZED VIEW [CONCURRENTLY]
– 単一ユニークキーならロック競合回避モードを選択可
● ALTER SYSTEMコマンド– SQL で postgresql.conf 設定ファイルを書き換え
● ALTER TABLESPACE拡張● テーブルスペース毎に ramdom_page_cost指定
– ストレージデバイスに応じたチューニング● MOVE でまとめて指定テーブルスペースに移動
– 従来はオブジェクト毎に ALTER TABLE 等で移動
19
管理機能の拡張 (1)● REFRESH MATERIALIZED VIEW [CONCURRENTLY]
– 単一ユニークキーならロック競合回避モードを選択可
● ALTER SYSTEMコマンド– SQL で postgresql.conf 設定ファイルを書き換え
● ALTER TABLESPACE拡張● テーブルスペース毎に random_page_cost指定
– ストレージデバイスに応じたチューニング● MOVE でまとめて指定テーブルスペースに移動
– 従来はオブジェクト毎に ALTER TABLE 等で移動
20
管理機能の拡張 (2)● pg_stat_archiver ビュー
– アーカイブ状態を SQL コマンドから確認
● 設定項目追加● autovacuum_work_mem
– 自動 VACUUMにおける work_mem● session_preload_library
– 接続ごとの事前ロードライブラリ● wal_log_hints
– ヒントビット(フラグ)変更でも WAL を書き出すか指定/ onでチェックサム機能を有効にしたとき同様の WAL量となる
21
管理機能の拡張 (3)● recovery_target = 'immediate'
● recovery.conf に、このように記述すると整合性がとれた段階でリカバリを停止して、起動するようになる
● psql \pset の拡張● タブ補完● 設定値一覧表示
22
拡張のための基盤機能 (1)● 論理(ロジカル)変更出力フレームワーク
● WAL に行変更情報を出力できる● 読み取る API が用意されている● 行を特定するのに何を使うかをテーブル毎に指定
– 行全体の旧値、主キー、など
● レプリケーション、監査ログ、データ変更チェック(クエリキャッシュ無効化する、変更がなければ次のバックアップを取らない、など)に応用– PostgreSQL 本体付属ではないが、本機能を活用したマルチ
マスタレプリケータ「 BDR 」がある
23
拡張のための基盤機能 (2)● 動的 (dynamic) バックエンドプロセス
– これまでは起動時に起動するのみ– 任意タイミングで起動、停止できる
● 動的 (dynamic)共有バッファ確保– 本機能によるメッセージキュー「 contrib/test_shm_mq 」
● これらは拡張フレームワーク● 将来のパラレルクエリを睨む
– 単一接続のクエリから、複数 CPUコアを使って処理を実行させるのに必要な枠組み
– 動的共有バッファはプロセス間のデータ交換に必要
24
PostgreSQL 9.4 のスケジュール
● 1年前くらいに 9.4系開発開始(コードブランチ)● CF ( コミットフェスト)ごとに機能追加を行っていく● 現在ベータ版でのテスト段階
● beta1 → beta2 → rc1 → rc2 → 9.4 リリース
● 例年秋ごろリリース
master
9.42013年 6月 13 日コードブランチ
2014年 1月~最終の CF4 で仕様凍結
2014年 5月 15 日9.4beta1 リリース
2014年秋9.4 リリース?
25
最近の面白いネタ● GPUで PostgreSQL を高速化
● http://ch.nicovideo.jp/akiba-cyberspacecowboys/blomaga/ar555735
● PG-Stormにより GPUに処理を振り分ける
26
ご清聴ありがとうございました
● ご質問
● 日本語の PostgreSQL情報は、
JPUG Web サイト
www.postgresql.jplets.postgresql.jp
JPUG メーリングリスト