postgre sql9.3新機能紹介

64
Copyright © 2013 NTT DATA Corporation 2013年6月22日 NTTデータ 藤井雅雄、江川大地 PostgreSQL9.3新機能紹介

Upload: daichi-egawa

Post on 28-May-2015

6.742 views

Category:

Technology


5 download

DESCRIPTION

日本PostgreSQLユーザ会(JPUG)主催の夏セミナーで行った『PostgreSQL9.3新機能紹介』の講演資料です。

TRANSCRIPT

Page 1: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation

2013年6月22日 NTTデータ 藤井雅雄、江川大地

PostgreSQL9.3新機能紹介

Page 2: Postgre sql9.3新機能紹介

2 Copyright © 2013 NTT DATA Corporation

Who are you?

藤井雅雄(@fujii_masao) 所属:株式会社NTTデータ PostgreSQLは2008年からやってます。ここ最近は、PostgreSQL関係のR&D、GresCube開発に関わっています。 最近、コミッターになりました。6/10にFirst Commit !!

江川大地(@daiti0804)です。 所属:株式会社NTTデータ PostgreSQLは2011年からやってます。ここ最近はもっぱらマイグレーションに従事。 最近、職場にインド人がやってきました。ベジタリアン向けのレストランがありましたら教えてください。

Page 3: Postgre sql9.3新機能紹介

3 Copyright © 2013 NTT DATA Corporation

INDEX

PostgreSQLのこれまでと現在 PostgreSQLのこれまでの進化

PostgreSQL9.2の振り返り

PostgreSQL のこれから…9.3のお話 開発に役立つ新機能

運用に役立つ新機能

ちょっぴり注意! 非互換について

付録(時間があったら…) 続・ちょっぴり注意! 非互換について

9.4でもアツい機能がゾクゾクと!

紹介しきれなかった9.3新機能

Page 4: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 4

PostgreSQLのこれまでと現在

Page 5: Postgre sql9.3新機能紹介

5 Copyright © 2013 NTT DATA Corporation

PostgreSQLの歩み

PostgreSQL最新版は9.2.4(2013/4/4 リリース)

2005-2009

2010- 8系

9系

Functionality and Performance …運用性の向上とSQLの進化による性能向上

replication and extensibility …レプリケーションの導入と更なる拡張

Foundations and Durability …PostgreSQLの基礎が完成

7系 2000-2005

9.3

開発中

Page 6: Postgre sql9.3新機能紹介

6 Copyright © 2013 NTT DATA Corporation

PostgreSQLの歩み~9系を振り返る

2011

2012

2013

9.0 9.1

9.2

同期レプリケーション UNLOGGED TABLE SQL/MED

カスケードレプリケーション IndexOnlyScan スケーラビリティ向上

2010

非同期レプリケーション ホットスタンバイ SQL構文強化

8系 -2009

9.3

Viewの改良 postgresql_fdw Fast promote ..etc

開発中

PostgreSQL最新版は9.2.4(2013/4/4 リリース)

Page 7: Postgre sql9.3新機能紹介

7 Copyright © 2013 NTT DATA Corporation

PostgreSQL9.2の振り返り

性能向上

CPUスケーラビリティの向上

その他の新機能

インデックスオンリースキャン

カスケードレプリケーション

JSON型

レンジ型

などなど…

PostgreSQL9.2の最大の特徴は、性能向上でした。

Page 8: Postgre sql9.3新機能紹介

8 Copyright © 2013 NTT DATA Corporation

CPUスケーラビリティの向上

参照時の軽量ロックが改良され、参照処理性能が大幅にアップ!

メニーコアの環境で更なるパフォーマンスの発揮が期待されます

論理コア64以上では、9.1の実に3倍以上のスループットを実現!

どんとこい!

メニーコア

PgCon 2012 Robert Haas 発表資料 (2012/5/18) より

Page 9: Postgre sql9.3新機能紹介

9 Copyright © 2013 NTT DATA Corporation

カスケードレプリケーション

シングルマスタ

マルチスタンバイ マルチスタンバイ

複製 複製

更新SQL参照SQL

参照SQL

参照SQL

シングルマスタ-マルチスタンバイのレプリケーション 同期/非同期やカスケードレプリケーションなどが利用可能

スタンバイで参照SQLを実行して負荷分散

スタンバイからのバックアップを取得可能!

バックアップ

低負荷なスタンバイ から取得!

