• 検索結果がありません。

TOC 本講演の内容 PostgreSQL 開発とリリースの概要 PostgreSQL 9.5 新機能の検証報告 講演者について 高塚遙 SRA OSS, Inc. 日本支社にて PostgreSQL サポート 各種クラスタ構築技術支援 マイグレーション技術支援 などを担当 Copyright 20

N/A
N/A
Protected

Academic year: 2021

シェア "TOC 本講演の内容 PostgreSQL 開発とリリースの概要 PostgreSQL 9.5 新機能の検証報告 講演者について 高塚遙 SRA OSS, Inc. 日本支社にて PostgreSQL サポート 各種クラスタ構築技術支援 マイグレーション技術支援 などを担当 Copyright 20"

Copied!
22
0
0

読み込み中.... (全文を見る)

全文

(1)

~徹底検証報告~

 

次期メジャーバージョン

PostgreSQL 9.5 の実力

SRA OSS, Inc. 日本支社 高塚 遙

2015-10-06 14:10 ~ 14:50

PostgreSQL 最新動向セミナー】

(2)

TOC

本講演の内容

 PostgreSQL開発と

リリース

の概要

PostgreSQL

9.5 新機能の検証報告

講演者について

 高塚 遙

 

SRA OSS, Inc. 日本支社にて

 

PostgreSQLサポート、 各種クラスタ構築技術支援、

 マイグレーション技術支援、 などを担当

(3)

PostgreSQL開発とリリース (1)

Contributors

Major Contributors

Core Team

Josh Berkus Tom Lane Peter Eisentraut Magnus Hagander Bruce Momjian Dave Page

支援企業

開発コミュニティ

Fujii Masao Harada Hitoshi Ishii Tatsuo Kaigai Kouhei Suzuki Koichi : 30~40名 etc...

 開発体制 - 特定のオーナー企業を持たない方式

(4)

2005-01-19 2005-11-08 8.1 2006-12-05 2008-02-04 8.3 2009-07-01 2010-09-20 9.0 2011-09-12 2012-09-10 9.2 2013-09-09 2014-12-18 9.4 2015-12-20 ? 0 500,000 1,000,000 1,500,000 2,000,000 2,500,000 3,000,000 3,500,000 4,000,000 4,500,000 PostgreSQL ソースコード行数 行数

PostgreSQL開発とリリース (2)

 リリースの歴史

更新の 高速化 ビットマップ スキャン

? !

PITR、 Windows スケール4 CPU ウィンドウ関数 再帰SQL 多CPU スケール 同期レプリケーション 外部テーブル レプリケーション Windows 64bit 高速JSON レプリケーションスロット マテビュー 更新ビュー 更新FDW データチェックサム

(5)

PostgreSQL開発とリリース (3)

 いつリリースされる?

 9.5.x は、仕様確定済み、 9.5 alpha2 がリリース済み

 9.5.0 リリース予定は?

master

2015/7/1

2014/6/11

9.4.x

12/18

9.4.0

リリース

9.5.x

8/6

9.5alpha2

リリース

5/15

9.4beta1

リリース

(6)

PostgreSQL 9.5 の新機能

主要な新機能

 行単位セキュリティ

 BRINインデックス

 トランザクションの巻き戻し

pg_rewind コマンド

 「挿入または更新」に対応

INSERT ... ON CONFLICT ...

 外部テーブルのインポート/継承

 集計構文 に対応

GROUPING SETS、CUBE、ROLLUP

 JSONB型 むけの関数・演算子の拡充

(7)

行単位セキュリティ(1)

 Row Level Security (RLS) と呼ばれる

 ポリシー定義に基づきテーブルの行アクセスを制御

DBロール(ユーザ) BYPASSRLS属性: 有 / 無 テーブル 設定パラメータ (postgresql.conf) row_security = on / off / force ポリシー定義 ROW LEVEL SECURITY 属性: enable / disable ポリシー定義に基づきアクセス制限 force で所有者、 スーパーユーザ に強制アクセス 制御を実現

(8)

行単位セキュリティ(

2)

id

dat

lv

101

 データ1 (機密)

5

102

 データ2

1

103

 データ3 (公開)

0

104

 データ4

1

105

 データ5 (機密)

5

CREATE POLICY policy1 ON t1 FOR SELECT TO user1

USING (lv <= 2); テーブル:t1 db1=> SELECT * FROM t1  WHERE id <= 103; id | dat | lv 102 | データ2 | 1 103 | データ3 (公開) | 0

