SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
Copyright © 2013 NTT DATA Corporation
2013年6月22日
NTTデータ 藤井雅雄、江川大地
PostgreSQL9.3新機能紹介
2Copyright © 2013 NTT DATA Corporation
Who are you?
藤井雅雄(@fujii_masao)
所属:株式会社NTTデータ
PostgreSQLは2008年からやってます。ここ最近
は、PostgreSQL関係のR&D、GresCube開発に関
わっています。
最近、コミッターになりました。6/10にFirst
Commit !!
江川大地(@daiti0804)です。
所属:株式会社NTTデータ
PostgreSQLは2011年からやってます。ここ最近は
もっぱらマイグレーションに従事。
最近、職場にインド人がやってきました。ベジタリア
ン向けのレストランがありましたら教えてください。
3Copyright © 2013 NTT DATA Corporation
INDEX
PostgreSQLのこれまでと現在
 PostgreSQLのこれまでの進化
 PostgreSQL9.2の振り返り
PostgreSQL のこれから…9.3のお話
 開発に役立つ新機能
 運用に役立つ新機能
 ちょっぴり注意! 非互換について
付録(時間があったら…)
 続・ちょっぴり注意! 非互換について
 9.4でもアツい機能がゾクゾクと!
 紹介しきれなかった9.3新機能
Copyright © 2013 NTT DATA Corporation 4
PostgreSQLのこれまでと現在
5Copyright © 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
開発中
6Copyright © 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 リリース)
7Copyright © 2013 NTT DATA Corporation
PostgreSQL9.2の振り返り
 性能向上
 CPUスケーラビリティの向上
その他の新機能
 インデックスオンリースキャン
 カスケードレプリケーション
 JSON型
 レンジ型
などなど…
PostgreSQL9.2の最大の特徴は、性能向上でした。
8Copyright © 2013 NTT DATA Corporation
CPUスケーラビリティの向上
参照時の軽量ロックが改良され、参照処理性能が大幅にアップ!
メニーコアの環境で更なるパフォーマンスの発揮が期待されます
論理コア64以上では、
9.1の実に3倍以上の
スループットを実現!
どんとこい!
メニーコア
PgCon 2012
Robert Haas 発表資料 (2012/5/18) より
9Copyright © 2013 NTT DATA Corporation
カスケードレプリケーション
シングルマスタ
マルチスタンバイ マルチスタンバイ
複製 複製
更新SQL
参照SQL
参照SQL
参照SQL
 シングルマスタ-マルチスタンバイのレプリケーション
同期/非同期やカスケードレプリケーションなどが利用可能
スタンバイで参照SQLを実行して負荷分散
スタンバイからのバックアップを取得可能!
バック
アップ
低負荷なスタンバイ
から取得!
Copyright © 2013 NTT DATA Corporation 10
PostgreSQL のこれから…9.3のお話
11Copyright © 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. それは次のページから…
Copyright © 2013 NTT DATA Corporation 12
開発に役立つ新機能!
13Copyright © 2013 NTT DATA Corporation
VIEWの進化
PostgreSQL9.3ではViewがパワーアップ!!
 Updatable Viewsで、Viewの更新が可能に!
 Materialized Viewsで、よく使う結果を高速に返却!
14Copyright © 2013 NTT DATA Corporation
VIEWの進化
PostgreSQL9.3ではViewがパワーアップ!!
 Updatable Viewsで、Viewの更新が可能に!
 Materialized Viewsで、よく使う結果を高速に返却!
15Copyright © 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 複雑なルール)
面倒 !
大変 !
16Copyright © 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作成だけ!
面倒 !
大変 !
楽チン !
17Copyright © 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として使用可能
18Copyright © 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として使用可能
19Copyright © 2013 NTT DATA Corporation
Viewの進化
PostgreSQL9.3ではViewがパワーアップ!!
 Updatable Viewsで、Viewの更新が可能に!
 Materialized Viewsで、よく使う結果を高速に返却!
20Copyright © 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…;
21Copyright © 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…;
22Copyright © 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作成時に、結果をあらかじめキャッシュ
23Copyright © 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
24Copyright © 2013 NTT DATA Corporation
Materialized Views
 PostgreSQL9.3のMaterialized Viewsの注意点