Page 10: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 10

PostgreSQL のこれから…9.3のお話

Page 11: Postgre sql9.3新機能紹介

11 Copyright © 2013 NTT DATA Corporation

PostgreSQL9.3のFAQ

Q1. PostgreSQL9.3の特徴を一言でいうと?

A1. “Ease of Use” by Robert Treat

開発者向けの新機能が充実し、よりPostgreSQLを使いやすく

なりました!

Q2. PostgreSQL9.3はいつ出るの?

A2. 9月ごろのリリースが予想されています!

Q3.PostgreSQL9.3の目玉機能は?

A3. Materialized Views, Updatable Views, FDWなどなど

Q4. 他にはどんな機能があるの?

A4. それは次のページから…

Page 12: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 12

開発に役立つ新機能!

Page 13: Postgre sql9.3新機能紹介

13 Copyright © 2013 NTT DATA Corporation

VIEWの進化

PostgreSQL9.3ではViewがパワーアップ!!

Updatable Viewsで、Viewの更新が可能に!

Materialized Viewsで、よく使う結果を高速に返却!

Page 14: Postgre sql9.3新機能紹介

14 Copyright © 2013 NTT DATA Corporation

VIEWの進化

PostgreSQL9.3ではViewがパワーアップ!!

Updatable Viewsで、Viewの更新が可能に!

Materialized Viewsで、よく使う結果を高速に返却!

Page 15: Postgre sql9.3新機能紹介

15 Copyright © 2013 NTT DATA Corporation

Updatable Views(更新可能ビュー)

9.2までのViewは参照専用 SELECTのみ受付、更新系のDMLはエラーとなる。 更新系の処理を行うにはトリガやルールを作る必要があり。

Col1 Col2 COl3

1 AA 100

2 BB 200

元テーブル

9.2まで

Col1 Col2

1 AA

2 BB

更新可能ビュー

View作成 + 複雑なトリガ (or 複雑なルール)

面倒 ! 大変 !

Page 16: Postgre sql9.3新機能紹介

16 Copyright © 2013 NTT DATA Corporation

Updatable Views(更新可能ビュー)

9.3では通常のView定義だけで、更新可能ビューに! Viewへの更新系DMLが実行できる! 更新系DMLによって、元テーブルへの更新が行われる!

9.3 !

Col1 Col2 COl3

1 AA 100

2 BB 200

元テーブル

9.2まで

9.3から

Col1 Col2

1 AA

2 BB

更新可能ビュー

Col1 Col2 COl3

1 AA 100

2 BB 200

元テーブル

Col1 Col2

1 AA

2 BB

更新可能ビュー

View作成 + 複雑なトリガ (or 複雑なルール)

View作成だけ!

面倒 ! 大変 !

楽チン !

Page 17: Postgre sql9.3新機能紹介

17 Copyright © 2013 NTT DATA Corporation

Updatable Views(更新可能ビュー)

Updatable Viewsの使い道 商用DBMSからのマイグレーションでシノニムの代替に。

複雑な更新は…??

Updatable Viewsの注意点 複雑なView定義では更新できません

FROM句には、1つのテーブル or 更新可能ビューが記述されていること。

Viewの定義の最上位レベルにWITH, DISTINCT, GROUP BY, HAVING, LIMIT, OFFSET句が使われていないこと。

Viewの定義の最上位レベルにUNION, INTERSECT, EXCEPT句が使われていないこと。

View作成時のSELECT文で、式、リテラル、関数を使用していないこと。

View作成時のSELECT文に同じカラムが二度登場しないこと。

ViewがSECURITY_BARRIER 属性を持っていないこと。

(PostgreSQL9.3 beta1マニュアルより勝手に翻訳)

→単純な1テーブルについてのViewとして使用可能

Page 18: Postgre sql9.3新機能紹介

18 Copyright © 2013 NTT DATA Corporation

Updatable Views(更新可能ビュー)

Updatable Viewsの使い道 商用DBMSからのマイグレーションでシノニムの代替に。

複雑な更新は…??

Updatable Viewsの注意点 複雑なView定義では更新できません

FROM句には、1つのテーブル or 更新可能ビューが記述されていること。

Viewの定義の最上位レベルにWITH, DISTINCT, GROUP BY, HAVING, LIMIT, OFFSET句が使われていないこと。

Viewの定義の最上位レベルにUNION, INTERSECT, EXCEPT句が使われていないこと。

