SlideShare a Scribd company logo
Copyright © 2013 NTT DATA Corporation
2013年7月6日
NTTデータ 藤井雅雄
PostgreSQL9.3新機能紹介
オープンソースカンファレンス 2013 Okinawa
2Copyright © 2013 NTT DATA Corporation
今日お話ししたいこと
 PostgreSQLのこれまでと現在の話
 PostgreSQLのこれから … 9.3の話
開発に役立つ新機能
運用に役立つ新機能
ちょっぴり注意!非互換性について
 まとめ
Copyright © 2013 NTT DATA Corporation 3
PostgreSQLのこれまでと現在の話
4Copyright © 2013 NTT DATA Corporation
PostgreSQLの歩み
PostgreSQL最新版は9.2.4(2013/4/4 リリース)
2005-2009
2010-
8系
9系
VACUUMとの戦い
運用性・性能アップ
レプリケーションの導入
更なる拡張
基礎固め
7系 2000-2005
9.3
開発中
5Copyright © 2013 NTT DATA Corporation
PostgreSQLの歩み~9系を振り返る
2011
2012
2013
9.0
9.1
9.2
同期レプリケーション
UNLOGGED TABLE
SQL/MED
スケーラビリティ向上
カスケードレプリケーション
インデックスオンリースキャン
2010
非同期レプリケーション
ホットスタンバイ
SQL構文強化
8系
-2009
9.3
開発中
PostgreSQL最新版は9.2.4(2013/4/4 リリース)
6Copyright © 2013 NTT DATA Corporation
CPUスケーラビリティの向上
参照時の軽量ロックが改良され、参照処理性能が大幅にアップ!
メニーコアの環境で更なるパフォーマンスの発揮が期待されます
論理コア64以上では、
9.1の実に3倍以上の
スループットを実現!
どんとこい!
メニーコア
PgCon 2012
Robert Haas 発表資料 (2012/5/18) より
7Copyright © 2013 NTT DATA Corporation
カスケードレプリケーション
シングルマスタ
マルチスタンバイ マルチスタンバイ
複製 複製
更新SQL
参照SQL
参照SQL
参照SQL
シングルマスタ-マルチスタンバイのレプリケーション
同期/非同期やカスケードレプリケーションなどが利用可能
スタンバイで参照SQLを実行して負荷分散
スタンバイからのバックアップを取得可能!
バック
アップ
低負荷なスタンバイ
から取得!
Copyright © 2013 NTT DATA Corporation 8
PostgreSQLのこれから…9.3の話
9Copyright © 2013 NTT DATA Corporation
PostgreSQL9.3のFAQ
Q1. 特徴は?
A1. “Ease of Use” by Robert Treat
開発者・運用者向けの新機能が充実!
Q2. いつ出るの?
A2. 9月ごろのリリースが予想されています!
7/6現在β2がリリース中
Copyright © 2013 NTT DATA Corporation 10
開発に役立つ新機能!
11Copyright © 2013 NTT DATA Corporation
マテリアライズドビュー(マテビュー)
ID NAME
1 沖縄
2 新潟
…
ID NAME
1 沖縄
2 新潟
…
ID NAME
マテビュー
(普通の)ビュー テーブル
SELECT *
FROM ビュー
SELECT *
FROM マテビュー
SELECT *
FROM テーブル
クエリの結果をビューにキャッシュできる!
 複雑で時間のかかるクエリのビューに対するアクセスが高速に
 頻発するビューへのアクセスに効果
マテビュー作成時
にキャッシュ!
12Copyright © 2013 NTT DATA Corporation
マテリアライズドビュー(マテビュー)
ID NAME
1 沖縄
2 新潟
3 岐阜
…
ID NAME
マテビュー
(普通の)ビュー
SELECT *
FROM ビュー
SELECT *
FROM マテビュー
SELECT *
FROM テーブル
クエリの結果をビューにキャッシュできる!
 複雑で時間のかかるクエリのビューに対するアクセスが高速に
 頻発するビューへのアクセスに効果
ID NAME
1 沖縄
2 新潟
3 岐阜
…
テーブル
REFRESH
元テーブルの更新は
REFRESHコマンドで
マテビューに反映
13Copyright © 2013 NTT DATA Corporation
マテリアライズドビュー(マテビュー)
高度な機能はまだ9.3では利用できないことに注意
自動・定期リフレッシュ機能がない
 元テーブルの更新ごとに自動的にリフレッシュ、定期的にリフレッシュ
する機能がない
 トリガやcronで代替
高速リフレッシュ機能がない
 元テーブルの更新差分だけをリフレッシュできない
 リフレッシュ時に、マテビューに排他ロックが必要
元テーブルが頻繁に更新される場合や最新の結果が必要な
場合は、マテビューの利用を慎重に要検討
14Copyright © 2013 NTT DATA Corporation
更新可能ビュー
ID NAME
1 沖縄
2 新潟
…
ID NAME
1 沖縄
2 新潟
…
ID NAME
マテビュー
(普通の)ビュー テーブル
INSERT
UPDATE
DELETE
ビューを更新できる!更新は自動的に元テーブルに反映
 商用DBのシノニムの代替に
 単純でないクエリのビューは更新できないことに注意
INSERT
UPDATE
DELETE
INSERT
UPDATE
DELETE
15Copyright © 2013 NTT DATA Corporation
JSON型の進化
JSONファイル
{
"id":1,
"name":"鈴木",
"address":"東京",
"birth_day":"1970-01-01“
}
CREATE TABLE tbl (
data json);
key value
JSON形式のデータを格納するデータ型
 バージョン9.2から利用可能
 バージョン9.2では、行や配列をJSON形式に変換する関数だけサポート
16Copyright © 2013 NTT DATA Corporation
JSON型の進化
JSON型の演算子や関数が充実!
 利用可能な演算子の数が 0個(9.2) → 4個(9.3) に増加
JSON形式のデータ内から一部を取得するのが楽に!
 利用可能な関数の数が 2個(9.2) → 12個(9.3) に増加
JSON形式のデータをKEYとVALUEの行形式に変換!
JSON形式のデータからKEYだけを取得!
17Copyright © 2013 NTT DATA Corporation
FDW(Foreign Data Wrapper)
ID NAME
1 沖縄
2 新潟
…
ID NAME
1 沖縄
2 新潟
…外部テーブル
テーブル
外部のデータをPostgreSQLのテーブルとして扱う機能
1,沖縄
2,新潟
…
CSVファイル
PostgreSQL
MySQL
read()
SELECT
SELECT
mysql_fdw
file_fdw
18Copyright © 2013 NTT DATA Corporation
FDW(Foreign Data Wrapper)
データベース ファイル
mysql_fdw file_fdw (contrib)
oracle_fdw json_fdw
NoSQL その他
mongo_fdw twitter_fdw
redis_fdw s3_fdw
~9.2
19Copyright © 2013 NTT DATA Corporation
FDW(Foreign Data Wrapper)
データベース ファイル
mysql_fdw file_fdw (contrib)
oracle_fdw json_fdw
postgres_fdw (contrib)
NoSQL その他
mongo_fdw twitter_fdw
redis_fdw s3_fdw
9.3
20Copyright © 2013 NTT DATA Corporation
postgres_fdw
ID NAME
1 沖縄
2 新潟
…
ID NAME
1 沖縄
2 新潟
…外部テーブル
テーブル
リモートのPostgreSQLのテーブルを、ローカルのPostgreSQLの
テーブルとして扱える!
1,沖縄
2,新潟
…
CSVファイル
PostgreSQL
PostgreSQL
read()
SELECT
SELECT
postgres_fdw
file_fdw
21Copyright © 2013 NTT DATA Corporation
書込可能FDW
ID NAME
1 沖縄
2 新潟
…
ID NAME
1 沖縄
2 新潟
…外部テーブル
テーブル
外部テーブルを更新できる!更新は自動的に外部のデータに
反映
1,沖縄
2,新潟
…
CSVファイル
PostgreSQL
PostgreSQL
read()
write()
SELECT
INSERT
UPDATE
DELETE
SELECT
INSERT
UPDATE
DELETE postgres_fdw
file_fdw
Copyright © 2013 NTT DATA Corporation 22
運用に役立つ新機能!
23Copyright © 2013 NTT DATA Corporation
高速フェイルオーバ
故障
検知
共有ディスク
切替
リカバリ
チェック
ポイント
共有ディスク
故障
検知
リカ
バリ
チェック
ポイント
故障
検知
リカ
バリ 9.3
~9.2
フェイルオーバ時間を大幅に短縮!
 実行に長時間かかるチェックポイントをスキップ