一般的なDBMSのMVに比べると作りはかなり簡素
自動リフレッシュ機能がない
–変更のたびにリフレッシュ、定期的にリフレッシュする機能がない
–トリガやcronで代替
高速リフレッシュ機能がない
–差分だけをリフレッシュできない
–Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意
→元テーブルが頻繁に変わる場合や常に正確な結果が
求められる場合は採用するか慎重な検討が必要
25Copyright © 2013 NTT DATA Corporation
Materialized Views
 PostgreSQL9.3のMaterialized Viewsの注意点
一般的なDBMSのMVに比べると作りはかなり簡素
自動リフレッシュ機能がない
–変更のたびにリフレッシュ、定期的にリフレッシュする機能がない
–トリガやcronで代替
高速リフレッシュ機能がない
–差分だけをリフレッシュできない
–Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意
→元テーブルが頻繁に変わる場合や常に正確な結果が
求められる場合は採用するか慎重な検討が必要
これらの解決策は、9.4に向けて活発に議論中
26Copyright © 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
27Copyright © 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}';
28Copyright © 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)へ増加!
29Copyright © 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句条件をリモート
に渡して参照/更新
トランザクションも可
参照/更新
結果セットの返却
結果返却
30Copyright © 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
…
親テーブル
継承可
継承不可
Copyright © 2013 NTT DATA Corporation 31
運用に役立つ新機能!
32Copyright © 2013 NTT DATA Corporation
高速フェイルオーバ
故障
検知
共有ディスク
切替
リカバリ
チェック
ポイント
共有ディスク
故障
検知
リカ
バリ
チェック
ポイント
故障
検知
リカ
バリ 9.3
~9.2
フェイルオーバ時間を大幅に短縮!
 実行に長時間かかるチェックポイントをスキップ
33Copyright © 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
34Copyright © 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
35Copyright © 2013 NTT DATA Corporation
カスケードレプリケーションの運用性向上
マスタ スタン
バイ
スタン
バイ
バック
アップ
アーカ
イブ
カスケードレプリケーションのフェイルオーバ時にバックアップや共
有アーカイブが不要に!
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
通常時
マスタ昇格直後
フェイルオーバ後
再開準備中
マスタ故障により
スタンバイがマスタに昇格
レプリケーション再開9.2
面倒!大変!イケテナイ!
36Copyright © 2013 NTT DATA Corporation
カスケードレプリケーションの運用性向上
マスタ スタン
バイ
スタン
バイ
カスケードレプリケーションのフェイルオーバ時にバックアップや共
有アーカイブが不要に!
停止 マスタ スタン
バイ
停止 マスタ スタン
バイ
通常時
マスタ昇格直後
フェイルオーバ後
マスタ故障により
スタンバイがマスタに昇格
楽チン!時間もかからない!
レプリケーション再開
9.3
37Copyright © 2013 NTT DATA Corporation
ファイルシステム
DB CLOG WAL
ストレージやファイル
システムで破損検知
レイアウトが壊れて
いないかで破損検知
CRC 特別な機構で破損検知
DB
共有バッファ
~9.2
データページチェックサム
データページにチェックサムを付けて、ページの破損をすぐに検知!
 早急な破損検知が非常に重要
破損がクエリ結果の誤りやクラッシュを招く
破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も
 initdb -k (or --data-checksums)
 性能への影響が大きいことに注意
38Copyright © 2013 NTT DATA Corporation
ファイルシステム
DB CLOG WAL
CRC
DB
共有バッファ
チェック
サム
チェック
サム
チェックサムの
付与・更新
ストレージやファイル
システムで破損検知
レイアウトが壊れて
いないかで破損検知
特別な機構で破損検知
9.3
チェックサムの
妥当性確認
データページチェックサム
データページにチェックサムを付けて、ページの破損をすぐに検知!
 早急な破損検知が非常に重要
破損がクエリ結果の誤りやクラッシュを招く
破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も
 initdb -k (or --data-checksums)
 性能への影響が大きいことに注意
39Copyright © 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しよう♪
40Copyright © 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の接続を使うことに注意
41Copyright © 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の接続を使うことに注意
42Copyright © 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
43Copyright © 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 : パラメータ不正
44Copyright © 2013 NTT DATA Corporation
pg_isready
 確認方法により、稼働状況の見え方が異なるため注意
