SlideShare a Scribd company logo
PostgreSQL9.2新機能



オープンソースカンファレンス 2012 Kansai@Kyoto

          2012-08-04

      日本PostgreSQLユーザ会
           花田 茂
謝辞
 この資料は SRA OSS, Inc. の以前の講演資料を
  ベースにしております。ご提供承諾いただきありが
  とうございます。




              日本PostgreSQLユーザ会    2
自己紹介
 花田 茂(はなだ しげる)
  Twitter: @s87
  Mail: shigeru.hanada@gmail.com
 PostgreSQLとの関わり
  2003年頃から周辺ツール開発、性能検証など
  2009年頃からPostgreSQL本体開発(SQL/MED他)
  2011年から日本語ドキュメント翻訳




                    日本PostgreSQLユーザ会   3
PostgreSQL のこれまでと現在




        日本PostgreSQLユーザ会   4
改めて・・・ PostgreSQL とは
 代表的なオープンソースRDBMSのひとつ
 Ingres(1970~ UCB) を先祖に持つ
  PostgreSQL 6.0 (1996 ~) から 15年以上の歴史
 BSDタイプのライセンスで配布
  PostgreSQL Global Development Gruop と
   University of California が著作権を持つ
 ひとつのオーナー企業、オーナー個人を持たない
  PostgreSQL開発に時間を割く技術者を提供している
   企業がいくつかある/その企業群も少しずつ変遷して
   いる
                   日本PostgreSQLユーザ会        5
PostgreSQL開発体制
                                                       支援企
Contributors                                           業
                                        藤井雅雄
                                        板垣貴裕
               Major Contributors       原田均
                                        石井達夫
                                          :
                 Core Team              30~40名



                           Josh Berkus
                           Tom Lane
                           Peter Eisentraut
                           Magnus Hagander
                           Bruce Momjian
                           Dave Page
開発コミュニ
ティ
                                    日本PostgreSQLユーザ会         6
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
9.1 のおさらい




   日本PostgreSQLユーザ会   8
9.1 のおさらい(1)
 (準)同期レプリケーションに対応
  9.0 でサポートした物理レプリケーションを拡張
  pg_basebackup など利便性向上

    リクエスト

        マスターサーバ                           スタンバイサーバ
 クライア       Postgres         WAL            Postgres
                                                       適用
 ント                           WAL
                             データ
                              データ

                            WAL情報転送




                       日本PostgreSQLユーザ会                     9
9.1 のおさらい(2)
 外部テーブル(SQL/MED)の枠組み
  CSVファイルのラッパーが付属
 拡張モジュール枠組み(CREATE
  EXTENSION)
 UNLOGGEDテーブル(高速/低信頼)
 空間近傍検索(k-NN GiST インデックス対応)
 SE-Postgres(SE-Linux準拠のセキュリティ)
 N-gram全文検索
 述語ロックSERIALIZABLE、更新WITH句、
  ビュートリガ、カラムロケール指定、etc
              日本PostgreSQLユーザ会   10
PostgreSQL 9.2 の拡張




       日本PostgreSQLユーザ会   11
CPUスケール対応
 Readは コア数64までスケール
    ⇒ PostgreSQL 8.2 で改良 コア数 8~12 まで


 ・Fast Pathロック
 ・直列化部分を短時間に
 ・WALディスク同期を改善




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


                                    日本PostgreSQLユーザ会   12
Index Only Scan(1)
 クエリに必要な全ての列(SELECT句、WHERE
  句、Etc.)がインデックス定義に含まれていれば
  、テーブルを参照せずに結果を返せるという機能
 類似機能は他のDBMSにも
  MySQLでの「Covering Index」
  Oracleでの「INDEX (FAST) FULL SCAN」




                  日本PostgreSQLユーザ会    13
Index Only Scan(2)
 なんで今までなかったの?
   PostgreSQLではMVCCにおける行バージョンがテー
    ブルデータに記録されているため、これまで実現が難
    しかった
   9.2からVisibility Mapがクラッシュセーフになり、
    (条件付ではあるが)テーブルデータを見なくても可
    視性判定ができるようになった
 Visibility Mapって何?
   「<relfilenode>_vm」というファイル
   「ページ内の全てのタプルが全ての現存トランザク
    ションから可視か?」を1ページ1ビットのビットマッ
    プで管理
                    日本PostgreSQLユーザ会 14

   VACUUM中に内容を更新