24Copyright © 2013 NTT DATA Corporation
故障検知をすぐに
新しいタイムアウトパラメータ wal_receiver_timeout で
スタンバイはすぐにマスタ故障を検知!
(*) replication_timeout は wal_sender_timeout に改名
スタンバイ故障の検知
• tcp_keepalives_idle
• tcp_keepalives_interval
• tcp_keepalives_count
• replication_timeout
マスタ故障の検知
• keepalives_idle
• keepalives_interval
• keepalives_count
マスタ 故障
故障 スタン
バイ
9.2
25Copyright © 2013 NTT DATA Corporation
故障検知をすぐに
新しいタイムアウトパラメータ wal_receiver_timeout で
スタンバイはすぐにマスタ故障を検知!
(*) replication_timeout は wal_sender_timeout に改名
スタンバイ故障の検知
• tcp_keepalives_idle
• tcp_keepalives_interval
• tcp_keepalives_count
• replication_timeout
• wal_sender_timeout マスタ故障の検知
• keepalives_idle
• keepalives_interval
• keepalives_count
• wal_receiver_timeout
マスタ 故障
故障 スタン
バイ
9.3
26Copyright © 2013 NTT DATA Corporation
カスケードレプリケーションの運用性向上
マスタ スタン
バイ
スタン
バイ
バック
アップ
アーカ
イブ
カスケードレプリケーションのフェイルオーバ時にバックアップや共
有アーカイブが不要に!
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
通常時
マスタ昇格直後
フェイルオーバ後
再開準備中
マスタ故障により
スタンバイがマスタに昇格
レプリケーション再開9.2
面倒!大変!イケテナイ!
27Copyright © 2013 NTT DATA Corporation
カスケードレプリケーションの運用性向上
マスタ スタン
バイ
スタン
バイ
カスケードレプリケーションのフェイルオーバ時にバックアップや共
有アーカイブが不要に!
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
通常時
マスタ昇格直後
フェイルオーバ後
マスタ故障により
スタンバイがマスタに昇格
楽チン!時間もかからない!
レプリケーション再開
9.3
28Copyright © 2013 NTT DATA Corporation
ファイルシステム
DB CLOG WAL
ストレージやファイル
システムで破損検知
レイアウトが壊れて
いないかで破損検知
CRC 特別な機構で破損検知
DB
共有バッファ
~9.2
データページチェックサム
データページにチェックサムを付けて、ページの破損をすぐに検知!
 早急な破損検知が非常に重要
破損がクエリ結果の誤りやクラッシュを招く
破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も
 initdb -k (or --data-checksums)
 性能への影響が大きいことに注意
29Copyright © 2013 NTT DATA Corporation
ファイルシステム
DB CLOG WAL
CRC
DB
共有バッファ
チェック
サム
チェック
サム
チェックサムの
付与・更新
ストレージやファイル
システムで破損検知
レイアウトが壊れて
いないかで破損検知
特別な機構で破損検知
9.3
チェックサムの
妥当性確認
データページチェックサム
データページにチェックサムを付けて、ページの破損をすぐに検知!
 早急な破損検知が非常に重要
破損がクエリ結果の誤りやクラッシュを招く
破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も
 initdb -k (or --data-checksums)
 性能への影響が大きいことに注意
30Copyright © 2013 NTT DATA Corporation
イベントトリガ
DDLにトリガを仕掛けられる!
 9.2以前では、トリガを仕掛けられるのはINSERT/UPDATE/DELETE/TRUNCATEのみ
 9.3以降では、CREATE/ALTER/DROPのDDLにトリガを定義可能。トリガ発動条件は、
ddl_command_start: DDL開始時
ddl_command_end : DDL終了時
sql_drop : DROPやALTER TABLE実行時。対象オブジェクトを指定可能
クレバーなDBA
空き領域
(小)
DDL開始時に
空き領域を確認する
イベントトリガ
十分な空き領域がないのにDDLを実行して、
ディスクフルになるのは勘弁してほしい・・・
そうだ!!
DDL開始時にイベントトリガを仕掛けよう!オペレータ
ALTER TABLEしよう♪
31Copyright © 2013 NTT DATA Corporation
パラレルpg_dump
テーブル1
テーブル2
テーブル3
ワーカー
バック
アップ
ワーカー1
ワーカー2
テーブル1
テーブル2
テーブル3
pg_dump pg_restore –j 2
~9.2
pg_dumpのパラレル実行で、バックアップ時間を大幅に短縮!
 メニーコアでテーブル数が多いときに力を発揮
 トランザクション的に整合性のあるバックアップを取得できる
 スタンバイでは実行できない
 パラレル数+1の接続を使うことに注意
32Copyright © 2013 NTT DATA Corporation
パラレルpg_dump
テーブル1
テーブル2
テーブル3
ワーカー1
ワーカー2
ワーカー3
マネージャ
バック
アップ
ワーカー1
ワーカー2
テーブル1
テーブル2
テーブル3
pg_dump –j 3 pg_restore –j 2
9.3
pg_dumpのパラレル実行で、バックアップ時間を大幅に短縮!
 メニーコアでテーブル数が多いときに力を発揮
 トランザクション的に整合性のあるバックアップを取得できる
 スタンバイでは実行できない
 パラレル数+1の接続を使うことに注意
33Copyright © 2013 NTT DATA Corporation
pg_isready
DBサーバ
postmasterプロセス
が存在するか?
pg_ctl status
リモート
SQLの実行が
成功するか?
"SELECT 1"
PostgreSQLの稼働状況をお手軽に確認できるクライアントツール
$ pg_isready -h <ホスト名> -p <ポート番号>
$ echo $?
0 : 正常応答 2 : 応答なし
1 : 接続拒否 3 : パラメータ不正
~9.2
34Copyright © 2013 NTT DATA Corporation
pg_isready
DBサーバ
postmasterプロセス
が存在するか?
pg_ctl status
リモート
SQLの実行が
成功するか?
"SELECT 1"
pg_isready
PostgreSQLの稼働状況をお手軽に確認できるクライアントツール
$ pg_isready -h <ホスト名> -p <ポート番号>
$ echo $?
PostgreSQLに
接続できるか?
9.3
0 : 正常応答 2 : 応答なし
1 : 接続拒否 3 : パラメータ不正
35Copyright © 2013 NTT DATA Corporation
pg_isready
 確認方法により、稼働状況の見え方が異なるため注意
