Your SlideShare is downloading. ×
0
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto

4,326

Published on

OSC 2012 Kansai@Kyotoでの日本PostgreSQLユーザ会の講演資料です。 …

OSC 2012 Kansai@Kyotoでの日本PostgreSQLユーザ会の講演資料です。

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,326
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
39
Comments
0
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PostgreSQL9.2新機能オープンソースカンファレンス 2012 Kansai@Kyoto 2012-08-04 日本PostgreSQLユーザ会 花田 茂
  • 2. 謝辞 この資料は SRA OSS, Inc. の以前の講演資料を ベースにしております。ご提供承諾いただきありが とうございます。 日本PostgreSQLユーザ会 2
  • 3. 自己紹介 花田 茂(はなだ しげる)  Twitter: @s87  Mail: shigeru.hanada@gmail.com PostgreSQLとの関わり  2003年頃から周辺ツール開発、性能検証など  2009年頃からPostgreSQL本体開発(SQL/MED他)  2011年から日本語ドキュメント翻訳 日本PostgreSQLユーザ会 3
  • 4. PostgreSQL のこれまでと現在 日本PostgreSQLユーザ会 4
  • 5. 改めて・・・ PostgreSQL とは 代表的なオープンソースRDBMSのひとつ Ingres(1970~ UCB) を先祖に持つ  PostgreSQL 6.0 (1996 ~) から 15年以上の歴史 BSDタイプのライセンスで配布  PostgreSQL Global Development Gruop と University of California が著作権を持つ ひとつのオーナー企業、オーナー個人を持たない  PostgreSQL開発に時間を割く技術者を提供している 企業がいくつかある/その企業群も少しずつ変遷して いる 日本PostgreSQLユーザ会 5
  • 6. PostgreSQL開発体制 支援企Contributors 業 藤井雅雄 板垣貴裕 Major Contributors 原田均 石井達夫 : Core Team 30~40名 Josh Berkus Tom Lane Peter Eisentraut Magnus Hagander Bruce Momjian Dave Page開発コミュニティ 日本PostgreSQLユーザ会 6
  • 7. PostgreSQLの歩み PostgreSQL のコードサイズとリリース 同期レプリケーション 120000 外部テーブル 100000 更新の 高速化 ビットマップ プリペアド スキャンコードサイズ (byte) 80000 ステートメント レプリケーション 60000 並列実行 Windows 64bit 外部キー、 VACUUM JOIN構文 40000 ウィンドウ関数 CPU 再帰SQL PITR、 スケール 20000 Windows スキーマ トランザク ションログ 0 PG 7.0 PG 7.1 PG 7.2 PG 7.3 PG 7.4 PG 8.0 PG 8.1 PG 8.2 PG 8.3 PG 8.4 PG 9.0 PG 9.1 | | | | | | 2001年 2002年 2005年 2006年 2009年 2011年 4月 11月 1月 12月 7月 9月 日本PostgreSQLユーザ会 7
  • 8. 9.1 のおさらい 日本PostgreSQLユーザ会 8
  • 9. 9.1 のおさらい(1) (準)同期レプリケーションに対応  9.0 でサポートした物理レプリケーションを拡張  pg_basebackup など利便性向上 リクエスト マスターサーバ スタンバイサーバ クライア Postgres WAL Postgres 適用 ント WAL データ データ WAL情報転送 日本PostgreSQLユーザ会 9
  • 10. 9.1 のおさらい(2) 外部テーブル(SQL/MED)の枠組み  CSVファイルのラッパーが付属 拡張モジュール枠組み(CREATE EXTENSION) UNLOGGEDテーブル(高速/低信頼) 空間近傍検索(k-NN GiST インデックス対応) SE-Postgres(SE-Linux準拠のセキュリティ) N-gram全文検索 述語ロックSERIALIZABLE、更新WITH句、 ビュートリガ、カラムロケール指定、etc 日本PostgreSQLユーザ会 10
  • 11. PostgreSQL 9.2 の拡張 日本PostgreSQLユーザ会 11
  • 12. CPUスケール対応 Readは コア数64までスケール ⇒ PostgreSQL 8.2 で改良 コア数 8~12 まで ・Fast Pathロック ・直列化部分を短時間に ・WALディスク同期を改善 PgCon 2012 Robert Haas 発表資料 (2012/5/18) より 日本PostgreSQLユーザ会 12
  • 13. Index Only Scan(1) クエリに必要な全ての列(SELECT句、WHERE 句、Etc.)がインデックス定義に含まれていれば 、テーブルを参照せずに結果を返せるという機能 類似機能は他のDBMSにも  MySQLでの「Covering Index」  Oracleでの「INDEX (FAST) FULL SCAN」 日本PostgreSQLユーザ会 13
  • 14. Index Only Scan(2) なんで今までなかったの?  PostgreSQLではMVCCにおける行バージョンがテー ブルデータに記録されているため、これまで実現が難 しかった  9.2からVisibility Mapがクラッシュセーフになり、 (条件付ではあるが)テーブルデータを見なくても可 視性判定ができるようになった Visibility Mapって何?  「<relfilenode>_vm」というファイル  「ページ内の全てのタプルが全ての現存トランザク ションから可視か?」を1ページ1ビットのビットマッ プで管理 日本PostgreSQLユーザ会 14  VACUUM中に内容を更新
  • 15. Index Only Scan(3) Index Only Scanの流れ  通常のインデックススキャンと同様にインデックスを たどってインデックスタプルを取得  テーブルタプルのブロック番号とページ内オフセットが判明  テーブルタプルに対応するVisibility Mapページを取 得  Visibility Mapページからテーブル参照要否が判明  テーブルページからテーブルタプル取得  テーブルを見る必要がなければスキップ  (インデックス|テーブル)タプルから結果生成 日本PostgreSQLユーザ会 15
  • 16. Index Only Scan(4) 実行例(enable_indexonlyscan=off)postgres=# EXPLAIN (ANALYZE, BUFFERS)postgres-# SELECT count(*) FROM pgbench_accounts; QUERY PLAN----------------------------------------------------------- Aggregate (cost=288935.08..288935.09 rows=1 width=4) (actual time=13486.255..13486.255 rows=1 loops=1) Buffers: shared hit=32 read=163903 -> Seq Scan on pgbench_accounts (cost=0.00..263935.06 rows=10000006 width=4) (actual time=23.478..12261.668 rows=10000000 loops=1) Buffers: shared hit=32 read=163903 Total runtime: 13486.385 ms(5 rows) 日本PostgreSQLユーザ会 16
  • 17. Index Only Scan(5) 実行例(enable_indexonlyscan=on)postgres=# EXPLAIN (ANALYZE, BUFFERS)postgres-# SELECT count(*) FROM pgbench_accounts; QUERY PLAN-------------------------------------------------------------- Aggregate (cost=284699.32..284699.33 rows=1 width=0) (actual time=2466.584..2466.585 rows=1 loops=1) Buffers: shared read=27328 -> Index Only Scan using pgbench_accounts_pkey on pgbench_accounts (cost=0.00..259699.31 rows=10000006 width=0) (actual time=0.093..1516.373 rows=10000000 loops=1) Heap Fetches: 0 Buffers: shared read=27328 Total runtime: 2466.709 ms(6 rows) Seq Scanよりも約 5.5 倍高速! 日本PostgreSQLユーザ会 17
  • 18. Index Only Scan(5) 要VACUUM!  もちろんautovacuumでOK  ANALYZEではVisibility Mapは更新されません!  ロングトランザクションに注意! 更新されないデータは同じページ postgres に! executor  Visibility Mapはページ単位の管理な ので、更新されないレコードが同じ ページに集まると効果的 count(*)も高速に! visibility map 日本PostgreSQLユーザ会 18
  • 19. レプリケーション拡張(1) カスケード構成に対応 マスターサーバ Postgres レプリ レプリ レプリ ケーション ケーション ケーション スタンバイサーバ スタンバイサーバ スタンバイサーバ Postgres Postgres Postgres 日本PostgreSQLユーザ会 19
  • 20. レプリケーション拡張(1) カスケード構成に対応 マスターサーバ Postgres レプリ ケーション スタンバイサーバ スタンバイサーバ スタンバイサーバ Postgres レプリ Postgres レプリ Postgres ケーション ケーション 日本PostgreSQLユーザ会 20
  • 21. レプリケーション拡張(2) 同期レプリケーションにremote_writeが追加  GUCパラメータ「synchronous_commit」で設定  従来の「on」設定より軽量・低信頼な同期レプリケー ション 設定値 意味 on 自機のディスク同期を待つ レプリケーション先のディスク同期を待つ 安全 remote_write 自機のディスク同期を待つ レプリケーション先の書き込み完了を待つ local 自機のディスク同期を待つ 高速 レプリケーション先の処理は待たない off 自機のディスク同期を待たない レプリケーション先の処理は待たない 日本PostgreSQLユーザ会 21
  • 22. レプリケーション拡張(2) remote_writeの場合は  自機でのWAL書き込み+ディスク同期  レプリケーション先でのWAL書き込み ② WAL書き込み& ④ ディスク同期 WAL書き込み ① ③ COMMIT発行 WAL WAL転送 WAL マスターサーバ スタンバイサーバ クライアント Postgres Postgres ⑥ ⑤ COMMIT完了 WAL受領通知 日本PostgreSQLユーザ会 22
  • 23. レプリケーション拡張(3) pg_receivexlogコマンドの追加  スタンバイサーバとして上流からストリーミングWAL を受け取ってファイルに保存するコマンド  WALの多重化を実現できる  WALが保存されたディレクトリはリカバリ時にアーカ イブWAL保存場所として使用可能 pg_xlog_location_diff()関数の追加  レプリケーションがどの程度遅れているかを知るのに 便利 日本PostgreSQLユーザ会 23
  • 24. 範囲データ型(1) 下限値・上限値で範囲を表現するデータ型  境界値を含む/含まないを指定可能  [1,3)は「1以上、3未満」を表す  境界値にNULLを使うと無限区間に  基本的なデータ用の範囲型と演算子は組み込みで提供  CREATE TYPE AS RANGE文で新しい範囲型も定義可能 データ型 要素データ型 演算子 型 意味 int4range int A && B bool AとBが重なっている int8range bigint A @> B bool AがBを含む numrange numeric A -|- B bool AとBが隣接している tsrange timestamp A*B 範囲 AとBの共通範囲 tstzrange timestamptz A+B 範囲 AとBの合併範囲 daterange date A-B 範囲 AからBを除いた範囲 日本PostgreSQLユーザ会 24
  • 25. 範囲データ型(2) 8.4で導入された排他制約と組み合わせることで 、「重なり」がないかを検査する制約を定義可能postgres=# d reservation Table "public.reservation" 同じ部屋番号で Column | Type | Modifiers 時間帯が重なる-------------+-----------+----------- 予約は不可という制約 id | integer | not null room_id | integer | not null during | tstzrange | not null *Note* reserver_id | integer | GiSTでint型を使うには memo | text | contrib/btree_gistIndexes: が必要 "reservation_pkey" PRIMARY KEY, btree (id) "reservation_during_excl" EXCLUDE USING gist (room_id WITH =, during WITH &&) 日本PostgreSQLユーザ会 25
  • 26. 範囲データ型(3) 8.4で導入された排他制約と組み合わせることで 、「重なり」がないかを検査する制約を定義可能postgres=# INSERT INTO reservation (room_id, during, reserver)postgres-# VALUESpostgres-# (2, [2012-06-16 14:00,2012-06-16 14:45)::tstzrange, 1);INSERT 0 1postgres=# INSERT INTO reservation (room_id, during, reserver)postgres-# VALUESpostgres-# (2, [2012-06-16 14:30,2012-06-16 14:45)::tstzrange, 1);ERROR: conflicting key value violates exclusion constraint "reservation_during_excl"DETAIL: Key (room, during)=(2, ["2012-06-16 14:30:00+09", "2012-06-16 17:00:00+09")) conflicts with existing key (room, during)=(2, ["2012-06-16 14:00:00+09","2012-06-16 14:45:00+09")). 日本PostgreSQLユーザ会 26
  • 27. JSONデータ型(1) 格納時の構文チェックのついたtext型 PostgreSQLの行や配列から変換可能  array_to_json()  row_to_json() 日本語の使用は次リリース(Beta3?)から pl/v8*1ではJavaScriptで関数が書けるので親和 性が高い? *1 http://code.google.com/p/plv8js/wiki/PLV8 日本PostgreSQLユーザ会 27
  • 28. JSONデータ型(2) 使用例(テーブル定義)postgres=# d users Table "public.users" Column | Type | Modifiers--------+---------+----------- id | integer | not null name | text | not null data | json |Indexes: "users_pkey" PRIMARY KEY, btree (id)postgres=# SELECT * FROM users ORDER BY id; id | name | data----+------+------------------------------------------------------------ 1 | foo | {"last_access":"2012-01-01 12:34:56","features":"[1,3,5]"} 2 | bar | {"last_access":"2011-11-25 23:42:41","features":"[2,3,6]"}(2 rows) 日本PostgreSQLユーザ会 28
  • 29. JSONデータ型(3) 使用例(array_to_json()関数)postgres=# SELECT array_to_json({1,2,3}::int[]); array_to_json--------------- [1,2,3](1 row)postgres=# 日本PostgreSQLユーザ会 29
  • 30. JSONデータ型(4) 使用例(row_to_json()関数)postgres=# SELECT row_to_json(row(id, name))postgres-# FROM foo WHERE id = 1; row_to_json-------------------------- {"f1":1,"f2":"name_1"}(1 row)postgres=# SELECT row_to_json(t) FROMpostgres-# (SELECT id, name FROM t WHERE id = 1) t; row_to_json-------------------------- {"id":1,"name":"name_1"}(1 row) 日本PostgreSQLユーザ会 30
  • 31. その他の拡張(1) インデックス  Unbalanced treeをサポートするSP-GiST(Space- Partitioned GiST)アクセスメソッドの追加 セキュリティ  セキュリティバリアビュー  VIEWのsecurity_barrier属性と関数のLEAKPROOF属性を組 み合わせることで、関数を通じてアクセス不可のカラム内容 が漏れることを防ぐ  CREATE や DROP もSE-Postgresで管理可能 ALTER TABLEでの .. ALTER TYPE の改善  全レコード書き替えは必要がときだけ 日本PostgreSQLユーザ会 31
  • 32. その他の拡張(2) 管理機能  contrib/pg_stat_statement  類似(定数値だけが異なるなど)SQLを集約してくれる  I/O情報も収集  実行時統計情報の拡充  pg_stat_bgwriter チェックポイント動作の情報  pg_stat_database デッドロックカウンタ libpq  単一行モード(プロトコルレベルカーソル)のサポー ト 日本PostgreSQLユーザ会 32
  • 33. その他の拡張(3) 省電力  定期的にスリープから復帰する補助プロセスを減らす ことで、処理が無い時間帯においてサーバ省電力機能 が効果的に働く  11個/秒→0.4個/秒 各種プランナ、executor改善  Parameterized Paths  プリペアドステートメントでプランを固定しない  高速ソート  定数式のキャッシュ利用  配列内の各要素まで考慮したコスト見積もり 日本PostgreSQLユーザ会 33
  • 34. Parameterized Paths(1) 実行時パラメータを考慮したプランを生成する機 能postgres=# PREPARE s(int) AS SELECT * FROM t WHERE id < $1;PREPAREpostgres=# EXPLAIN (COSTS off) EXECUTE s(1); QUERY PLAN------------------------------ Index Scan using t_pkey on t Index Cond: (id < 1)(2 rows)postgres=# EXPLAIN (COSTS off) EXECUTE s(1000000); QUERY PLAN-------------------------- Seq Scan on t Filter: (id < 1000000)(2 rows) 日本PostgreSQLユーザ会 34
  • 35. PostgreSQL 9.2 のリリース予定 2010.7 2011.6 2012.6HEAD 2011.9 2012.6 2011.9? 2010.9 2012.6 9.0リリース 9.0.8リリース 9.1リリース 9.1.4リリース 9.2リリース 未定であるが、例年通りの流れなら 2012年秋  2012-06-04にBeta2がリリース  2012-08-03にBeta3のタグ付け 日本PostgreSQLユーザ会 35
  • 36. ご清聴ありがとうございました 日本PostgreSQLユーザ会 36
  • 37. 日本PostgreSQLユーザ会のご紹介 NPO法人として活動中  http://www.postgresql.jp/ 活動目的  PostgreSQLの研究開発および普及促進  勉強会開催  日本語ドキュメント翻訳  メーリングリスト運営  PostgreSQLに関する情報の公開  Lets Postgres(http://lets.postgresql.jp/)  会員相互および外部との技術的・人間的交流 日本PostgreSQLユーザ会 37

×