Index Only Scan(3)
 Index Only Scanの流れ
   通常のインデックススキャンと同様にインデックスを
    たどってインデックスタプルを取得
     テーブルタプルのブロック番号とページ内オフセットが判明
   テーブルタプルに対応するVisibility Mapページを取
    得
     Visibility Mapページからテーブル参照要否が判明
   テーブルページからテーブルタプル取得
     テーブルを見る必要がなければスキップ
   (インデックス|テーブル)タプルから結果生成


                   日本PostgreSQLユーザ会    15
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
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
Index Only Scan(5)
 要VACUUM!
  もちろんautovacuumでOK
  ANALYZEではVisibility Mapは更新されません!
  ロングトランザクションに注意!
 更新されないデータは同じページ                    postgres
  に!                                 executor

  Visibility Mapはページ単位の管理な
   ので、更新されないレコードが同じ
   ページに集まると効果的
 count(*)も高速に!                      visibility
                                       map

                  日本PostgreSQLユーザ会                18
レプリケーション拡張(1)
 カスケード構成に対応

             マスターサーバ
              Postgres



     レプリ            レプリ              レプリ
     ケーション          ケーション            ケーション
 スタンバイサーバ    スタンバイサーバ                スタンバイサーバ
  Postgres    Postgres                Postgres




                  日本PostgreSQLユーザ会               19
レプリケーション拡張(1)
 カスケード構成に対応

                 マスターサーバ
                     Postgres



     レプリ
     ケーション

 スタンバイサーバ        スタンバイサーバ                   スタンバイサーバ
  Postgres   レプリ
                     Postgres      レプリ       Postgres
             ケーション                 ケーション




                         日本PostgreSQLユーザ会               20
レプリケーション拡張(2)
 同期レプリケーションにremote_writeが追加
  GUCパラメータ「synchronous_commit」で設定
  従来の「on」設定より軽量・低信頼な同期レプリケー
   ション
        設定値            意味
        on             自機のディスク同期を待つ
                       レプリケーション先のディスク同期を待つ
   安全
        remote_write   自機のディスク同期を待つ
                       レプリケーション先の書き込み完了を待つ
        local          自機のディスク同期を待つ
   高速                  レプリケーション先の処理は待たない
        off            自機のディスク同期を待たない
                       レプリケーション先の処理は待たない
                       日本PostgreSQLユーザ会      21
レプリケーション拡張(2)
 remote_writeの場合は
  自機でのWAL書き込み+ディスク同期
  レプリケーション先でのWAL書き込み
                      ②
                  WAL書き込み&                   ④
                   ディスク同期                 WAL書き込み
          ①                        ③
       COMMIT発行         WAL      WAL転送          WAL
                  マスターサーバ                スタンバイサーバ
   クライアント
                    Postgres               Postgres


          ⑥                       ⑤
       COMMIT完了                WAL受領通知
                    日本PostgreSQLユーザ会                  22
レプリケーション拡張(3)
 pg_receivexlogコマンドの追加
   スタンバイサーバとして上流からストリーミングWAL
    を受け取ってファイルに保存するコマンド
   WALの多重化を実現できる
   WALが保存されたディレクトリはリカバリ時にアーカ
    イブWAL保存場所として使用可能
 pg_xlog_location_diff()関数の追加
   レプリケーションがどの程度遅れているかを知るのに
    便利


                 日本PostgreSQLユーザ会   23