View作成時のSELECT文で、式、リテラル、関数を使用していないこと。

View作成時のSELECT文に同じカラムが二度登場しないこと。

ViewがSECURITY_BARRIER 属性を持っていないこと。

(PostgreSQL9.3 beta1マニュアルより勝手に翻訳)

→単純な1テーブルについてのViewとして使用可能

Page 19: Postgre sql9.3新機能紹介

19 Copyright © 2013 NTT DATA Corporation

Viewの進化

PostgreSQL9.3ではViewがパワーアップ!!

Updatable Viewsで、Viewの更新が可能に!

Materialized Viewsで、よく使う結果を高速に返却!

Page 20: Postgre sql9.3新機能紹介

20 Copyright © 2013 NTT DATA Corporation

Materialized Views

Materialized Viewsって?(通常のViewとの違い)

クエリの結果がキャッシュされた実体のあるView 通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時

に逐次、元テーブルへアクセスが必要。

Col1 Col2

1 AA

2 BB

Col1 Col2

12 AA

33 BB

Col1 Col2

View sum_tbl

通常のViewの場合

CREATE VIEW sum_tbl AS

SELECT Col1, Col2…;

Page 21: Postgre sql9.3新機能紹介

21 Copyright © 2013 NTT DATA Corporation

Materialized Views

Materialized Viewsって?(通常のViewとの違い)

クエリの結果がキャッシュされた実体のあるView 通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時

に逐次、元テーブルへアクセスが必要。

Col1 Col2

1 AA

2 BB

Col1 Col2

12 AA

33 BB

Col1 Col2

12 AA

66 BB

View sum_tbl

通常のViewの場合

SELECT Col1, Col2…;

Page 22: Postgre sql9.3新機能紹介

22 Copyright © 2013 NTT DATA Corporation

Materialized Views

Materialized Viewsって?(通常のViewとの違い)

クエリの結果がキャッシュされた実体のあるView 通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時

に逐次、元テーブルへアクセスが必要。

Col1 Col2

1 AA

2 BB

Col1 Col2

12 AA

33 BB

Col1 Col2

12 AA

66 BB

Materialized View sum_tbl

Materialized Viewsの場合

CREATE MATERIALIZED VIEW sum_tbl AS

SELECT …;

View作成時に、結果をあらかじめキャッシュ

Page 23: Postgre sql9.3新機能紹介

23 Copyright © 2013 NTT DATA Corporation

Materialized Views

Materialized Viewsって?(通常のViewとの違い)

クエリの結果がキャッシュされた実体のあるView 通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時

に逐次、元テーブルへアクセスが必要。

Materialized Viewsのメリットは?

結果集計、複雑なクエリ、頻発する演算の結果が高速に! 集計結果に頻繁にアクセスするシステムに重宝する

Col1 Col2

1 AA

2 BB

Col1 Col2

12 AA

33 BB

Col1 Col2

12 AA

66 BB

Materialized Viewsの場合

早い!

結果だけを検索するので 高速かつシンプルなSQL!

Materialized View sum_tbl

Page 24: Postgre sql9.3新機能紹介

24 Copyright © 2013 NTT DATA Corporation

Materialized Views

PostgreSQL9.3のMaterialized Viewsの注意点

一般的なDBMSのMVに比べると作りはかなり簡素

自動リフレッシュ機能がない –変更のたびにリフレッシュ、定期的にリフレッシュする機能がない

–トリガやcronで代替

高速リフレッシュ機能がない –差分だけをリフレッシュできない

–Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意

→元テーブルが頻繁に変わる場合や常に正確な結果が求められる場合は採用するか慎重な検討が必要

Page 25: Postgre sql9.3新機能紹介

25 Copyright © 2013 NTT DATA Corporation

Materialized Views

PostgreSQL9.3のMaterialized Viewsの注意点

一般的なDBMSのMVに比べると作りはかなり簡素

自動リフレッシュ機能がない –変更のたびにリフレッシュ、定期的にリフレッシュする機能がない

–トリガやcronで代替

高速リフレッシュ機能がない –差分だけをリフレッシュできない

–Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意

→元テーブルが頻繁に変わる場合や常に正確な結果が求められる場合は採用するか慎重な検討が必要

これらの解決策は、9.4に向けて活発に議論中

Page 26: Postgre sql9.3新機能紹介