USING 指定条件が暗黙に適用

CREATE POLICY policy2 ON t1 FOR INSERT TO user1

WITH CHECK (lv = 1); GRANT ALL on t1 to user1;

ALTER TABLE t1 ENABLE ROW LEVEL SECURITY;

db1=> INSERT INTO t1 VALUES (106, 'データ6', 0); ERROR: new row violates row level security policy for "t1"

CHECK 指定条件を満たさない

のでエラーになる

→ 従来のアクセス権限は全て「可」に設定し、

  テーブルに対する

RLS を有効に設定。

(9)

BRIN インデックス(1)

 新しいインデックス方式「brin」が追加された

 いくつかのブロック(=ページ)の塊ごとに最大値・最小値を保持する

SELECT * FROM t2

WHERE dt >= '2015-10-01';

本SELECTでは、 ブロック128・・・255 は 読み飛ばし可能! インデックスからスキャンするとき、 読み飛ばせるブロックが分かる 最大: '2013-12-05' 最小: '2013-01-23'

(10)

BRINインデックス(2)

 Btreeインデックスとの比較

 作成時間とインデックスサイズを 10万行程度のデータで実測

B-Tree BRIN 0 50 100 150 200 250 300 単調増加データ ランダム順データ 作 成 時 間 [m s ] B-Tree BRIN(pages_per_range=128) 0 500 1000 1500 2000 2500 デ ー タ 量 [k B ] サイズ 40分の 1 10万件データの整数カラムにて インデックスをサイズを比較 インデックス作成時間を比較 所要時間 6分の 1 インデックス作成時オプション pages_per_range にて、 何ブロックをインデックス上の 1項目とするかを指定。 128 はデフォルト。

(11)

= 500000 between 100000 and 200000 between 100000 and 600000 0 50 100 150 200 250 インデックスなし B-Tree BRIN 検索条件 検 索 時 間 [m s ]

BRINインデックス(2)

 Btreeインデックスとの比較 - 検索所要時間

 1 から 100万の昇順整数データを持つテーブルで条件検索

 WHERE c = 500000

 WHERE c BETWEEN 100000 AND 200000  WHERE c BETWEEN 100000 AND 600000

1件抽出は Btree が 最も速い。 Btree、BRIN とも 「ビットマップイン デックススキャン」 の実行プランになる。 BRINが若干速い。 ただし、 行の物理配置が ランダムなカラムだと、 BRIN は効果的に 働かない。

(12)

トランザクション巻き戻し

- pg_rewind (1)

 昇格時点より先に進んだデータベースクラスタの問題

サーバ1 プライマリ サーバ2 スタンバイ 0/11000030 非同期ストリーミングレプリケーション 0/11000010 サーバ1 プライマリ サーバ2 新プライマリ 0/11000030 0/11000025 サーバ3 スタンバイ 0/11000020 昇格 サーバ3 スタンバイ 0/11000020 障害停止 LSN (xlog location) 昇格時点よりも先に 進んだデータは新たな プライマリのスタンバイ として使用することとが できない。 0/11000010 時点で タイムライン切り替え

再度ベースバックアップ取得

(13)

トランザクション巻き戻し

- 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)

(14)

挿入または更新

- INSERT ... ON CONFLICT (1)

 よくある処理パターン

 新データ[id=101 hn='TARO' ml='taro@example.org']につき

id = 101 のレコードが無いなら INSERT

id = 101 のレコードが在るなら UPDATE

 以下のように記述できる

 従来はアプリ側で場合分けを実装

 あるいは以下のような 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);

INSERT INTO t3 VALUES (101, 'TARO', 'taro@example.org')

ON CONFLICT (id)

(15)

挿入または更新

- INSERT ... ON CONFLICT (2)

 3つの方式を pgbench で比較

 INSERT...ON CONFLICT

 WITH...INSERT

 PL/pgSQL プロシージャ

INSERT...ON CONFLICT WITH...INSERT PL/pgSQL プロシージャ

0 500 1000 1500 2000 2500 3000 3500 4000 4500 「挿入または更新」各方式の性能比較 tps デッドロックが 多発するため TPS=1.0 程度 まず、UPDATEして、 0件なら INSERT、 ユニーク制約違反なら、 ROLLBACK して リトライする方式。 pgbench -f test1.sql -c 500 -t 100 -n db1 最も好成績 同時 500接続で「挿入または更新」を実行

(16)