pg_ctl status SQL実行 pg_isready
稼働状況の確認方
法
postmasterプロセス
が存在するか?
SQLの実行が成功す
るか?
PostgreSQLに接続
できるか?
正常稼働中 稼働 稼働 稼働
停止後 停止 停止 停止
起動中(リカバリ中) 稼働 停止 停止(拒否)
停止中 稼働 停止 停止(拒否)
接続権限なし(*1) 稼働 停止 稼働
同時接続数フル 稼働 停止 稼働
(*1) pg_hba.confで接続が許可されていない場合など
36Copyright © 2013 NTT DATA Corporation
psql ¥watch
psqlでSQLの繰り返し実行が可能に!
$ watch -n 5 'psql -c "SELECT count(*) FROM pg_stat_activity"'
$ while true; do
psql -c "SELECT count(*) FROM pg_stat_activity"
sleep 5
done
PostgreSQLへの接続数を5秒間隔で確認したい!
~9.2
37Copyright © 2013 NTT DATA Corporation
psql ¥watch
psqlでSQLの繰り返し実行が可能に!
$ watch -n 5 'psql -c "SELECT count(*) FROM pg_stat_activity"'
$ while true; do
psql -c "SELECT count(*) FROM pg_stat_activity"
sleep 5
done
$ psql
=# SELECT count(*) FROM pg_stat_activity;
=# ¥watch 5
PostgreSQLへの接続数を5秒間隔で確認したい!
直前に実行したSQLを繰り返し実行
9.3
38Copyright © 2013 NTT DATA Corporation
ちょっぴり注意!非互換について
…………
0000000100000000000000FD
0000000100000000000000FE
000000010000000100000000
000000010000000100000001
…………
…………
0000000100000000000000FD
0000000100000000000000FE
0000000100000000000000FF
000000010000000100000000
000000010000000100000001
…………
WALファイル名/アーカイブファイル名の末尾に注意
 運用スクリプトなどで、WALファイル名やアーカイブファイル名をもとにファイ
ル取得や削除を制御している場合は、影響がないか確認しましょう!
~9.2 9.3
39Copyright © 2013 NTT DATA Corporation
まとめ
Q1. PostgreSQL9.3の特徴は?
A1. “Ease of Use” by Robert Treat
開発者・運用者向けの新機能が充実!
Q2. PostgreSQL9.3はいつ出るの?
A2. 9月ごろのリリースが予想されています!
Copyright © 2011 NTT DATA Corporation
Copyright © 2013 NTT DATA Corporation
Copyright © 2011 NTT DATA Corporation
Copyright © 2013 NTT DATA Corporation
ご清聴ありがとうございました!!
Copyright © 2013 NTT DATA Corporation 4Copyright © 2013 NTT DATA Corporation 4
付録
42Copyright © 2013 NTT DATA Corporation
ちょっぴり注意!非互換について
被参照
ID NAME
1 東京
2 大阪
3 沖縄
参照
ID NAME
1 東京
2 大阪
被参照
ID NAME
1 東京
2 京都
3 沖縄
参照
ID NAME
1 東京
2 (NULL)
~9.2 UPDATE 被参照
SET NAME=‘京都’
WHERE ID=2
被参照で更新した列のみが
SET NULL/DEFAULTの対象
IDとNAME列で
外部キー制約
外部キーのON UPDATE SET NULL/DEFAULTの挙動が変化
 9.2以前では、更新列のみがSET NULL/DEFAULTの対象
 9.3以降では、外部参照している列全体がSET NULL/DEFAULTの対象
43Copyright © 2013 NTT DATA Corporation
ちょっぴり注意!非互換について
外部キーのON UPDATE SET NULL/DEFAULTの挙動が変化
 9.2以前では、更新列のみがSET NULL/DEFAULTの対象
 9.3以降では、外部参照している列全体がSET NULL/DEFAULTの対象
被参照
ID NAME
1 東京
2 大阪
3 沖縄
参照
ID NAME
1 東京
2 大阪
被参照
ID NAME
1 東京
2 京都
3 沖縄
参照
ID NAME
1 東京
(NULL) (NULL)
UPDATE 被参照
SET NAME=‘京都’
WHERE ID=2
IDとNAME列で
外部キー制約
外部参照している列全体が
SET NULL/DEFAULTの対象
9.3
44Copyright © 2013 NTT DATA Corporation
カスケードレプリケーションの運用性向上
マスタ スタン
バイ
スタン
バイ
バック
アップ
アーカ
イブ
カスケードレプリケーションのフェイルオーバ時にバックアップや共
有アーカイブが不要に!
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
通常時
マスタ昇格直後
フェイルオーバ後
再開準備中
マスタ故障により
スタンバイがマスタに昇格
レプリケーション再開9.2
面倒!大変!イケテナイ!
TLI=1 TLI=1 TLI=1
TLI=2 TLI=1
TLI=2 TLI=2
Copyright © 2013 NTT DATA Corporation 45
9.4でもアツい機能がゾクゾクと!
4Copyright © 2013 NTT DATA Corporation
パラレルクエリ
 パラレルpg_dumpなど、今パラレル化がアツい!
 現状
1クエリは1プロセス(1コア)でしか処理できないため、CPU数を増やしても
1クエリの性能は上がらない
 目標
パラレルクエリ(1クエリを複数プロセスでパラレルに処理して、性能向上さ
せる機能)のサポート
 開発の方向性
パラレルクエリを実装するのは非常に難しいため、まずはパラレルソートや
インデックス作成のパラレル化から徐々に取り組む
47Copyright © 2013 NTT DATA Corporation
8 16 32 64
スループット
PostgreSQL9.2
PostgreSQL9.1
CPUコア数(論理)
更新性能のスケールアップ
更新時のトランザクションログ生成時のロックが改良され、更新処理
性能が大幅にアップ!
9.3の実に3倍以上
のスループットを実
現!
メニーコア
高速ディスク
任せろ!
6432168
v9.4
v9.3
※イメージ図
48Copyright © 2013 NTT DATA Corporation
レプリケー
ション
レプリケーションの運用性向上
マスタ スタン
バイ
停止 マスタ
マスタスタン
バイ
レプリケー
ション
停止 マスタ
バック
アップ
両系稼働
マスタ単独稼働
両系稼働
バックアップ転送
フェイルバック時にバックアップが不要に!
マスタ故障により
フェイルオーバ
旧マスタの再組込み
(フェイルバック)9.3
面倒!大変!時間かかりすぎ!
49Copyright © 2013 NTT DATA Corporation
レプリケー
ション
レプリケーションの運用性向上
マスタ スタン
バイ
マスタスタン
バイ
レプリケー
ション
両系稼働 両系稼働
フェイルバック時にバックアップが不要に!
マスタ故障により
フェイルオーバ
旧マスタの再組込み
(フェイルバック)
停止 マスタ
マスタ単独稼働
9.4
楽チン!時間もかからない!
Copyright © 2013 NTT DATA Corporation 50
紹介しきれなかった9.3新機能
51Copyright © 2013 NTT DATA Corporation
64bit API Large-Object
ラージオブジェクトの最大サイズが
2GB -> 4TBへ!
商用DBMSからの移行障壁が少しは下がる・・?
9.3 !
ラージオブジェクト
~ 4TB
9.2 ..
余裕!つらい!
52Copyright © 2013 NTT DATA Corporation
lock_timeout
 ロック待機時間に応じてクエリをキャンセルできるようにな
りました。
従来はstatement_timeoutでカバーしていました
• この方法では、ロック待機時間 + 実際の処理時間 を考慮するため、厳
密にはロック待機時間のキャンセルではありませんでした。
指定方法はパラメータ値の設定
SQL個別の指定時は、直前にSET文を指定すること!
SELECT * FROM tbl WHERE c1=xxx FOR
UPDATE WAIT 10;
-- Previously “SET statement_timeout = 10000;”
SET lock_timeout = 10000;
SELECT * FROM tbl WHERE c1=xxx FOR UPDATE ;
Oracle
PostgreSQL
53Copyright © 2013 NTT DATA Corporation
lock_timeout こぼれ話
 実は、PostgreSQLの内部的なtimeout frameworkが大きく改善されており、
ユーザ定義のTimeout処理を設けやすくなっています。コア開発時には要チェッ
クです!
 http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=f34c68f0