26 Copyright © 2013 NTT DATA Corporation

PostgreSQL9.2から登場 ! JavaScriptにおけるオブジェクトの表記法をベース

とした人にもマシンにも扱いやすいデータ記述言語。

{"id":1, "name":"鈴木", "address":"東京", "birth_day":"1970-01-01“}

何ができる? 使いどころ

JSON型 JSON型データを格納可。行や配列をJSON型に変換可。ただし、JSON型に対する演算は不可。インデックスも無し。

JSON型を扱うミドルの中継。 リレーショナルデータのJSON変換。

取り扱います !

JSONの正規フォーマットデータ

CREATE TABLE tbl(

json_data json);

JSON型

key value

Page 27: Postgre sql9.3新機能紹介

27 Copyright © 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}';

Page 28: Postgre sql9.3新機能紹介

28 Copyright © 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)へ増加!

Page 29: Postgre sql9.3新機能紹介

29 Copyright © 2013 NTT DATA Corporation

PostgreSQL(ローカル)

contrib/postgres_fdw リモートのPostgreSQLのテーブルをローカルのテーブルとして扱える! 従来のdblinkと同様の用途で、かつシンプルに処理を行える WHERE句のプッシュダウンが可能

リモートから必要なデータだけを取得 IMMUTABLE(常時結果が同じとなる)な組み込みの演算子や関数限定

Writable-FDWを生かし、リモートテーブルへの更新処理もサポート ローカルのトランザクションと連動して、リモートでも自動的に

コミット/アボートを実施!

Col1 Col2

1 AA

2 BB …

PostgreSQL(リモート)

Col1 Col2

1 AA

2 BB

FDWテーブル 元テーブル

自動で接続 WHERE句条件をリモートに渡して参照/更新 トランザクションも可

参照/更新

結果セットの返却 結果返却

Page 30: Postgre sql9.3新機能紹介

30 Copyright © 2013 NTT DATA Corporation

PostgreSQL(ローカル)

contrib/postgres_fdw

例えばこんな用途に ローカルには頻繁にアクセス(低レイテンシを期待)するデータ、

リモートにはたまにアクセス(高レイテンシも許容)するデータをそれぞれ配置 使用頻度を加味してノード分散するなどの工夫が可能 ただし、パーティショニングの子テーブルに外部表を指定できない

Col1 Col2

101 AA

102 BB

PostgreSQL(リモート)

多用するデータ

Col1 Col2

1 AA

たまに使うデータ

Col1 Col2

1 AA

2 BB

PostgreSQL(リモート)

Col1 Col2

101 AA

102 BB

Col1 Col2

1 AA

たまに使うデータ

Col1 Col2

親テーブル

継承可

継承不可

Page 31: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 31

運用に役立つ新機能!

Page 32: Postgre sql9.3新機能紹介

32 Copyright © 2013 NTT DATA Corporation

高速フェイルオーバ

故障 検知

共有ディスク 切替

リカバリ チェック ポイント

共有ディスク

故障 検知

リカ バリ

チェック ポイント

故障 検知

リカ バリ 9.3

~9.2

フェイルオーバ時間を大幅に短縮! 実行に長時間かかるチェックポイントをスキップ

Page 33: Postgre sql9.3新機能紹介

33 Copyright © 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

Page 34: Postgre sql9.3新機能紹介

34 Copyright © 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

Page 35: Postgre sql9.3新機能紹介

35 Copyright © 2013 NTT DATA Corporation

カスケードレプリケーションの運用性向上

マスタ スタンバイ

スタンバイ

バック アップ

アーカイブ

カスケードレプリケーションのフェイルオーバ時にバックアップや共有アーカイブが不要に!

停止 マスタ スタンバイ

停止 マスタ スタンバイ

停止 マスタ スタンバイ

通常時

マスタ昇格直後

フェイルオーバ後

再開準備中

マスタ故障により スタンバイがマスタに昇格

レプリケーション再開 9.2

面倒!大変!イケテナイ!

Page 36: Postgre sql9.3新機能紹介

36 Copyright © 2013 NTT DATA Corporation

カスケードレプリケーションの運用性向上

マスタ スタンバイ

スタンバイ

カスケードレプリケーションのフェイルオーバ時にバックアップや共有アーカイブが不要に!

停止 マスタ スタンバイ

停止 マスタ スタンバイ

通常時

マスタ昇格直後

フェイルオーバ後

