TOP /  インフラ /  PostgreSQL最新動向セミナー

PostgreSQL最新動向セミナー | インフラ

講演資料を見るには、プライバシーポリシーに同意して、送付先メールアドレスをご入力しご請求ください。

メールアドレス


法人様向けの資料のため、フリーアドレスをご利用の場合は、会社名、お名前を入力してください。
会社名
お名前

~徹底検証報告~   次期メジャーバージョン PostgreSQL 9.5 の実力 SRA OSS, Inc. 日本支社 高塚 遙 2015-10-06 14:10 ~ 14:50 【PostgreSQL 最新動向セミナー】 Copyright © 2015 SRA OSS, Inc. J1pan All rights reserved.TOC 本講演の内容  PostgreSQL開リリース の概要  PostgreS9.5 新機能の検証報告 講演者について  高塚 遙  SRA OSS, Inc. 日本支社にて  PostgreSQLサポート、 各種クラスタ構築技術支援、  マイグレーション技術支援、 などを担当 Copyright © 2015 SRA OSS, Inc.2Japan All rights reserved.PostgreSQL開発とリリース (1)  開発体制 - 特定のオーナー企業を持たない方式 支援企業 Contributors Fujii Masao Harada Hitoshi Ishii Tatsuo Major Contributors Kaigai Kouhei Suzuki Koichi Core Team : 30~40名 Josh Berkus Tom Lane Peter Eisentraut Magnus Hagander Bruce Momjian Dave Page 開発コミュニティ etc...  ※www.postgresql.org 記載より Copyright © 2015 SRA OSS, Inc. Japan All rights reserve3.PostgreSQL開発とリリース (2)  リリースの歴史 PostgreSQLソースコード行数 4,500,000 ? ! 4,000,000 3,500,000 3,000,000 マテビュー 更新ビュー 更新の レプリケーション 更新FDW 2,500,000 ビスキャンプ 高速化 Windows 64bit データチェックサム 多CPU スケール 行数 2,000,000 1,500,000 PITR、 Windows 4 CPU ウィンドウ関数 1,000,000 スケール 再帰SQL 同期レプリケーション 外部テーブル 高速JSON レプリケーションスロット 500,000 0 2005-11-08 2008-02-04 2010-09-20 2012-09-10 2014-12-18 8.1 8.3 9.0 9.2 9.4 2005-01-19 2006-12-05 2009-07-01 2011-09-12 2013-09-09 20159.5-20 ? 8.0 8.2 8.4 9.1 9.3 9.5 Copyright © 2015 SRA OSS, Inc. Japan All rights reserved. 4PostgreSQL開発とリリース (3)  いつリリースされる?  9.5.x は、仕様確定済み、 9.5 alpha2 がリリース済み  9.5.0 リリース予定は? 2014/6/11 2015/7/1 master 5/15 12/18 9.4.x 9.4beta1 9.4.0 リリース リリース 8/6 9.5.x 9.5alpha2 リリース Copyright © 2015 SRA OSS, Inc. Japan All r5ghts reserved.PostgreSQL 9.5 の新機能 主要な新機能 行単位セキュリティ BRINインデックス トランザクションの巻き戻し pg_rewind コマンド  「挿入または更新」に対応 INSERT ... ON CONFLICT ... 外部テーブルのインポート/継承  集計構文 に対応 GROUPING SETS、CUBE、ROLLUP JSONB型 むけの関数・演算子の拡充 Copyright © 2015 SRA OSS, Inc. Jap6n All rights reserved.行単位セキュリティ(1)  Row Level Security (RLS) と呼ばれる  ポリシー定義に基づきテーブルの行アクセスを制御 ROW LEVEL BYPASSRLS属性: SECURITY 属性: 有 / 無 enable / disable DBロール(ユーザ) ポリシー定義に基づきアクセス制限 テーブル 設定パラメータ force で所有者、 (postgresql.conf) スーパーユーザ に強制アクセス row_security = on / off 制御を実現 / force ポリシー定義 Copyright © 2015 SRA OSS, Inc. Japan All r7ghts reserved.行単位セキュリティ(2) テーブル:t1 GRANT ALL on t1 to user1; id dat lv ALTER TABLE t1 ENABLE ROW LEVEL SECURITY; 101  データ1 (機密) 5 → 従来のアクセス権限は全て「可」に設定し、 102  データ2 1   テーブルに対する RLS を有効に設定。 103  データ3 (公開) 0 104  データ4 1 CREATE POLICY policy1 ON t1 105  データ5 (機密) 5 FOR SELECT TO user1 USING (lv <= 2); CREATE POLICY policy2 ON t1 FOR INSERT TO user1 WITH CHECK (lv = 1); USING 指定条件が暗黙に適用 CHECK 指定条件を満たさない db1=> SELECT * FROM t1 のでエラーになる  WHERE id <= 103; db1=> INSERT INTO t1 VALUES id | dat | lv (106, 'データ6', 0); -----+-------------+------- 102 | データ2 | 1 ERROR: new row violates 103 | データ3 (公開) | 0 row level security policy (2 rows) for "t1" Copyright © 2015 SRA OSS, Inc. Japan All rights8reserved.BRIN インデックス(1)  新しいインデックス方式「brin」が追加された  いくつかのブロック(=ページ)の塊ごとに最大値・最小値を保持する 最大: '2013-12-05' 最小: '2013-01-23' 本SELECTでは、 SELECT * FROM t2 ブロック128・・・255 は WHERE dt >= '2015-10-01'; 読み飛ばし可能! 読み飛ばせるブロックが分かるとき、 Copyright © 2015 SRA OSS, Inc. Japan All 9ights reserved.BRINインデックス(2)  Btreeインデックスとの比較  作成時間とインデックスサイズを 10万行程度のデータで実測 300 インデックス作成時オプション 250 pages_per_range にて、 何ブロックをインデックス上の ] 200 1項目とするかを指定。 s 所要時間 128 はデフォルト。 [ 150 6分の 1 単調増加データ 間 ランダム順データ 成 作 100 10万件データの整数カラムにて 50 インデックスをサイズを比較 2500 0 B-Tree BRIN 2000 ] [1500 インデックス作成時間を比較 量 サイズ タ1000 40分の 1 ー デ 500 0 B-Tree BRIN(pages_per_range=128) Copyright © 2015 SRA OSS, Inc. Japan All rights reserv10.BRINインデックス(2)  Btreeインデックスとの比較 - 検索所要時間  1 から 100万の昇順整数データを持つテーブルで条件検索  WHERE c = 500000  WHERE c BETWEEN 100000 AND 200000  WHERE c BETWEEN 100000 AND 600000 Btree、BRIN とも 「ビットマップイン 250 デックススキャン」 の実行プランになる。 200 BRINが若干速い。 s 150 [ 間 1件抽出は インデックスなし 時 100 Btree が B-Tree 索 最も速い。 検 50 BRIN 0 ただし、 行の物理配置が between 100000 and 200000 ランダムなカラムだと、 = 500000 between 100000 and 600000 検索条件 BRIN は効果的に 働かない。 Copyright © 2015 SRA OSS, Inc. Japan All right11reserved.トランザクション巻き戻し - pg_rewind (1)  昇格時点より先に進んだデータベースクラスタの問題 サーバ1 サーバ2 サーバ3 LSN プライマリ スタンバイ スタンバイ (xlog location) 0/11030 0/11010 0/11020 非同期ストリーミングレプリケーション 0/11000010 時点で タイムライン切り替え 昇格時点よりも先に 進んだデータは新たな サーバ1 サーバ2 サーバ3 プライマリのスタンバイ 障害停止 昇格 として使用することとが プライマリ 新プライマリ スタンバイ できない。 0/11030 0/11025 0/11020 再度ベースバックアップ取得 をするしかなかった Copyright © 2015 SRA OSS, Inc. Japan All 12ghts reserved.トランザクション巻き戻し - pg_rewind (2)  pg_rewind コマンド  プライマリとしたいサーバのタイムライン切り替え時点まで、ローカル側 のデータベースクラスタのトランザクションを巻き戻す [server1]$ pg_ctl start クラッシュ終了後なら、 [server1]$ pg_ctl stop 起動・停止をしておく [server1]$ pg_rewind -D $PGDATA\ --source-server='host=server2 port=5432 user=postgres' [server1]$ vi $PGDATA/recovery.conf [server1]$ pg_ctl start [server3]$ pg_ctl stop [server3]$ pg_rewind -D $PGDATA \ --source-server='host=server2 port=5432 user=postgres' [server3]$ vi $PGDATA/recovery.conf [server3]$ pg_ctl start 必要な設定パラメータ (postgresql.conf) full_page_writes = on (デフォルト) wal_log_hints = on  (デフォルトは off) Copyright © 2015 SRA OSS, Inc. Japan All righ13 reserved.挿入または更新 - INSERT ... ON CONFLICT (1)  よくある処理パターン  新データ[id=101 hn='TARO' ml='taro@example.org']につき id = 101 のレコードが無いなら INSERT id = 101 のレコードが在るなら UPDATE  以下のように記述できる INSERT INTO t3 VALUES (101, 'TARO', 'taro@example.org') ON CONFLICT (id) DO UPDATE SET hn = EXCLUDED.hn, ml = EXCLUDED.ml;  従来はアプリ側で場合分けを実装  あるいは以下のような WITH構文による技巧により実現 WITH val AS (SELECT ((101, 'TARO', 'taro@example.org')::t3).*), upd AS (UPDATE t3 SET hn = val.hn, ml='taro@example.org' FROM val RETURNING t3.id) INSERT INTO t3 SELECT * FROM val WHERE id NOT IN (SELECT id FROM upd); Copyright © 2015 SRA OSS, Inc. Japan All r14hts reserved.挿入または更新 - INSERT ... ON CONFLICT (2)  3つの方式を pgbench で比較 同時 500接続で「挿入または更新」を実行  INSERT...ON CONFLICT pgbench -f test1.sql -c 500 -t 100 -n db1  WITH...INSERT  PL/pgSQL プロシージャ まず、UPDATEして、 「挿入または更新」各方式の性能比較 0件なら INSERT、 ユニーク制約違反なら、 ROLLBACK して 4500 4000 リトライする方式。 3500 最も好成績 3000 2500 tps 2000 デッドロックが 1500 多発するため TPS=1.0 程度 1000 500 0 INSERT...ON CONFLICTWITH...INSERT PL/pgSQLプロシージャ Copyright © 2015 SRA OSS, Inc. Japan All rights reserv15.外部テーブルのインポート  IMPORT FOREIGN SCHEMA 命令が追加  外部テーブルをスキーマ単位で一括登録できる db1=> CREATE SCHEMA remote; db1=> IMPORT FOREIGN SCHEMA apscm FROM SERVER foreign_server INTO remote; db1=> \dE remote.* List of relations Schema | Name | Type | Owner --------+------------+----------------+------- remote | customers | foreign table | apuser remote | products | foreign table | apuser ...  従来はテーブル毎に CREATE FOREIGN TABLE が必要であった  各カラムの対応するデータ型をデフォルト通りでなく個別に設定するなら、 引き続き、CREATE FOREIGN TABLE を使うことになる Copyright © 2015 SRA OSS, Inc. Japan All ri16ts reserved.外部テーブルの継承  外部テーブルとローカルテーブルで継承が可能に  パーティショニングと分散格納の組み合わせが可能になる  従来から、テーブル継承はテーブルパーティショニング実現に利用されていた サーバ1 並列問い合わせ機能は 未だ実装されていない 親テーブル ことに注意。 pt1 サーバ2 サーバ3 サーバ4 子テーブル 子テーブル 子テーブル ct2 ct3 ct4 コマンド例: (s1db1 と s2db1 は各々リモートテーブル用のスキーマ) s2db1=> CREATE TABLE ct2 () INHERITS (s1db1.pt1); s1db1=> ALTER TABLE s2db1.ct2 INHERIT pt1; Copyright © 2015 SRA OSS, Inc. Japan 17l rights reserved.集計構文  以下の集計構文に対応 GROUP BY GROUPING SETS ( ... ) GROUP BY ROLLUP ( ... ) GROUP BY CUBE ( ... )  各カテゴリ組み合わせ毎の小計を一度に出力させることができる  SQL99 に規定されており、他DBMS の実装と大きな違いはない テーブル:t_sales db1=> SELECT customer,product,sum(num) FROM t_sales customer product num GROUP BY GROUPING SETS ((customer), (customer, product), ()); Tom egg 10 Tom apple 20 customer | product | sum Jhon egg 15 ----------+---------+----- Jhon egg 5 John | egg | 20 John | | 20 CUBE (c1, c2, ..) : Tom | apple | 20  指定カラムの全組み合わせ Tom | egg | 10 Tom | | 30 ROLLUP (c1, c2, ...) : | | 50 (6 rows)  指定カラム順に包含する組み合わせ Copyright © 2015 SRA OSS, Inc. Japan All rights 18served.JSONB型むけ関数・演算子の拡充(1)  JSONB データの部分更新が容易になる  項目が無ければ追加、あれば右辺値で上書きする。 db1=> SELECT '{"name": "John", "age": 25}'::jsonb || '{"age": 26}'::jsonb; ?column? ----------------------------- {"age": 26, "name": "John"}  JSONB のオブジェクト要素、配列要素を削除 db1=> SELECT '{"name": "John", "age": 25}'::jsonb - 'age'; ?column? ------------------ {"name": "John"} db1=> SELECT '["apple", "orange", "melon"]'::jsonb - 1; ?column? -------------------- ["apple", "melon"] Copyright © 2015 SRA OSS, Inc. Japan All rig19s reserved.JSONB型むけ関数・演算子の拡充(2)  深い位置にある要素の削除 db1=> SELECT '{"name": "John", "contact": {"phone": "0123", "email":"John@foohoge.com"}}'::jsonb #- '{contact, email}'::text[]; ?column? ------------------------------------------------ {"name": "John", "contact": {"phone": "0123"}}  指定パスに値があるかに応じた動作  第4引数 true なら 「あれば値の更新」 「無ければ挿入」  第4引数 false なら 「あれば値の更新」 「無ければ何もしない」 db1=> SELECT jsonb_set('{"name": "James", "contact": {"phone": "01234 567890", "fax": "01987543210"}}'::jsonb, '{contact,skype}', '"myskypeid"'::jsonb, true); Copyright © 2015 SRA OSS, Inc. Japan All rig20s reserved.まとめ  PostgreSQL開発の概要についてお話いたしました。  PostgreSQL 9.5 の新機能について紹介いたしました。  各機能の詳細については、9.5 alpha2版のマニュアル(英語)を参照い ただくことができます。  SRA OSS, Inc. Webサイトの技術情報ページで弊社による検証レ ポートも今月中には公開予定です。 ご清聴ありがとうございました。 ご質問を承ります。 Copyright © 2015 SRA OSS, Inc. Japa21All rights reserved. オープンソースとともに URL: http://www.sraoss.co.jp/ E-mail: sales@sraoss.co.jp Tel: 03-5979-2701 Copyright © 2015 SRA OSS, Inc. Japan All rights rese22ed.

IT業界の改革にご協力いただけませんか?

本サイトは、株式会社オープンソース活用研究所がプロデュースする、中小IT企業による”本気”の情報提供セミナー「マジセミ」の結果レポートページです。「マジセミ」は、次を目的として活動しています。

我々はITエンジニアが、今よりももっと「誇り」と「喜び」をもって仕事をし、今よりももっと企業や社会に貢献できる、そんなIT業界を創りたいと考えています。

そのためには、技術をもった中小のIT企業がもっと元気になる必要がある。その為には、技術をもった中小のIT企業を、もっと皆様に知って頂く必要がある、と考えました。

株式会社オープンソース活用研究所
代表取締役所長 寺田雄一

本当かウソか、あなたが見極めてください。

もし、我々のこの活動にご賛同していただけるのであれば、ぜひ下のセミナーに参加してください。

「なんだ、結局ただの売り込みセミナーじゃないか」

もしそう感じたら、アンケートなり、あなたのFacebookなりに、そのままお書き頂き、拡散して頂いて構いません。

参加者からのお褒めの言葉、お叱りの言葉が、我々中小IT企業を成長させ、それが日本のIT業界を変えていくのだと、強く確信しています。

あなたの行動が、日本のIT業界を変えるのです。

日程を確認していただき、ご興味のあるセミナータイトルをクリックしてください。

「マジセミ」のFacebookページ

今後のセミナー情報などを提供させていただきたますので、「マジセミ」のFacebookページに「いいね!」をお願いします。

セミナー講演企業のFacebookページ

今後のセミナー情報などを提供させていただきたますので、セミナー講演企業のFacebookページに「いいね!」をお願いします。

日本のIT業界を変えるためのアクション、ありがとうございました!