9671c4566854c7e20e9253d4f335c0b0
 src/include/utils/timeout.h をよく見ておきましょう!
 イベント(DEADLOCK_TIMEOUT、 STANDBY_TIMEOUTなど)ごとにTimeoutIDが定め
られました。
 ユーザ独自定義用に使えるIDもあります。(USER_TIMEOUT)
 RegisterTimeout(TimeoutId id, timeout_handler handler)で登録
 後は用意されたAPIとアクセサを使って制御します
54Copyright © 2013 NTT DATA Corporation
LATERAL サポート
 副問い合わせやFROM句での関数利用が捗ります
 副問い合わせなどでは、副問い合わせ外の条件やテーブルなどは見
えません
 LATERALにより、そのスコープを外に広げることができます。
=# SELECT * FROM lt,
(SELECT * FROM rt WHERE lt.c1 = rt.c1)s WHERE lt.c1 < 100;
ERROR: subquery in FROM cannot refer to other relations of same query level
=# SELECT * FROM lt,
LATERAL (SELECT * FROM rt WHERE lt.c1 = rt.c1)s WHERE lt.c1 < 100;
c1 | c2 | c1 | c2
----+----+----+----
・・・・・
OK!
9.2まで
9.3から
55Copyright © 2013 NTT DATA Corporation
COPY TO STDOUT/FROM STDIN PROGRAM FILTER
 COPYコマンドの出力元/先にPROGRAMを指定できます!
通常、COPYコマンドはファイルからロード、ファイルへアンロード
今回は標準入出力前にプログラムを指定可能に!
ロードデータの圧縮/解凍やクレンジングに一役買います
COPY tbl TO PROGRAM ‘ gzip > /tmp/dump.gz’;
Tblgzipdump.gz
edit_tblmy_dump my_edit
COPY edit_tbl FROM PROGRAM ‘ my_edit /tmp/my_dump’;
処理前 処理後
圧縮前圧縮後
Copyright © 2013 NTT DATA Corporation 56
付録の付録
57Copyright © 2013 NTT DATA Corporation
JSON型がより使いやすく
JSON型用の演算子、関数が充実!
9.2まではJSONの複雑な関数や演算子がなかった
演算子を使用してデータを取得できるようになりました。
演算子 何ができる? 例
-> JSON型の配列に入っている値、オブ
ジェクトを返す。
SELECT '[1,2,3]'::json -> 0;
SELECT '{"a": 1, "b": 2, "c": 3}'::json -> 'b';
->> JSON型の配列に入っている値、オブ
ジェクトをTEXT型として返す。
SELECT ‘[1,2,3]'::json ->> 0;
SELECT '{"a": 1, "b": 2, "c": 3}'::json ->> 'b';
#> パスを使用してJSON型のオブジェクト
を返す。
SELECT '{"a": 1, "b": 2, "c": [1,2,3]}'::json #>
'{c, 0}';
#>> パスを使用してJSON型のオブジェクト
をTEXT型として返す。
SELECT '{"a": 1, "b": 2, "c": [1,2,3]}'::json #>
'{c, 0}';
58Copyright © 2013 NTT DATA Corporation
JSON型がより使いやすく
関数 何ができる?
to_json 引数の要素をJSON型として返す
json_array_length JSON配列のもっとも外側にある要素が何番目なのか返す
json_each JSON型のデータをkey(TEXT型)とvalue(JSON型)をペアとして返す
json_each_text JSON型のデータをkey(TEXT型)とvalue(TEXT型)をペアとして返す
json_extract_path pathで指定したJSONオブジェクト(keyとvalue)をJSON型として返す。
json_extract_path_text pathで指定したJSONオブジェクト(keyとvalue)をTEXT型として返す。
json_object_keys JSONオブジェクトのkeyを返す。
json_populate_record JSON型のvalueを任意のデータ型として返す。
json_populate_recordset 複数のJSON型のvalueを任意のデータ型として返す。
json_array_elements JSON配列をJSON型のセットとして返す。
JSON型用の演算子、関数が充実!
9.2まではJSONの複雑な関数や演算子がなかった
演算子を使用してデータを取得できるようになりました。
関数の数も2個(9.2)→12個(9.3)へ増加!
59Copyright © 2013 NTT DATA Corporation
PostgreSQLの歩み~8系から
2011
2012
2013
9.0
9.1
9.2
同期レプリケーション
UNLOGGED TABLE
SQL/MED
カスケードレプリケーション
IndexOnlyScan
スケーラビリティ向上
2010
非同期レプリケーション
ホットスタンバイ
SQL構文強化
8.0
Windows対応
PITR 機能
テーブルスペース
2005
9.3
Viewの改良
postgresql_fdw
Fast promote ..etc
開発中
PostgreSQL最新版は9.2.4(2013/4/4 リリース)
8.4
Window関数・再帰クエリ
VACUUM用メモリ自動管理
他DBMS互換性向上
8.3
HOT: 更新性能向上
VACUUM自動化
全文テキスト検索
2008
2009
8.2
pgcrypto
hstore
20078.1
2009
autovacuum
ロール

More Related Content

PDF
Postgre sql9.3新機能紹介
PDF
perfを使ったPostgreSQLの解析(後編)
PDF
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
PDF
PostgreSQL 9.5 新機能紹介
PDF
pg_bigmを用いた全文検索のしくみ(前編)
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
PostgreSQL V9 レプリケーション解説
Postgre sql9.3新機能紹介
perfを使ったPostgreSQLの解析(後編)
pg_bigm(ピージー・バイグラム)を用いた全文検索のしくみ(後編)
PostgreSQL 9.5 新機能紹介
pg_bigmを用いた全文検索のしくみ(前編)
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQL V9 レプリケーション解説

What's hot (20)

PDF
pg_dbms_statsの紹介
PDF
GresCubeで快適PostgreSQLライフ
ODP
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
Application of postgre sql to large social infrastructure jp
PDF
【Jpug勉強会】10大ニュースで振り返るpg con2013
PDF
PostgreSQL10徹底解説
PDF
PostgreSQLによるデータ分析ことはじめ
PDF
10大ニュースで振り返るPGCon2015
PDF
PostgreSQLレプリケーション徹底紹介
PDF
PostgreSQL 9.6 新機能紹介
PDF
PostgreSQLコミュニティに飛び込もう
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PDF
perfを使ったPostgreSQLの解析(前編)
PDF
PostgreSQLでスケールアウト
PDF
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
PDF
PostgreSQL監査
PDF
20130203 OSS-DB Exam Silver 技術解説無料セミナー
PDF
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
PDF
外部データラッパによる PostgreSQL の拡張
pg_dbms_statsの紹介
GresCubeで快適PostgreSQLライフ
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
Application of postgre sql to large social infrastructure jp
【Jpug勉強会】10大ニュースで振り返るpg con2013
PostgreSQL10徹底解説
PostgreSQLによるデータ分析ことはじめ
10大ニュースで振り返るPGCon2015
PostgreSQLレプリケーション徹底紹介
PostgreSQL 9.6 新機能紹介
PostgreSQLコミュニティに飛び込もう
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
perfを使ったPostgreSQLの解析(前編)
PostgreSQLでスケールアウト
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
PostgreSQL監査
20130203 OSS-DB Exam Silver 技術解説無料セミナー
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
外部データラッパによる PostgreSQL の拡張
Ad

Viewers also liked (17)