マスタ故障により スタンバイがマスタに昇格

楽チン!時間もかからない!

レプリケーション再開

9.3

Page 37: Postgre sql9.3新機能紹介

37 Copyright © 2013 NTT DATA Corporation

ファイルシステム

DB CLOG WAL

ストレージやファイル システムで破損検知

レイアウトが壊れて いないかで破損検知

CRC 特別な機構で破損検知

DB

共有バッファ

~9.2

データページチェックサム

データページにチェックサムを付けて、ページの破損をすぐに検知! 早急な破損検知が非常に重要

破損がクエリ結果の誤りやクラッシュを招く

破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も

initdb -k (or --data-checksums)

性能への影響が大きいことに注意

Page 38: Postgre sql9.3新機能紹介

38 Copyright © 2013 NTT DATA Corporation

ファイルシステム

DB CLOG WAL

CRC

DB

共有バッファ

チェックサム

チェックサム

チェックサムの 付与・更新

ストレージやファイル システムで破損検知

レイアウトが壊れて いないかで破損検知

特別な機構で破損検知

9.3

チェックサムの 妥当性確認

データページチェックサム

データページにチェックサムを付けて、ページの破損をすぐに検知! 早急な破損検知が非常に重要

破損がクエリ結果の誤りやクラッシュを招く

破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も

initdb -k (or --data-checksums)

性能への影響が大きいことに注意

Page 39: Postgre sql9.3新機能紹介

39 Copyright © 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しよう♪

Page 40: Postgre sql9.3新機能紹介

40 Copyright © 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の接続を使うことに注意

Page 41: Postgre sql9.3新機能紹介

41 Copyright © 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の接続を使うことに注意

Page 42: Postgre sql9.3新機能紹介

42 Copyright © 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

Page 43: Postgre sql9.3新機能紹介

43 Copyright © 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 : パラメータ不正

Page 44: Postgre sql9.3新機能紹介

44 Copyright © 2013 NTT DATA Corporation

pg_isready

確認方法により、稼働状況の見え方が異なるため注意

pg_ctl status SQL実行 pg_isready

稼働状況の確認方法

postmasterプロセスが存在するか?

SQLの実行が成功するか?

PostgreSQLに接続できるか?

正常稼働中 稼働 稼働 稼働

停止後 停止 停止 停止

起動中(リカバリ中) 稼働 停止 停止(拒否)

停止中 稼働 停止 停止(拒否)

接続権限なし(*1) 稼働 停止 稼働

同時接続数フル 稼働 停止 稼働

(*1) pg_hba.confで接続が許可されていない場合など

Page 45: Postgre sql9.3新機能紹介

45 Copyright © 2013 NTT DATA Corporation

ちょっぴり注意!非互換について

…………

0000000100000000000000FD

0000000100000000000000FE 000000010000000100000000

000000010000000100000001

…………

…………

0000000100000000000000FD

0000000100000000000000FE

0000000100000000000000FF 000000010000000100000000

000000010000000100000001

…………

WALファイル名/アーカイブファイル名の末尾に注意 運用スクリプトなどで、WALファイル名やアーカイブファイル名をもとにファイ

ル取得や削除を制御している場合は、影響がないか確認しましょう!

~9.2 9.3

Page 46: Postgre sql9.3新機能紹介

46 Copyright © 2013 NTT DATA Corporation

まとめ

Q1. PostgreSQL9.3の特徴は?

A1. “Ease of Use” by Robert Treat

開発者・運用者向けの新機能が充実!

Q2. PostgreSQL9.3はいつ出るの?

A2. 9月ごろのリリースが予想されています!

Page 47: Postgre sql9.3新機能紹介

Copyright © 2011 NTT DATA Corporation

Copyright © 2013 NTT DATA Corporation

Copyright © 2011 NTT DATA Corporation

Copyright © 2013 NTT DATA Corporation

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

Page 48: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 4

8

Copyright © 2013 NTT DATA Corporation 4

8

付録

Page 49: Postgre sql9.3新機能紹介

49 Copyright © 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の対象

Page 50: Postgre sql9.3新機能紹介

50 Copyright © 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

Page 51: Postgre sql9.3新機能紹介

51 Copyright © 2013 NTT DATA Corporation

カスケードレプリケーションの運用性向上

マスタ スタンバイ

スタンバイ

バック アップ

アーカイブ