pg_ctl status SQL実行 pg_isready
稼働状況の確認方
法
postmasterプロセス
が存在するか?
SQLの実行が成功す
るか?
PostgreSQLに接続
できるか?
正常稼働中 稼働 稼働 稼働
停止後 停止 停止 停止
起動中(リカバリ中) 稼働 停止 停止(拒否)
停止中 稼働 停止 停止(拒否)
接続権限なし(*1) 稼働 停止 稼働
同時接続数フル 稼働 停止 稼働
(*1) pg_hba.confで接続が許可されていない場合など
45Copyright © 2013 NTT DATA Corporation
ちょっぴり注意!非互換について
…………
0000000100000000000000FD
0000000100000000000000FE
000000010000000100000000
000000010000000100000001
…………
…………
0000000100000000000000FD
0000000100000000000000FE
0000000100000000000000FF
000000010000000100000000
000000010000000100000001
…………
WALファイル名/アーカイブファイル名の末尾に注意
 運用スクリプトなどで、WALファイル名やアーカイブファイル名をもとにファイ
ル取得や削除を制御している場合は、影響がないか確認しましょう!
~9.2 9.3
46Copyright © 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
付録
49Copyright © 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の対象
50Copyright © 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
51Copyright © 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 52
9.4でもアツい機能がゾクゾクと!
5Copyright © 2013 NTT DATA Corporation
パラレルクエリ
 パラレルpg_dumpなど、今パラレル化がアツい!
 現状
1クエリは1プロセス(1コア)でしか処理できないため、CPU数を増やしても
1クエリの性能は上がらない
 目標
パラレルクエリ(1クエリを複数プロセスでパラレルに処理して、性能向上さ
せる機能)のサポート
 開発の方向性
パラレルクエリを実装するのは非常に難しいため、まずはパラレルソートや
インデックス作成のパラレル化から徐々に取り組む
54Copyright © 2013 NTT DATA Corporation
8 16 32 64
スループット
PostgreSQL9.2
PostgreSQL9.1
CPUコア数(論理)
更新性能のスケールアップ
更新時のトランザクションログ生成時のロックが改良され、更新処理
性能が大幅にアップ!
9.3の実に3倍以上
のスループットを実
現!
メニーコア
高速ディスク
任せろ!
6432168
v9.4
v9.3
※イメージ図
55Copyright © 2013 NTT DATA Corporation
レプリケー
ション
レプリケーションの運用性向上
マスタ スタン
バイ
停止 マスタ
マスタスタン
バイ
レプリケー
ション
停止 マスタ
バック
アップ
両系稼働
マスタ単独稼働
両系稼働
バックアップ転送
フェイルバック時にバックアップが不要に!
マスタ故障により
フェイルオーバ
旧マスタの再組込み
(フェイルバック)9.3
面倒!大変!時間かかりすぎ!
56Copyright © 2013 NTT DATA Corporation
レプリケー
ション
レプリケーションの運用性向上
マスタ スタン
バイ
マスタスタン
バイ
レプリケー
ション
両系稼働 両系稼働
フェイルバック時にバックアップが不要に!
マスタ故障により
フェイルオーバ
旧マスタの再組込み
(フェイルバック)
停止 マスタ
マスタ単独稼働
9.4
楽チン!時間もかからない!
Copyright © 2013 NTT DATA Corporation 57
紹介しきれなかった9.3新機能
58Copyright © 2013 NTT DATA Corporation
64bit API Large-Object
ラージオブジェクトの最大サイズが
2GB -> 4TBへ!
商用DBMSからの移行障壁が少しは下がる・・?
9.3 !
ラージオブジェクト
~ 4TB
9.2 ..
余裕!つらい!
59Copyright © 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
60Copyright © 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とアクセサを使って制御します
61Copyright © 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から
62Copyright © 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 63
付録の付録
64Copyright © 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
ロール

Weitere ähnliche Inhalte

Was ist angesagt?

perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)Daichi Egawa
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介Insight Technology, Inc.
 
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
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介Masao Fujii
 
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)Chika SATO
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナーKazuko Itoda
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介Masahiko Sawada
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)Chika SATO
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張Shigeru Hanada
 
PostgreSQL監査
PostgreSQL監査PostgreSQL監査
PostgreSQL監査Ayumi Ishii
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121Kosuke Kida
 
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラPostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラNTT DATA OSS Professional Services
 

Was ist angesagt? (20)

PostreSQL監査
PostreSQL監査PostreSQL監査
PostreSQL監査
 
perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)perfを使ったPostgreSQLの解析(前編)
perfを使ったPostgreSQLの解析(前編)
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
 
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
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介
 
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
 