PDF
10大ニュースで振り返るpg con2013
PDF
pg_trgmと全文検索
PDF
使ってみませんか?pg_hint_plan
PDF
PostgreSQL replication
PDF
pg_bigmを用いた全文検索のしくみ(後編)
PDF
perfを使ったPostgreSQLの解析(前編)
PDF
PostgreSQL: XID周回問題に潜む別の問題
PDF
JSONBはPostgreSQL9.5でいかに改善されたのか
PDF
PostgreSQLレプリケーション徹底紹介
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PDF
Edb summit 2016_20160216.omo
PDF
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
PDF
Pgunconf 20121212-postgeres fdw
PDF
RHELのEOLがCentOSに及ぼす影響
PDF
MyNA JPUG study 20160220-postgresql-json-datatype
PDF
[D26] データハブとしてのPostgreSQL~9.3で進化した外部テーブル~ by Shigeru Hanada
10大ニュースで振り返るpg con2013
pg_trgmと全文検索
使ってみませんか?pg_hint_plan
PostgreSQL replication
pg_bigmを用いた全文検索のしくみ(後編)
perfを使ったPostgreSQLの解析(前編)
PostgreSQL: XID周回問題に潜む別の問題
JSONBはPostgreSQL9.5でいかに改善されたのか
PostgreSQLレプリケーション徹底紹介
NTT DATA と PostgreSQL が挑んだ総力戦
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
Edb summit 2016_20160216.omo
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Pgunconf 20121212-postgeres fdw
RHELのEOLがCentOSに及ぼす影響
MyNA JPUG study 20160220-postgresql-json-datatype
[D26] データハブとしてのPostgreSQL~9.3で進化した外部テーブル~ by Shigeru Hanada
Ad

Similar to PostgreSQL9.3新機能紹介 (20)

PDF
Hackers Champloo 2016 postgresql-9.6
PDF
Kof2016 postgresql-9.6
PDF
あなたの知らないPostgreSQL監視の世界
PDF
JTF2021w F3 postgresql frontline
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PDF
Chugoku db 17th-postgresql-9.6
PDF
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PDF
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
PDF
いまさら聞けないPostgreSQL運用管理
PDF
PostgreSQL 12の話
PDF
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
PDF
20171106 ntt-tx-postgre sql-10
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
Oss x user_meeting_6_postgres
PDF
Postgre sql update_20170310
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
20171028 osc-nagaoka-postgre sql-10
Hackers Champloo 2016 postgresql-9.6
Kof2016 postgresql-9.6
あなたの知らないPostgreSQL監視の世界
JTF2021w F3 postgresql frontline
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
Chugoku db 17th-postgresql-9.6
[B32] クイズと都市伝説から見る、ありのままのPostgreSQL by Shigeyuki Tokuhara
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
いまさら聞けないPostgreSQL運用管理
PostgreSQL 12の話
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
20171106 ntt-tx-postgre sql-10
アーキテクチャから理解するPostgreSQLのレプリケーション
Oss x user_meeting_6_postgres
Postgre sql update_20170310
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
20171028 osc-nagaoka-postgre sql-10

More from NTT DATA OSS Professional Services (20)

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