範囲データ型(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
範囲データ型(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_gist
Indexes:                                               が必要
    "reservation_pkey" PRIMARY KEY, btree (id)
    "reservation_during_excl"
    EXCLUDE USING gist (room_id WITH =, during WITH &&)



                              日本PostgreSQLユーザ会                   25
範囲データ型(3)
 8.4で導入された排他制約と組み合わせることで
  、「重なり」がないかを検査する制約を定義可能
postgres=# INSERT INTO reservation (room_id, during, reserver)
postgres-# VALUES
postgres-# (2, '[2012-06-16 14:00,2012-06-16 14:45)'::tstzrange, 1);
INSERT 0 1
postgres=# INSERT INTO reservation (room_id, during, reserver)
postgres-# VALUES
postgres-# (2, '[2012-06-16 14:30,2012-06-16 14:45)'::tstzrange, 1);
ERROR: conflicting key value violates exclusion constraint "reserva
tion_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, ["2
012-06-16 14:00:00+09","2012-06-16 14:45:00+09")).




                              日本PostgreSQLユーザ会                   26
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
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
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
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) FROM
postgres-# (SELECT id, name FROM t WHERE id = 1) t;
        row_to_json
--------------------------
 {"id":1,"name":"name_1"}
(1 row)



                           日本PostgreSQLユーザ会           30
その他の拡張(1)
 インデックス
   Unbalanced treeをサポートするSP-GiST(Space-
    Partitioned GiST)アクセスメソッドの追加
 セキュリティ
   セキュリティバリアビュー
     VIEWのsecurity_barrier属性と関数のLEAKPROOF属性を組
      み合わせることで、関数を通じてアクセス不可のカラム内容
      が漏れることを防ぐ
   CREATE や DROP もSE-Postgresで管理可能
 ALTER TABLEでの .. ALTER TYPE の改善
   全レコード書き替えは必要がときだけ
                    日本PostgreSQLユーザ会        31
その他の拡張(2)
 管理機能
   contrib/pg_stat_statement
      類似(定数値だけが異なるなど)SQLを集約してくれる
      I/O情報も収集
   実行時統計情報の拡充
      pg_stat_bgwriter チェックポイント動作の情報
      pg_stat_database デッドロックカウンタ
 libpq
   単一行モード(プロトコルレベルカーソル)のサポー
    ト

                      日本PostgreSQLユーザ会   32
その他の拡張(3)
 省電力
  定期的にスリープから復帰する補助プロセスを減らす
   ことで、処理が無い時間帯においてサーバ省電力機能
   が効果的に働く
    11個/秒→0.4個/秒
 各種プランナ、executor改善
  Parameterized Paths
    プリペアドステートメントでプランを固定しない
  高速ソート
  定数式のキャッシュ利用
  配列内の各要素まで考慮したコスト見積もり
                    日本PostgreSQLユーザ会   33
Parameterized Paths(1)
 実行時パラメータを考慮したプランを生成する機
   能
postgres=# PREPARE s(int) AS SELECT * FROM t WHERE id < $1;
PREPARE
postgres=# 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
PostgreSQL 9.2 のリリース予定

        2010.7                     2011.6                        2012.6
HEAD

                                            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
ご清聴ありがとうございました




      日本PostgreSQLユーザ会   36
日本PostgreSQLユーザ会のご紹介
 NPO法人として活動中
  http://www.postgresql.jp/
 活動目的
  PostgreSQLの研究開発および普及促進
    勉強会開催
    日本語ドキュメント翻訳
    メーリングリスト運営
  PostgreSQLに関する情報の公開
    Let's Postgres(http://lets.postgresql.jp/)
  会員相互および外部との技術的・人間的交流

                        日本PostgreSQLユーザ会          37

More Related Content

PDF
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PDF
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PDF
PostgreSQL10徹底解説
PDF
PostgreSQLバックアップの基本
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PDF
PostgreSQL 9.6 新機能紹介
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PostgreSQL10徹底解説
PostgreSQLバックアップの基本
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQL 9.6 新機能紹介
PostgreSQLの運用・監視にまつわるエトセトラ

What's hot (20)

PDF
「今そこにある危機」を捉える ~ pg_stat_statements revisited
PDF
20130203 OSS-DB Exam Silver 技術解説無料セミナー
PDF
PostgreSQL9.3新機能紹介
PDF
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
PDF
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PDF
いまさら聞けないPostgreSQL運用管理
PDF
PostgreSQLによるデータ分析ことはじめ
PDF
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
PDF
perfを使ったPostgreSQLの解析(後編)
PPTX
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpug
PDF
PostgreSQL V9 レプリケーション解説
PDF
明日から使えるPostgre sql運用管理テクニック(監視編)
PDF
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PDF
C16 45分でわかるPostgreSQLの仕組み by 山田努
PDF
PostgreSQLアーキテクチャ入門
PDF
Postgre sql9.3新機能紹介
PDF
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
JPUG 沖縄支部セミナー資料(2013-04-27)
「今そこにある危機」を捉える ~ pg_stat_statements revisited
20130203 OSS-DB Exam Silver 技術解説無料セミナー
PostgreSQL9.3新機能紹介
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
いまさら聞けないPostgreSQL運用管理
PostgreSQLによるデータ分析ことはじめ
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
perfを使ったPostgreSQLの解析(後編)
Amazon RDS for PostgreSQL ( JPUG 2014夏セミナー) #jpug
PostgreSQL V9 レプリケーション解説
明日から使えるPostgre sql運用管理テクニック(監視編)
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
C16 45分でわかるPostgreSQLの仕組み by 山田努
PostgreSQLアーキテクチャ入門
Postgre sql9.3新機能紹介
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
JPUG 沖縄支部セミナー資料(2013-04-27)
Ad

Viewers also liked (20)

PDF
Mroonga開発者が来たぞ!
PPTX
re:Invent 行ってきた
PDF
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
PDF
PostgreSQLアンチパターン
PDF
まずやっとくPostgreSQLチューニング
PDF
あなたの知らないPostgreSQL監視の世界
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
Migr8.rb チュートリアル
PDF
今すぐ使えるクラウドとPostgreSQL
PPTX
HAWQをCDHで動かしてみた
PDF
Osc2015 hokkaido postgresql-semi-stuructured-datatype
PDF
Ivsctonightandday2016winter moringsession awsreinvent2016recap
PDF
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
PPTX
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
PPTX
レシピブログのサービス設計と今後の展望
PDF
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
PDF
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PPTX
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
PDF
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
PPT
35歳でDBAになった私がデータベースを壊して学んだこと
Mroonga開発者が来たぞ!
re:Invent 行ってきた
構成情報データベースをGitで管理したいネットワーク運用者の憂鬱
PostgreSQLアンチパターン
まずやっとくPostgreSQLチューニング
あなたの知らないPostgreSQL監視の世界
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Migr8.rb チュートリアル
今すぐ使えるクラウドとPostgreSQL
HAWQをCDHで動かしてみた
Osc2015 hokkaido postgresql-semi-stuructured-datatype
Ivsctonightandday2016winter moringsession awsreinvent2016recap
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
レシピブログのサービス設計と今後の展望
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
35歳でDBAになった私がデータベースを壊して学んだこと
Ad

Similar to PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto (20)

PDF
JTF2021w F3 postgresql frontline
PDF
Chugoku db 17th-postgresql-9.6
PDF
PostgreSQLレプリケーション(pgcon17j_t4)
PDF
20171028 osc-nagaoka-postgre sql-10
PPTX
Prometech Particleworks on Rescale
PDF
20171106 ntt-tx-postgre sql-10
PDF
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
PDF
PostgreSQL 12の話
PDF
Hackers Champloo 2016 postgresql-9.6
PDF
PostgreSQL安定運用のコツ2009 @hbstudy#5
PDF
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
PDF
20171220_hbstudy80_pgstrom
PDF
20191211_Apache_Arrow_Meetup_Tokyo
PDF
M06_DX を担うエンジニア向け Data & AI Analytics プラットフォームの最適解 ~ Azure Synapse 最新機能ご紹介 ~ ...
PDF
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
PDF
Postgre sql update_20170310
PDF
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
PDF
[Japan Tech summit 2017] DAL 003
PPT
[大図解]ピグライフはこう動いている
PPTX
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編
JTF2021w F3 postgresql frontline
Chugoku db 17th-postgresql-9.6
PostgreSQLレプリケーション(pgcon17j_t4)
20171028 osc-nagaoka-postgre sql-10
Prometech Particleworks on Rescale
20171106 ntt-tx-postgre sql-10
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
PostgreSQL 12の話
Hackers Champloo 2016 postgresql-9.6
PostgreSQL安定運用のコツ2009 @hbstudy#5
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
20171220_hbstudy80_pgstrom
20191211_Apache_Arrow_Meetup_Tokyo
M06_DX を担うエンジニア向け Data & AI Analytics プラットフォームの最適解 ~ Azure Synapse 最新機能ご紹介 ~ ...
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
Postgre sql update_20170310
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
[Japan Tech summit 2017] DAL 003
[大図解]ピグライフはこう動いている
Deep Learning Lab - Microsoft Machine Learning meetup 2018/06/27 - 推論編

More from Shigeru Hanada (11)

PDF
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PDF
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PDF
Foreign Data Wrapper Enhancements
PDF
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
PDF
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PDF
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PDF
OSS-DB Goldへの第一歩~実践!運用管理~
PDF
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
PDF
9.3で進化した外部テーブル
PDF
Extending PostgreSQL - PgDay 2012 Japan
PDF
外部データラッパによる PostgreSQL の拡張
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @オープンセミナー香川 2017
Foreign Data Wrapper Enhancements
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
OSS-DB Goldへの第一歩~実践!運用管理~
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
9.3で進化した外部テーブル
Extending PostgreSQL - PgDay 2012 Japan
外部データラッパによる PostgreSQL の拡張

PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto

  • 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_gist Indexes: が必要 "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-# VALUES postgres-# (2, '[2012-06-16 14:00,2012-06-16 14:45)'::tstzrange, 1); INSERT 0 1 postgres=# INSERT INTO reservation (room_id, during, reserver) postgres-# VALUES postgres-# (2, '[2012-06-16 14:30,2012-06-16 14:45)'::tstzrange, 1); ERROR: conflicting key value violates exclusion constraint "reserva tion_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, ["2 012-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) FROM postgres-# (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; PREPARE postgres=# 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.6 HEAD 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に関する情報の公開  Let's Postgres(http://lets.postgresql.jp/)  会員相互および外部との技術的・人間的交流 日本PostgreSQLユーザ会 37