Application of postgre sql to large social infrastructure jp
Application of postgre sql to large social infrastructure jpApplication of postgre sql to large social infrastructure jp
Application of postgre sql to large social infrastructure jp
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
 
PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介PostgreSQL 9.6 新機能紹介
PostgreSQL 9.6 新機能紹介
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)JPUG 沖縄支部セミナー資料(2013-04-27)
JPUG 沖縄支部セミナー資料(2013-04-27)
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
PostgreSQL監査
PostgreSQL監査PostgreSQL監査
PostgreSQL監査
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラPostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 

Ähnlich wie Postgre sql9.3新機能紹介

Sharding with sql alchemy
Sharding with sql alchemySharding with sql alchemy
Sharding with sql alchemyAkira Matsuzaki
 
Extending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 JapanExtending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 JapanShigeru Hanada
 
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方Soudai Sone
 
Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7Shinya Sugiyama
 
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦Insight Technology, Inc.
 
Data Scientists Love SQL Server
Data Scientists Love SQL ServerData Scientists Love SQL Server
Data Scientists Love SQL ServerTomoyuki Oota
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選Tomoya Kawanishi
 
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みJaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みHideki Sugimoto
 
Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802TAKESHI KIURA
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...NTT DATA Technology & Innovation
 
jBOLT Ver3.2
jBOLT Ver3.2jBOLT Ver3.2
jBOLT Ver3.2skudoh
 
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
zozotown real time linkage infrastructure
zozotown real time linkage infrastructurezozotown real time linkage infrastructure
zozotown real time linkage infrastructureKeisukeTaniguchi2
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -歩 柴田
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!NTT DATA Technology & Innovation
 
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)akira6592
 

Ähnlich wie Postgre sql9.3新機能紹介 (20)

Sharding with sql alchemy
Sharding with sql alchemySharding with sql alchemy
Sharding with sql alchemy
 
Extending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 JapanExtending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 Japan
 
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
Webで役立つRDBの使い方
Webで役立つRDBの使い方Webで役立つRDBの使い方
Webで役立つRDBの使い方
 
Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7Power of SQL and NoSQL with MySQL5.7
Power of SQL and NoSQL with MySQL5.7
 
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
 
Data Scientists Love SQL Server
Data Scientists Love SQL ServerData Scientists Love SQL Server
Data Scientists Love SQL Server
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組みJaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
 
Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802Ts76→ts79 spotfire追加機能ご紹介 170802
Ts76→ts79 spotfire追加機能ご紹介 170802
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
 
jBOLT Ver3.2
jBOLT Ver3.2jBOLT Ver3.2
jBOLT Ver3.2
 
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
zozotown real time linkage infrastructure
zozotown real time linkage infrastructurezozotown real time linkage infrastructure
zozotown real time linkage infrastructure
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
Ansible ではじめる ネットワーク自動化(Ansible 2.9版)
 