PostgreSQL9.3新機能紹介

  • 1. Copyright © 2013 NTT DATA Corporation 2013年7月6日 NTTデータ 藤井雅雄 PostgreSQL9.3新機能紹介 オープンソースカンファレンス 2013 Okinawa
  • 2. 2Copyright © 2013 NTT DATA Corporation 今日お話ししたいこと  PostgreSQLのこれまでと現在の話  PostgreSQLのこれから … 9.3の話 開発に役立つ新機能 運用に役立つ新機能 ちょっぴり注意!非互換性について  まとめ
  • 3. Copyright © 2013 NTT DATA Corporation 3 PostgreSQLのこれまでと現在の話
  • 4. 4Copyright © 2013 NTT DATA Corporation PostgreSQLの歩み PostgreSQL最新版は9.2.4(2013/4/4 リリース) 2005-2009 2010- 8系 9系 VACUUMとの戦い 運用性・性能アップ レプリケーションの導入 更なる拡張 基礎固め 7系 2000-2005 9.3 開発中
  • 5. 5Copyright © 2013 NTT DATA Corporation PostgreSQLの歩み~9系を振り返る 2011 2012 2013 9.0 9.1 9.2 同期レプリケーション UNLOGGED TABLE SQL/MED スケーラビリティ向上 カスケードレプリケーション インデックスオンリースキャン 2010 非同期レプリケーション ホットスタンバイ SQL構文強化 8系 -2009 9.3 開発中 PostgreSQL最新版は9.2.4(2013/4/4 リリース)
  • 6. 6Copyright © 2013 NTT DATA Corporation CPUスケーラビリティの向上 参照時の軽量ロックが改良され、参照処理性能が大幅にアップ! メニーコアの環境で更なるパフォーマンスの発揮が期待されます 論理コア64以上では、 9.1の実に3倍以上の スループットを実現! どんとこい! メニーコア PgCon 2012 Robert Haas 発表資料 (2012/5/18) より
  • 7. 7Copyright © 2013 NTT DATA Corporation カスケードレプリケーション シングルマスタ マルチスタンバイ マルチスタンバイ 複製 複製 更新SQL 参照SQL 参照SQL 参照SQL シングルマスタ-マルチスタンバイのレプリケーション 同期/非同期やカスケードレプリケーションなどが利用可能 スタンバイで参照SQLを実行して負荷分散 スタンバイからのバックアップを取得可能! バック アップ 低負荷なスタンバイ から取得!
  • 8. Copyright © 2013 NTT DATA Corporation 8 PostgreSQLのこれから…9.3の話
  • 9. 9Copyright © 2013 NTT DATA Corporation PostgreSQL9.3のFAQ Q1. 特徴は? A1. “Ease of Use” by Robert Treat 開発者・運用者向けの新機能が充実! Q2. いつ出るの? A2. 9月ごろのリリースが予想されています! 7/6現在β2がリリース中
  • 10. Copyright © 2013 NTT DATA Corporation 10 開発に役立つ新機能!
  • 11. 11Copyright © 2013 NTT DATA Corporation マテリアライズドビュー(マテビュー) ID NAME 1 沖縄 2 新潟 … ID NAME 1 沖縄 2 新潟 … ID NAME マテビュー (普通の)ビュー テーブル SELECT * FROM ビュー SELECT * FROM マテビュー SELECT * FROM テーブル クエリの結果をビューにキャッシュできる!  複雑で時間のかかるクエリのビューに対するアクセスが高速に  頻発するビューへのアクセスに効果 マテビュー作成時 にキャッシュ!
  • 12. 12Copyright © 2013 NTT DATA Corporation マテリアライズドビュー(マテビュー) ID NAME 1 沖縄 2 新潟 3 岐阜 … ID NAME マテビュー (普通の)ビュー SELECT * FROM ビュー SELECT * FROM マテビュー SELECT * FROM テーブル クエリの結果をビューにキャッシュできる!  複雑で時間のかかるクエリのビューに対するアクセスが高速に  頻発するビューへのアクセスに効果 ID NAME 1 沖縄 2 新潟 3 岐阜 … テーブル REFRESH 元テーブルの更新は REFRESHコマンドで マテビューに反映
  • 13. 13Copyright © 2013 NTT DATA Corporation マテリアライズドビュー(マテビュー) 高度な機能はまだ9.3では利用できないことに注意 自動・定期リフレッシュ機能がない  元テーブルの更新ごとに自動的にリフレッシュ、定期的にリフレッシュ する機能がない  トリガやcronで代替 高速リフレッシュ機能がない  元テーブルの更新差分だけをリフレッシュできない  リフレッシュ時に、マテビューに排他ロックが必要 元テーブルが頻繁に更新される場合や最新の結果が必要な 場合は、マテビューの利用を慎重に要検討
  • 14. 14Copyright © 2013 NTT DATA Corporation 更新可能ビュー ID NAME 1 沖縄 2 新潟 … ID NAME 1 沖縄 2 新潟 … ID NAME マテビュー (普通の)ビュー テーブル INSERT UPDATE DELETE ビューを更新できる!更新は自動的に元テーブルに反映  商用DBのシノニムの代替に  単純でないクエリのビューは更新できないことに注意 INSERT UPDATE DELETE INSERT UPDATE DELETE
  • 15. 15Copyright © 2013 NTT DATA Corporation JSON型の進化 JSONファイル { "id":1, "name":"鈴木", "address":"東京", "birth_day":"1970-01-01“ } CREATE TABLE tbl ( data json); key value JSON形式のデータを格納するデータ型  バージョン9.2から利用可能  バージョン9.2では、行や配列をJSON形式に変換する関数だけサポート
  • 16. 16Copyright © 2013 NTT DATA Corporation JSON型の進化 JSON型の演算子や関数が充実!  利用可能な演算子の数が 0個(9.2) → 4個(9.3) に増加 JSON形式のデータ内から一部を取得するのが楽に!  利用可能な関数の数が 2個(9.2) → 12個(9.3) に増加 JSON形式のデータをKEYとVALUEの行形式に変換! JSON形式のデータからKEYだけを取得!
  • 17. 17Copyright © 2013 NTT DATA Corporation FDW(Foreign Data Wrapper) ID NAME 1 沖縄 2 新潟 … ID NAME 1 沖縄 2 新潟 …外部テーブル テーブル 外部のデータをPostgreSQLのテーブルとして扱う機能 1,沖縄 2,新潟 … CSVファイル PostgreSQL MySQL read() SELECT SELECT mysql_fdw file_fdw
  • 18. 18Copyright © 2013 NTT DATA Corporation FDW(Foreign Data Wrapper) データベース ファイル mysql_fdw file_fdw (contrib) oracle_fdw json_fdw NoSQL その他 mongo_fdw twitter_fdw redis_fdw s3_fdw ~9.2
  • 19. 19Copyright © 2013 NTT DATA Corporation FDW(Foreign Data Wrapper) データベース ファイル mysql_fdw file_fdw (contrib) oracle_fdw json_fdw postgres_fdw (contrib) NoSQL その他 mongo_fdw twitter_fdw redis_fdw s3_fdw 9.3
  • 20. 20Copyright © 2013 NTT DATA Corporation postgres_fdw ID NAME 1 沖縄 2 新潟 … ID NAME 1 沖縄 2 新潟 …外部テーブル テーブル リモートのPostgreSQLのテーブルを、ローカルのPostgreSQLの テーブルとして扱える! 1,沖縄 2,新潟 … CSVファイル PostgreSQL PostgreSQL read() SELECT SELECT postgres_fdw file_fdw
  • 21. 21Copyright © 2013 NTT DATA Corporation 書込可能FDW ID NAME 1 沖縄 2 新潟 … ID NAME 1 沖縄 2 新潟 …外部テーブル テーブル 外部テーブルを更新できる!更新は自動的に外部のデータに 反映 1,沖縄 2,新潟 … CSVファイル PostgreSQL PostgreSQL read() write() SELECT INSERT UPDATE DELETE SELECT INSERT UPDATE DELETE postgres_fdw file_fdw
  • 22. Copyright © 2013 NTT DATA Corporation 22 運用に役立つ新機能!
  • 23. 23Copyright © 2013 NTT DATA Corporation 高速フェイルオーバ 故障 検知 共有ディスク 切替 リカバリ チェック ポイント 共有ディスク 故障 検知 リカ バリ チェック ポイント 故障 検知 リカ バリ 9.3 ~9.2 フェイルオーバ時間を大幅に短縮!  実行に長時間かかるチェックポイントをスキップ
  • 24. 24Copyright © 2013 NTT DATA Corporation 故障検知をすぐに 新しいタイムアウトパラメータ wal_receiver_timeout で スタンバイはすぐにマスタ故障を検知! (*) replication_timeout は wal_sender_timeout に改名 スタンバイ故障の検知 • tcp_keepalives_idle • tcp_keepalives_interval • tcp_keepalives_count • replication_timeout マスタ故障の検知 • keepalives_idle • keepalives_interval • keepalives_count マスタ 故障 故障 スタン バイ 9.2
  • 25. 25Copyright © 2013 NTT DATA Corporation 故障検知をすぐに 新しいタイムアウトパラメータ wal_receiver_timeout で スタンバイはすぐにマスタ故障を検知! (*) replication_timeout は wal_sender_timeout に改名 スタンバイ故障の検知 • tcp_keepalives_idle • tcp_keepalives_interval • tcp_keepalives_count • replication_timeout • wal_sender_timeout マスタ故障の検知 • keepalives_idle • keepalives_interval • keepalives_count • wal_receiver_timeout マスタ 故障 故障 スタン バイ 9.3
  • 26. 26Copyright © 2013 NTT DATA Corporation カスケードレプリケーションの運用性向上 マスタ スタン バイ スタン バイ バック アップ アーカ イブ カスケードレプリケーションのフェイルオーバ時にバックアップや共 有アーカイブが不要に! 停止 マスタ スタン バイ 停止 マスタ スタン バイ 停止 マスタ スタン バイ 通常時 マスタ昇格直後 フェイルオーバ後 再開準備中 マスタ故障により スタンバイがマスタに昇格 レプリケーション再開9.2 面倒!大変!イケテナイ!
  • 27. 27Copyright © 2013 NTT DATA Corporation カスケードレプリケーションの運用性向上 マスタ スタン バイ スタン バイ カスケードレプリケーションのフェイルオーバ時にバックアップや共 有アーカイブが不要に! 停止 マスタ スタン バイ 停止 マスタ スタン バイ 通常時 マスタ昇格直後 フェイルオーバ後 マスタ故障により スタンバイがマスタに昇格 楽チン!時間もかからない! レプリケーション再開 9.3
  • 28. 28Copyright © 2013 NTT DATA Corporation ファイルシステム DB CLOG WAL ストレージやファイル システムで破損検知 レイアウトが壊れて いないかで破損検知 CRC 特別な機構で破損検知 DB 共有バッファ ~9.2 データページチェックサム データページにチェックサムを付けて、ページの破損をすぐに検知!  早急な破損検知が非常に重要 破損がクエリ結果の誤りやクラッシュを招く 破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も  initdb -k (or --data-checksums)  性能への影響が大きいことに注意
  • 29. 29Copyright © 2013 NTT DATA Corporation ファイルシステム DB CLOG WAL CRC DB 共有バッファ チェック サム チェック サム チェックサムの 付与・更新 ストレージやファイル システムで破損検知 レイアウトが壊れて いないかで破損検知 特別な機構で破損検知 9.3 チェックサムの 妥当性確認 データページチェックサム データページにチェックサムを付けて、ページの破損をすぐに検知!  早急な破損検知が非常に重要 破損がクエリ結果の誤りやクラッシュを招く 破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も  initdb -k (or --data-checksums)  性能への影響が大きいことに注意
  • 30. 30Copyright © 2013 NTT DATA Corporation イベントトリガ DDLにトリガを仕掛けられる!  9.2以前では、トリガを仕掛けられるのはINSERT/UPDATE/DELETE/TRUNCATEのみ  9.3以降では、CREATE/ALTER/DROPのDDLにトリガを定義可能。トリガ発動条件は、 ddl_command_start: DDL開始時 ddl_command_end : DDL終了時 sql_drop : DROPやALTER TABLE実行時。対象オブジェクトを指定可能 クレバーなDBA 空き領域 (小) DDL開始時に 空き領域を確認する イベントトリガ 十分な空き領域がないのにDDLを実行して、 ディスクフルになるのは勘弁してほしい・・・ そうだ!! DDL開始時にイベントトリガを仕掛けよう!オペレータ ALTER TABLEしよう♪
  • 31. 31Copyright © 2013 NTT DATA Corporation パラレルpg_dump テーブル1 テーブル2 テーブル3 ワーカー バック アップ ワーカー1 ワーカー2 テーブル1 テーブル2 テーブル3 pg_dump pg_restore –j 2 ~9.2 pg_dumpのパラレル実行で、バックアップ時間を大幅に短縮!  メニーコアでテーブル数が多いときに力を発揮  トランザクション的に整合性のあるバックアップを取得できる  スタンバイでは実行できない  パラレル数+1の接続を使うことに注意
  • 32. 32Copyright © 2013 NTT DATA Corporation パラレルpg_dump テーブル1 テーブル2 テーブル3 ワーカー1 ワーカー2 ワーカー3 マネージャ バック アップ ワーカー1 ワーカー2 テーブル1 テーブル2 テーブル3 pg_dump –j 3 pg_restore –j 2 9.3 pg_dumpのパラレル実行で、バックアップ時間を大幅に短縮!  メニーコアでテーブル数が多いときに力を発揮  トランザクション的に整合性のあるバックアップを取得できる  スタンバイでは実行できない  パラレル数+1の接続を使うことに注意
  • 33. 33Copyright © 2013 NTT DATA Corporation pg_isready DBサーバ postmasterプロセス が存在するか? pg_ctl status リモート SQLの実行が 成功するか? "SELECT 1" PostgreSQLの稼働状況をお手軽に確認できるクライアントツール $ pg_isready -h <ホスト名> -p <ポート番号> $ echo $? 0 : 正常応答 2 : 応答なし 1 : 接続拒否 3 : パラメータ不正 ~9.2
  • 34. 34Copyright © 2013 NTT DATA Corporation pg_isready DBサーバ postmasterプロセス が存在するか? pg_ctl status リモート SQLの実行が 成功するか? "SELECT 1" pg_isready PostgreSQLの稼働状況をお手軽に確認できるクライアントツール $ pg_isready -h <ホスト名> -p <ポート番号> $ echo $? PostgreSQLに 接続できるか? 9.3 0 : 正常応答 2 : 応答なし 1 : 接続拒否 3 : パラメータ不正
  • 35. 35Copyright © 2013 NTT DATA Corporation pg_isready  確認方法により、稼働状況の見え方が異なるため注意 pg_ctl status SQL実行 pg_isready 稼働状況の確認方 法 postmasterプロセス が存在するか? SQLの実行が成功す るか? PostgreSQLに接続 できるか? 正常稼働中 稼働 稼働 稼働 停止後 停止 停止 停止 起動中(リカバリ中) 稼働 停止 停止(拒否) 停止中 稼働 停止 停止(拒否) 接続権限なし(*1) 稼働 停止 稼働 同時接続数フル 稼働 停止 稼働 (*1) pg_hba.confで接続が許可されていない場合など
  • 36. 36Copyright © 2013 NTT DATA Corporation psql ¥watch psqlでSQLの繰り返し実行が可能に! $ watch -n 5 'psql -c "SELECT count(*) FROM pg_stat_activity"' $ while true; do psql -c "SELECT count(*) FROM pg_stat_activity" sleep 5 done PostgreSQLへの接続数を5秒間隔で確認したい! ~9.2
  • 37. 37Copyright © 2013 NTT DATA Corporation psql ¥watch psqlでSQLの繰り返し実行が可能に! $ watch -n 5 'psql -c "SELECT count(*) FROM pg_stat_activity"' $ while true; do psql -c "SELECT count(*) FROM pg_stat_activity" sleep 5 done $ psql =# SELECT count(*) FROM pg_stat_activity; =# ¥watch 5 PostgreSQLへの接続数を5秒間隔で確認したい! 直前に実行したSQLを繰り返し実行 9.3
  • 38. 38Copyright © 2013 NTT DATA Corporation ちょっぴり注意!非互換について ………… 0000000100000000000000FD 0000000100000000000000FE 000000010000000100000000 000000010000000100000001 ………… ………… 0000000100000000000000FD 0000000100000000000000FE 0000000100000000000000FF 000000010000000100000000 000000010000000100000001 ………… WALファイル名/アーカイブファイル名の末尾に注意  運用スクリプトなどで、WALファイル名やアーカイブファイル名をもとにファイ ル取得や削除を制御している場合は、影響がないか確認しましょう! ~9.2 9.3
  • 39. 39Copyright © 2013 NTT DATA Corporation まとめ Q1. PostgreSQL9.3の特徴は? A1. “Ease of Use” by Robert Treat 開発者・運用者向けの新機能が充実! Q2. PostgreSQL9.3はいつ出るの? A2. 9月ごろのリリースが予想されています!
  • 40. Copyright © 2011 NTT DATA Corporation Copyright © 2013 NTT DATA Corporation Copyright © 2011 NTT DATA Corporation Copyright © 2013 NTT DATA Corporation ご清聴ありがとうございました!!
  • 41. Copyright © 2013 NTT DATA Corporation 4Copyright © 2013 NTT DATA Corporation 4 付録
  • 42. 42Copyright © 2013 NTT DATA Corporation ちょっぴり注意!非互換について 被参照 ID NAME 1 東京 2 大阪 3 沖縄 参照 ID NAME 1 東京 2 大阪 被参照 ID NAME 1 東京 2 京都 3 沖縄 参照 ID NAME 1 東京 2 (NULL) ~9.2 UPDATE 被参照 SET NAME=‘京都’ WHERE ID=2 被参照で更新した列のみが SET NULL/DEFAULTの対象 IDとNAME列で 外部キー制約 外部キーのON UPDATE SET NULL/DEFAULTの挙動が変化  9.2以前では、更新列のみがSET NULL/DEFAULTの対象  9.3以降では、外部参照している列全体がSET NULL/DEFAULTの対象
  • 43. 43Copyright © 2013 NTT DATA Corporation ちょっぴり注意!非互換について 外部キーのON UPDATE SET NULL/DEFAULTの挙動が変化  9.2以前では、更新列のみがSET NULL/DEFAULTの対象  9.3以降では、外部参照している列全体がSET NULL/DEFAULTの対象 被参照 ID NAME 1 東京 2 大阪 3 沖縄 参照 ID NAME 1 東京 2 大阪 被参照 ID NAME 1 東京 2 京都 3 沖縄 参照 ID NAME 1 東京 (NULL) (NULL) UPDATE 被参照 SET NAME=‘京都’ WHERE ID=2 IDとNAME列で 外部キー制約 外部参照している列全体が SET NULL/DEFAULTの対象 9.3
  • 44. 44Copyright © 2013 NTT DATA Corporation カスケードレプリケーションの運用性向上 マスタ スタン バイ スタン バイ バック アップ アーカ イブ カスケードレプリケーションのフェイルオーバ時にバックアップや共 有アーカイブが不要に! 停止 マスタ スタン バイ 停止 マスタ スタン バイ 停止 マスタ スタン バイ 通常時 マスタ昇格直後 フェイルオーバ後 再開準備中 マスタ故障により スタンバイがマスタに昇格 レプリケーション再開9.2 面倒!大変!イケテナイ! TLI=1 TLI=1 TLI=1 TLI=2 TLI=1 TLI=2 TLI=2
  • 45. Copyright © 2013 NTT DATA Corporation 45 9.4でもアツい機能がゾクゾクと!
  • 46. 4Copyright © 2013 NTT DATA Corporation パラレルクエリ  パラレルpg_dumpなど、今パラレル化がアツい!  現状 1クエリは1プロセス(1コア)でしか処理できないため、CPU数を増やしても 1クエリの性能は上がらない  目標 パラレルクエリ(1クエリを複数プロセスでパラレルに処理して、性能向上さ せる機能)のサポート  開発の方向性 パラレルクエリを実装するのは非常に難しいため、まずはパラレルソートや インデックス作成のパラレル化から徐々に取り組む
  • 47. 47Copyright © 2013 NTT DATA Corporation 8 16 32 64 スループット PostgreSQL9.2 PostgreSQL9.1 CPUコア数(論理) 更新性能のスケールアップ 更新時のトランザクションログ生成時のロックが改良され、更新処理 性能が大幅にアップ! 9.3の実に3倍以上 のスループットを実 現! メニーコア 高速ディスク 任せろ! 6432168 v9.4 v9.3 ※イメージ図
  • 48. 48Copyright © 2013 NTT DATA Corporation レプリケー ション レプリケーションの運用性向上 マスタ スタン バイ 停止 マスタ マスタスタン バイ レプリケー ション 停止 マスタ バック アップ 両系稼働 マスタ単独稼働 両系稼働 バックアップ転送 フェイルバック時にバックアップが不要に! マスタ故障により フェイルオーバ 旧マスタの再組込み (フェイルバック)9.3 面倒!大変!時間かかりすぎ!
  • 49. 49Copyright © 2013 NTT DATA Corporation レプリケー ション レプリケーションの運用性向上 マスタ スタン バイ マスタスタン バイ レプリケー ション 両系稼働 両系稼働 フェイルバック時にバックアップが不要に! マスタ故障により フェイルオーバ 旧マスタの再組込み (フェイルバック) 停止 マスタ マスタ単独稼働 9.4 楽チン!時間もかからない!
  • 50. Copyright © 2013 NTT DATA Corporation 50 紹介しきれなかった9.3新機能
  • 51. 51Copyright © 2013 NTT DATA Corporation 64bit API Large-Object ラージオブジェクトの最大サイズが 2GB -> 4TBへ! 商用DBMSからの移行障壁が少しは下がる・・? 9.3 ! ラージオブジェクト ~ 4TB 9.2 .. 余裕!つらい!
  • 52. 52Copyright © 2013 NTT DATA Corporation lock_timeout  ロック待機時間に応じてクエリをキャンセルできるようにな りました。 従来はstatement_timeoutでカバーしていました • この方法では、ロック待機時間 + 実際の処理時間 を考慮するため、厳 密にはロック待機時間のキャンセルではありませんでした。 指定方法はパラメータ値の設定 SQL個別の指定時は、直前にSET文を指定すること! SELECT * FROM tbl WHERE c1=xxx FOR UPDATE WAIT 10; -- Previously “SET statement_timeout = 10000;” SET lock_timeout = 10000; SELECT * FROM tbl WHERE c1=xxx FOR UPDATE ; Oracle PostgreSQL
  • 53. 53Copyright © 2013 NTT DATA Corporation lock_timeout こぼれ話  実は、PostgreSQLの内部的なtimeout frameworkが大きく改善されており、 ユーザ定義のTimeout処理を設けやすくなっています。コア開発時には要チェッ クです!  http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=f34c68f0 9671c4566854c7e20e9253d4f335c0b0  src/include/utils/timeout.h をよく見ておきましょう!  イベント(DEADLOCK_TIMEOUT、 STANDBY_TIMEOUTなど)ごとにTimeoutIDが定め られました。  ユーザ独自定義用に使えるIDもあります。(USER_TIMEOUT)  RegisterTimeout(TimeoutId id, timeout_handler handler)で登録  後は用意されたAPIとアクセサを使って制御します
  • 54. 54Copyright © 2013 NTT DATA Corporation LATERAL サポート  副問い合わせやFROM句での関数利用が捗ります  副問い合わせなどでは、副問い合わせ外の条件やテーブルなどは見 えません  LATERALにより、そのスコープを外に広げることができます。 =# SELECT * FROM lt, (SELECT * FROM rt WHERE lt.c1 = rt.c1)s WHERE lt.c1 < 100; ERROR: subquery in FROM cannot refer to other relations of same query level =# SELECT * FROM lt, LATERAL (SELECT * FROM rt WHERE lt.c1 = rt.c1)s WHERE lt.c1 < 100; c1 | c2 | c1 | c2 ----+----+----+---- ・・・・・ OK! 9.2まで 9.3から
  • 55. 55Copyright © 2013 NTT DATA Corporation COPY TO STDOUT/FROM STDIN PROGRAM FILTER  COPYコマンドの出力元/先にPROGRAMを指定できます! 通常、COPYコマンドはファイルからロード、ファイルへアンロード 今回は標準入出力前にプログラムを指定可能に! ロードデータの圧縮/解凍やクレンジングに一役買います COPY tbl TO PROGRAM ‘ gzip > /tmp/dump.gz’; Tblgzipdump.gz edit_tblmy_dump my_edit COPY edit_tbl FROM PROGRAM ‘ my_edit /tmp/my_dump’; 処理前 処理後 圧縮前圧縮後
  • 56. Copyright © 2013 NTT DATA Corporation 56 付録の付録
  • 57. 57Copyright © 2013 NTT DATA Corporation JSON型がより使いやすく JSON型用の演算子、関数が充実! 9.2まではJSONの複雑な関数や演算子がなかった 演算子を使用してデータを取得できるようになりました。 演算子 何ができる? 例 -> JSON型の配列に入っている値、オブ ジェクトを返す。 SELECT '[1,2,3]'::json -> 0; SELECT '{"a": 1, "b": 2, "c": 3}'::json -> 'b'; ->> JSON型の配列に入っている値、オブ ジェクトをTEXT型として返す。 SELECT ‘[1,2,3]'::json ->> 0; SELECT '{"a": 1, "b": 2, "c": 3}'::json ->> 'b'; #> パスを使用してJSON型のオブジェクト を返す。 SELECT '{"a": 1, "b": 2, "c": [1,2,3]}'::json #> '{c, 0}'; #>> パスを使用してJSON型のオブジェクト をTEXT型として返す。 SELECT '{"a": 1, "b": 2, "c": [1,2,3]}'::json #> '{c, 0}';
  • 58. 58Copyright © 2013 NTT DATA Corporation JSON型がより使いやすく 関数 何ができる? to_json 引数の要素をJSON型として返す json_array_length JSON配列のもっとも外側にある要素が何番目なのか返す json_each JSON型のデータをkey(TEXT型)とvalue(JSON型)をペアとして返す json_each_text JSON型のデータをkey(TEXT型)とvalue(TEXT型)をペアとして返す json_extract_path pathで指定したJSONオブジェクト(keyとvalue)をJSON型として返す。 json_extract_path_text pathで指定したJSONオブジェクト(keyとvalue)をTEXT型として返す。 json_object_keys JSONオブジェクトのkeyを返す。 json_populate_record JSON型のvalueを任意のデータ型として返す。 json_populate_recordset 複数のJSON型のvalueを任意のデータ型として返す。 json_array_elements JSON配列をJSON型のセットとして返す。 JSON型用の演算子、関数が充実! 9.2まではJSONの複雑な関数や演算子がなかった 演算子を使用してデータを取得できるようになりました。 関数の数も2個(9.2)→12個(9.3)へ増加!
  • 59. 59Copyright © 2013 NTT DATA Corporation PostgreSQLの歩み~8系から 2011 2012 2013 9.0 9.1 9.2 同期レプリケーション UNLOGGED TABLE SQL/MED カスケードレプリケーション IndexOnlyScan スケーラビリティ向上 2010 非同期レプリケーション ホットスタンバイ SQL構文強化 8.0 Windows対応 PITR 機能 テーブルスペース 2005 9.3 Viewの改良 postgresql_fdw Fast promote ..etc 開発中 PostgreSQL最新版は9.2.4(2013/4/4 リリース) 8.4 Window関数・再帰クエリ VACUUM用メモリ自動管理 他DBMS互換性向上 8.3 HOT: 更新性能向上 VACUUM自動化 全文テキスト検索 2008 2009 8.2 pgcrypto hstore 20078.1 2009 autovacuum ロール