カスケードレプリケーションのフェイルオーバ時にバックアップや共有アーカイブが不要に!

停止 マスタ スタンバイ

停止 マスタ スタンバイ

停止 マスタ スタンバイ

通常時

マスタ昇格直後

フェイルオーバ後

再開準備中

マスタ故障により スタンバイがマスタに昇格

レプリケーション再開 9.2

面倒!大変!イケテナイ!

TLI=1 TLI=1 TLI=1

TLI=2 TLI=1

TLI=2 TLI=2

Page 52: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 52

9.4でもアツい機能がゾクゾクと!

Page 53: Postgre sql9.3新機能紹介

5

3

Copyright © 2013 NTT DATA Corporation

パラレルクエリ

パラレルpg_dumpなど、今パラレル化がアツい!

現状 1クエリは1プロセス(1コア)でしか処理できないため、CPU数を増やしても1クエリの性能は上がらない

目標 パラレルクエリ(1クエリを複数プロセスでパラレルに処理して、性能向上させる機能)のサポート

開発の方向性 パラレルクエリを実装するのは非常に難しいため、まずはパラレルソートやインデックス作成のパラレル化から徐々に取り組む

Page 54: Postgre sql9.3新機能紹介

54 Copyright © 2013 NTT DATA Corporation

8 16 32 64

スル

ープ

ット

PostgreSQL9.2

PostgreSQL9.1

CPUコア数(論理)

更新性能のスケールアップ

更新時のトランザクションログ生成時のロックが改良され、更新処理性能が大幅にアップ!

9.3の実に3倍以上

のスループットを実現!

メニーコア

高速ディスク

任せろ!

64 32 16 8

v9.4

v9.3

※イメージ図

Page 55: Postgre sql9.3新機能紹介

55 Copyright © 2013 NTT DATA Corporation

レプリケーション

レプリケーションの運用性向上

マスタ スタンバイ

停止 マスタ

マスタ スタンバイ

レプリケーション

停止 マスタ

バック アップ

両系稼働

マスタ単独稼働

両系稼働

バックアップ転送

フェイルバック時にバックアップが不要に!

マスタ故障によりフェイルオーバ

旧マスタの再組込み (フェイルバック) 9.3

面倒!大変!時間かかりすぎ!

Page 56: Postgre sql9.3新機能紹介

56 Copyright © 2013 NTT DATA Corporation

レプリケーション

レプリケーションの運用性向上

マスタ スタンバイ

マスタ スタンバイ

レプリケーション

両系稼働 両系稼働

フェイルバック時にバックアップが不要に!

マスタ故障によりフェイルオーバ

旧マスタの再組込み (フェイルバック)

停止 マスタ

マスタ単独稼働

9.4

楽チン!時間もかからない!

Page 57: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 57

紹介しきれなかった9.3新機能

Page 58: Postgre sql9.3新機能紹介

58 Copyright © 2013 NTT DATA Corporation

64bit API Large-Object

ラージオブジェクトの最大サイズが

2GB -> 4TBへ!

商用DBMSからの移行障壁が少しは下がる・・?

9.3 !

ラージオブジェクト ~ 4TB

9.2 ..

余裕! つらい!

Page 59: Postgre sql9.3新機能紹介

59 Copyright © 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

Page 60: Postgre sql9.3新機能紹介

60 Copyright © 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とアクセサを使って制御します

Page 61: Postgre sql9.3新機能紹介

61 Copyright © 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から

Page 62: Postgre sql9.3新機能紹介

62 Copyright © 2013 NTT DATA Corporation

COPY TO STDOUT/FROM STDIN PROGRAM FILTER

COPYコマンドの出力元/先にPROGRAMを指定できます! 通常、COPYコマンドはファイルからロード、ファイルへアンロード

今回は標準入出力前にプログラムを指定可能に!

ロードデータの圧縮/解凍やクレンジングに一役買います

COPY tbl TO PROGRAM ‘ gzip > /tmp/dump.gz’;

Tbl gzip dump.gz

edit_tbl my_dump my_edit

COPY edit_tbl FROM PROGRAM ‘ my_edit /tmp/my_dump’;

処理前 処理後

圧縮前 圧縮後

Page 63: Postgre sql9.3新機能紹介

Copyright © 2013 NTT DATA Corporation 63

付録の付録

Page 64: Postgre sql9.3新機能紹介

64 Copyright © 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

2007 8.1 2009

autovacuum ロール