外部テーブルのインポート

 IMPORT FOREIGN SCHEMA 命令が追加

 外部テーブルをスキーマ単位で一括登録できる

 従来はテーブル毎に CREATE FOREIGN TABLE が必要であった

 各カラムの対応するデータ型をデフォルト通りでなく個別に設定するなら、

引き続き、CREATE FOREIGN TABLE を使うことになる

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

...

(17)

外部テーブルの継承

 外部テーブルとローカルテーブルで継承が可能に

 パーティショニングと分散格納の組み合わせが可能になる

 従来から、テーブル継承はテーブルパーティショニング実現に利用されていた サーバ2 子テーブル ct2 サーバ3 子テーブル ct3 サーバ4 子テーブル ct4 サーバ1 親テーブル pt1 並列問い合わせ機能は 未だ実装されていない ことに注意。

s2db1=> CREATE TABLE ct2 () INHERITS (s1db1.pt1);

s1db1=> ALTER TABLE s2db1.ct2 INHERIT pt1;

(18)

集計構文

 以下の集計構文に対応

GROUP BY GROUPING SETS ( ... )

GROUP BY ROLLUP ( ... )

GROUP BY CUBE ( ... )

 各カテゴリ組み合わせ毎の小計を一度に出力させることができる

 SQL99 に規定されており、他DBMS の実装と大きな違いはない

customer product num

Tom egg 10

Tom apple 20

Jhon egg 15

Jhon egg 5

テーブル:t_sales db1=> SELECT customer,product,sum(num)

FROM t_sales

GROUP BY GROUPING SETS

((customer), (customer, product), ()); customer | product | sum

---+---+--- John | egg | 20 John | | 20 Tom | apple | 20 Tom | egg | 10 Tom | | 30 | | 50 CUBE (c1, c2, ..) :  指定カラムの全組み合わせ ROLLUP (c1, c2, ...) :

(19)

JSONB型むけ関数・演算子の拡充(1)

 JSONB データの部分更新が容易になる

 項目が無ければ追加、あれば右辺値で上書きする。

 JSONB のオブジェクト要素、配列要素を削除

db1=> SELECT '{"name": "John", "age": 25}'::jsonb || '{"age": 26}'::jsonb;

?column?

{"age": 26, "name": "John"}

db1=> SELECT '{"name": "John", "age": 25}'::jsonb - 'age'; ?column?

{"name": "John"}

db1=> SELECT '["apple", "orange", "melon"]'::jsonb - 1; ?column?

["apple", "melon"]

(20)

JSONB型むけ関数・演算子の拡充(2)

 深い位置にある要素の削除

 指定パスに値があるかに応じた動作

 第4引数 true なら 「あれば値の更新」 「無ければ挿入」

 第4引数 false なら 「あれば値の更新」 「無ければ何もしない」

db1=> SELECT '{"name": "John", "contact": {"phone": "0123", "email":"John@foohoge.com"}}'::jsonb

#- '{contact, email}'::text[]; ?column?

{"name": "John", "contact": {"phone": "0123"}}

db1=> SELECT jsonb_set('{"name": "James", "contact": {"phone": "01234 567890",

"fax": "01987543210"}}'::jsonb, '{contact,skype}',

'"myskypeid"'::jsonb, true);

(21)

まとめ

 PostgreSQL開発の概要についてお話いたしました。

PostgreSQL 9.5 の新機能について紹介いたしました。

 各機能の詳細については、9.5 alpha2版のマニュアル(英語)を参照い

ただくことができます。

 SRA OSS, Inc. Webサイトの技術情報ページで弊社による検証レ

ポートも今月中には公開予定です。

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

ご質問を承ります。

(22)

オープンソースとともに

URL: http://www.sraoss.co.jp/

E-mail: sales@sraoss.co.jp

参照

関連したドキュメント

○水環境課長

支援級在籍、または学習への支援が必要な中学 1 年〜 3

(2) 令和元年9月 10 日厚生労働省告示により、相談支援従事者現任研修の受講要件として、 受講 開始日前5年間に2年以上の相談支援

11月7日高梁支部役員会「事業報告・支部活動報告、多職種交流事業、広報誌につい

要請 支援 要請 支援 派遣 支援 設置 要請 要請

主任相談支援 専門員 として配置 相談支援専門員

東日本大震災被災者支援活動は 2011 年から震災支援プロジェクトチームのもとで、被災者の方々に寄り添

また、船舶検査に関するブロック会議・技術者研修会において、