Kürzlich hochgeladen

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Kürzlich hochgeladen (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

Postgre sql9.3新機能紹介

  • 1. Copyright © 2013 NTT DATA Corporation 2013年6月22日 NTTデータ 藤井雅雄、江川大地 PostgreSQL9.3新機能紹介
  • 2. 2Copyright © 2013 NTT DATA Corporation Who are you? 藤井雅雄(@fujii_masao) 所属:株式会社NTTデータ PostgreSQLは2008年からやってます。ここ最近 は、PostgreSQL関係のR&D、GresCube開発に関 わっています。 最近、コミッターになりました。6/10にFirst Commit !! 江川大地(@daiti0804)です。 所属:株式会社NTTデータ PostgreSQLは2011年からやってます。ここ最近は もっぱらマイグレーションに従事。 最近、職場にインド人がやってきました。ベジタリア ン向けのレストランがありましたら教えてください。
  • 3. 3Copyright © 2013 NTT DATA Corporation INDEX PostgreSQLのこれまでと現在  PostgreSQLのこれまでの進化  PostgreSQL9.2の振り返り PostgreSQL のこれから…9.3のお話  開発に役立つ新機能  運用に役立つ新機能  ちょっぴり注意! 非互換について 付録(時間があったら…)  続・ちょっぴり注意! 非互換について  9.4でもアツい機能がゾクゾクと!  紹介しきれなかった9.3新機能
  • 4. Copyright © 2013 NTT DATA Corporation 4 PostgreSQLのこれまでと現在
  • 5. 5Copyright © 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 開発中
  • 6. 6Copyright © 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 リリース)
  • 7. 7Copyright © 2013 NTT DATA Corporation PostgreSQL9.2の振り返り  性能向上  CPUスケーラビリティの向上 その他の新機能  インデックスオンリースキャン  カスケードレプリケーション  JSON型  レンジ型 などなど… PostgreSQL9.2の最大の特徴は、性能向上でした。
  • 8. 8Copyright © 2013 NTT DATA Corporation CPUスケーラビリティの向上 参照時の軽量ロックが改良され、参照処理性能が大幅にアップ! メニーコアの環境で更なるパフォーマンスの発揮が期待されます 論理コア64以上では、 9.1の実に3倍以上の スループットを実現! どんとこい! メニーコア PgCon 2012 Robert Haas 発表資料 (2012/5/18) より
  • 9. 9Copyright © 2013 NTT DATA Corporation カスケードレプリケーション シングルマスタ マルチスタンバイ マルチスタンバイ 複製 複製 更新SQL 参照SQL 参照SQL 参照SQL  シングルマスタ-マルチスタンバイのレプリケーション 同期/非同期やカスケードレプリケーションなどが利用可能 スタンバイで参照SQLを実行して負荷分散 スタンバイからのバックアップを取得可能! バック アップ 低負荷なスタンバイ から取得!
  • 10. Copyright © 2013 NTT DATA Corporation 10 PostgreSQL のこれから…9.3のお話
  • 11. 11Copyright © 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. それは次のページから…
  • 12. Copyright © 2013 NTT DATA Corporation 12 開発に役立つ新機能!
  • 13. 13Copyright © 2013 NTT DATA Corporation VIEWの進化 PostgreSQL9.3ではViewがパワーアップ!!  Updatable Viewsで、Viewの更新が可能に!  Materialized Viewsで、よく使う結果を高速に返却!
  • 14. 14Copyright © 2013 NTT DATA Corporation VIEWの進化 PostgreSQL9.3ではViewがパワーアップ!!  Updatable Viewsで、Viewの更新が可能に!  Materialized Viewsで、よく使う結果を高速に返却!
  • 15. 15Copyright © 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 複雑なルール) 面倒 ! 大変 !
  • 16. 16Copyright © 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作成だけ! 面倒 ! 大変 ! 楽チン !
  • 17. 17Copyright © 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として使用可能
  • 18. 18Copyright © 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として使用可能
  • 19. 19Copyright © 2013 NTT DATA Corporation Viewの進化 PostgreSQL9.3ではViewがパワーアップ!!  Updatable Viewsで、Viewの更新が可能に!  Materialized Viewsで、よく使う結果を高速に返却!
  • 20. 20Copyright © 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…;
  • 21. 21Copyright © 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…;
  • 22. 22Copyright © 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作成時に、結果をあらかじめキャッシュ
  • 23. 23Copyright © 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
  • 24. 24Copyright © 2013 NTT DATA Corporation Materialized Views  PostgreSQL9.3のMaterialized Viewsの注意点 一般的なDBMSのMVに比べると作りはかなり簡素 自動リフレッシュ機能がない –変更のたびにリフレッシュ、定期的にリフレッシュする機能がない –トリガやcronで代替 高速リフレッシュ機能がない –差分だけをリフレッシュできない –Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意 →元テーブルが頻繁に変わる場合や常に正確な結果が 求められる場合は採用するか慎重な検討が必要
  • 25. 25Copyright © 2013 NTT DATA Corporation Materialized Views  PostgreSQL9.3のMaterialized Viewsの注意点 一般的なDBMSのMVに比べると作りはかなり簡素 自動リフレッシュ機能がない –変更のたびにリフレッシュ、定期的にリフレッシュする機能がない –トリガやcronで代替 高速リフレッシュ機能がない –差分だけをリフレッシュできない –Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意 →元テーブルが頻繁に変わる場合や常に正確な結果が 求められる場合は採用するか慎重な検討が必要 これらの解決策は、9.4に向けて活発に議論中
  • 26. 26Copyright © 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
  • 27. 27Copyright © 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}';
  • 28. 28Copyright © 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)へ増加!
  • 29. 29Copyright © 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句条件をリモート に渡して参照/更新 トランザクションも可 参照/更新 結果セットの返却 結果返却
  • 30. 30Copyright © 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 … 親テーブル 継承可 継承不可
  • 31. Copyright © 2013 NTT DATA Corporation 31 運用に役立つ新機能!
  • 32. 32Copyright © 2013 NTT DATA Corporation 高速フェイルオーバ 故障 検知 共有ディスク 切替 リカバリ チェック ポイント 共有ディスク 故障 検知 リカ バリ チェック ポイント 故障 検知 リカ バリ 9.3 ~9.2 フェイルオーバ時間を大幅に短縮!  実行に長時間かかるチェックポイントをスキップ
  • 33. 33Copyright © 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
  • 34. 34Copyright © 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
  • 35. 35Copyright © 2013 NTT DATA Corporation カスケードレプリケーションの運用性向上 マスタ スタン バイ スタン バイ バック アップ アーカ イブ カスケードレプリケーションのフェイルオーバ時にバックアップや共 有アーカイブが不要に! 停止 マスタ スタン バイ 停止 マスタ スタン バイ 停止 マスタ スタン バイ 通常時 マスタ昇格直後 フェイルオーバ後 再開準備中 マスタ故障により スタンバイがマスタに昇格 レプリケーション再開9.2 面倒!大変!イケテナイ!
  • 36. 36Copyright © 2013 NTT DATA Corporation カスケードレプリケーションの運用性向上 マスタ スタン バイ スタン バイ カスケードレプリケーションのフェイルオーバ時にバックアップや共 有アーカイブが不要に! 停止 マスタ スタン バイ 停止 マスタ スタン バイ 通常時 マスタ昇格直後 フェイルオーバ後 マスタ故障により スタンバイがマスタに昇格 楽チン!時間もかからない! レプリケーション再開 9.3
  • 37. 37Copyright © 2013 NTT DATA Corporation ファイルシステム DB CLOG WAL ストレージやファイル システムで破損検知 レイアウトが壊れて いないかで破損検知 CRC 特別な機構で破損検知 DB 共有バッファ ~9.2 データページチェックサム データページにチェックサムを付けて、ページの破損をすぐに検知!  早急な破損検知が非常に重要 破損がクエリ結果の誤りやクラッシュを招く 破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も  initdb -k (or --data-checksums)  性能への影響が大きいことに注意
  • 38. 38Copyright © 2013 NTT DATA Corporation ファイルシステム DB CLOG WAL CRC DB 共有バッファ チェック サム チェック サム チェックサムの 付与・更新 ストレージやファイル システムで破損検知 レイアウトが壊れて いないかで破損検知 特別な機構で破損検知 9.3 チェックサムの 妥当性確認 データページチェックサム データページにチェックサムを付けて、ページの破損をすぐに検知!  早急な破損検知が非常に重要 破損がクエリ結果の誤りやクラッシュを招く 破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も  initdb -k (or --data-checksums)  性能への影響が大きいことに注意
  • 39. 39Copyright © 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しよう♪
  • 40. 40Copyright © 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の接続を使うことに注意
  • 41. 41Copyright © 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の接続を使うことに注意
  • 42. 42Copyright © 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
  • 43. 43Copyright © 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 : パラメータ不正
  • 44. 44Copyright © 2013 NTT DATA Corporation pg_isready  確認方法により、稼働状況の見え方が異なるため注意 pg_ctl status SQL実行 pg_isready 稼働状況の確認方 法 postmasterプロセス が存在するか? SQLの実行が成功す るか? PostgreSQLに接続 できるか? 正常稼働中 稼働 稼働 稼働 停止後 停止 停止 停止 起動中(リカバリ中) 稼働 停止 停止(拒否) 停止中 稼働 停止 停止(拒否) 接続権限なし(*1) 稼働 停止 稼働 同時接続数フル 稼働 停止 稼働 (*1) pg_hba.confで接続が許可されていない場合など
  • 45. 45Copyright © 2013 NTT DATA Corporation ちょっぴり注意!非互換について ………… 0000000100000000000000FD 0000000100000000000000FE 000000010000000100000000 000000010000000100000001 ………… ………… 0000000100000000000000FD 0000000100000000000000FE 0000000100000000000000FF 000000010000000100000000 000000010000000100000001 ………… WALファイル名/アーカイブファイル名の末尾に注意  運用スクリプトなどで、WALファイル名やアーカイブファイル名をもとにファイ ル取得や削除を制御している場合は、影響がないか確認しましょう! ~9.2 9.3
  • 46. 46Copyright © 2013 NTT DATA Corporation まとめ Q1. PostgreSQL9.3の特徴は? A1. “Ease of Use” by Robert Treat 開発者・運用者向けの新機能が充実! Q2. PostgreSQL9.3はいつ出るの? A2. 9月ごろのリリースが予想されています!
  • 47. Copyright © 2011 NTT DATA Corporation Copyright © 2013 NTT DATA Corporation Copyright © 2011 NTT DATA Corporation Copyright © 2013 NTT DATA Corporation ご清聴ありがとうございました!!
  • 48. Copyright © 2013 NTT DATA Corporation 4Copyright © 2013 NTT DATA Corporation 4 付録
  • 49. 49Copyright © 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の対象
  • 50. 50Copyright © 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
  • 51. 51Copyright © 2013 NTT DATA Corporation カスケードレプリケーションの運用性向上 マスタ スタン バイ スタン バイ バック アップ アーカ イブ カスケードレプリケーションのフェイルオーバ時にバックアップや共 有アーカイブが不要に! 停止 マスタ スタン バイ 停止 マスタ スタン バイ 停止 マスタ スタン バイ 通常時 マスタ昇格直後 フェイルオーバ後 再開準備中 マスタ故障により スタンバイがマスタに昇格 レプリケーション再開9.2 面倒!大変!イケテナイ! TLI=1 TLI=1 TLI=1 TLI=2 TLI=1 TLI=2 TLI=2
  • 52. Copyright © 2013 NTT DATA Corporation 52 9.4でもアツい機能がゾクゾクと!
  • 53. 5Copyright © 2013 NTT DATA Corporation パラレルクエリ  パラレルpg_dumpなど、今パラレル化がアツい!  現状 1クエリは1プロセス(1コア)でしか処理できないため、CPU数を増やしても 1クエリの性能は上がらない  目標 パラレルクエリ(1クエリを複数プロセスでパラレルに処理して、性能向上さ せる機能)のサポート  開発の方向性 パラレルクエリを実装するのは非常に難しいため、まずはパラレルソートや インデックス作成のパラレル化から徐々に取り組む
  • 54. 54Copyright © 2013 NTT DATA Corporation 8 16 32 64 スループット PostgreSQL9.2 PostgreSQL9.1 CPUコア数(論理) 更新性能のスケールアップ 更新時のトランザクションログ生成時のロックが改良され、更新処理 性能が大幅にアップ! 9.3の実に3倍以上 のスループットを実 現! メニーコア 高速ディスク 任せろ! 6432168 v9.4 v9.3 ※イメージ図
  • 55. 55Copyright © 2013 NTT DATA Corporation レプリケー ション レプリケーションの運用性向上 マスタ スタン バイ 停止 マスタ マスタスタン バイ レプリケー ション 停止 マスタ バック アップ 両系稼働 マスタ単独稼働 両系稼働 バックアップ転送 フェイルバック時にバックアップが不要に! マスタ故障により フェイルオーバ 旧マスタの再組込み (フェイルバック)9.3 面倒!大変!時間かかりすぎ!
  • 56. 56Copyright © 2013 NTT DATA Corporation レプリケー ション レプリケーションの運用性向上 マスタ スタン バイ マスタスタン バイ レプリケー ション 両系稼働 両系稼働 フェイルバック時にバックアップが不要に! マスタ故障により フェイルオーバ 旧マスタの再組込み (フェイルバック) 停止 マスタ マスタ単独稼働 9.4 楽チン!時間もかからない!
  • 57. Copyright © 2013 NTT DATA Corporation 57 紹介しきれなかった9.3新機能
  • 58. 58Copyright © 2013 NTT DATA Corporation 64bit API Large-Object ラージオブジェクトの最大サイズが 2GB -> 4TBへ! 商用DBMSからの移行障壁が少しは下がる・・? 9.3 ! ラージオブジェクト ~ 4TB 9.2 .. 余裕!つらい!
  • 59. 59Copyright © 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
  • 60. 60Copyright © 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とアクセサを使って制御します
  • 61. 61Copyright © 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から
  • 62. 62Copyright © 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’; 処理前 処理後 圧縮前圧縮後
  • 63. Copyright © 2013 NTT DATA Corporation 63 付録の付録
  • 64. 64Copyright © 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 ロール