Rabbit Slide Show

PGroonga運用技法 ~PGroongaのWALを放置していませんか?~

2020-11-13

Description

PostgreSQL で使用できる全文検索の拡張に PGroonga という高速で高性能な拡張があります。 PGroongaはインストールも難しくなく、インデックスの設定もそれほど複雑ではないので、高速な全文検索を容易に利用できますが、 レプリケーションを使用した運用においては注意が必要な点があります。 本発表では、後のトラブルを防ぐために知っておいたほうが良いことや、トラブルを防止するためのメンテナンス方法について紹介します。

Text

Page: 1

PGroonga運用技法
~PGroongaのWALを
放置していませんか?~
クリアコード
堀本泰弘
PostgreSQL Conference Japan 2020
2020-11-13
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 2

自己紹介
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 3

今日のテーマ
PGroongaの
WALを
うまく使おう
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 4

PGroongaの紹介
の前に...
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 5

PGroongaの紹介
(知らない人向け)
PGroonga紹介
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 6

PGroongaの紹介
PGroongaとは?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 7

PGroongaの紹介
PostgreSQL経由
で
高速な全文検索
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 8

PGroongaの特徴
1. 簡単に使える
2. 速い
3. 全言語対応
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 9

PGroongaの使い方
簡単に使える
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 10

PGroongaの使い方
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 11

PGroongaの使い方
実際に全文検索
してみましょう
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 12

実行例:テーブル定義
CREATE TABLE entries (
title text,
content text
);
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 13

実行例:
インデックス定義
-- 全文検索用インデックス
CREATE INDEX entries_full_text_search
ON entries
-- 「 USING pgroonga 」 = 「 PGroonga を使う」
USING pgroonga (title, content);
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 14

実行例:データ挿入
-- 普通に挿入するだけでよい
INSERT INTO entries
VALUES ('PGroongaで高速全文検索!',
'高速に全文検索したいですね!');
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 15

実行例:全文検索
SELECT title FROM entries
WHERE
-- &@~で全文検索
-- 「検索」と「高速」を AND 検索
title &@~ '検索 高速' OR
content &@~ '検索 高速';
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 16

実行例:LIKE
SELECT title FROM entries
WHERE
-- LIKE でもインデックスが効く
--=アプリを書き換えずに高速化可能
-- ただし&@~より性能が落ちる
title LIKE '%検索%' OR
content LIKE '%検索%';
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 17

PGroongaの使い方
簡単ですね!
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 18

PGroongaの速度
速い
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 19

PGroongaの速度
追加されたデータ
は即時検索可能
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 20

PGroongaの速度
つまり
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 21

PGroongaの速度
検索可能になるの
が速い
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 22

PGroongaの速度
更新中も検索性能
が落ちない
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 23

PGroongaの速度
ヒット数が多くて
も検索性能が
落ちない
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 24

PGroongaの速度
PGroongaは
安定して速い
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 25

PGroongaの速度
もちろん
検索も速い
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 26

PGroongaの速度
ベンチマーク
https://pgroonga.github.io/ja/
reference/pgroonga-versus-pg-
bigm.html
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 27

PGroongaの特徴
全言語対応
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 28

PGroongaの特徴
さらに
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 29

PGroongaの特徴
継続してメンテナ
ンスされている
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 30

PGroongaの特徴
PostgreSQL13
にも対応!
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 31

PGroongaの紹介
以上、PGroonga
の紹介でした
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 32

今日のテーマ
本題に入ります
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 33

今日のテーマ
PGroongaの
WALを
うまく使おう
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 34

WALとは?
Write Ahead
Log
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 35

WALとは?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 36

WALとは?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 37

WALとは?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 38

WALの使い方
どのように
使うのか?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 39

WALの使い方
ポイントイン
タイムリカバリー
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 40

WALの使い方
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 41

WALの使い方
ストリーミング
レプリケーション
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 42

WALの使い方
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 43

PGroongaのWAL
PGroongaも
WALが使える
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 44

PGroongaのWAL
WALから
インデックスの
復元ができる
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 45

PGroongaのWAL
メリット
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 46

PGroongaのWAL
インデックスの
復旧時間を短縮
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 47

PGroongaのWAL
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 48

PGroongaのWAL
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 49

PGroongaのWAL
REINDEX
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 50

PGroongaのWAL
REINDEXは
時間がかかる
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 51

PGroongaのWAL
どうやって
使うの?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 52

PGroongaのWAL
簡単です
ただ使うだけ
なら
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 53

PGroongaのWAL
pgroonga.enable_wal = on
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 54

PGroongaのWAL
PostgreSQLのWALと同じように
復旧に使える
ポイントインタイムリカバリー
ストリーミングレプリケーション
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 55

PGroongaのWAL
しかし
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 56

PGroongaのWAL
ただ使っている
だけだと、
困ることがある
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 57

PGroongaのWALの注意点
1. WALが適用できないケース
がある
2. 定期的なメンテナンスが必要
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 58

PGroongaのWALの注意点
WALが適用
できないケース
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 59

PGroongaのWALの注意点
クラッシュセーフではない
インデックス更新中のクラッシュで
インデックスが破損する(ことがある)
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 60

PGroongaのWALの注意点
インデックス破損の状態では、
WALを適用できない(ことがある)
この場合はREINDEXを使って復元
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 61

PGroongaのWALの注意点
定期的な
メンテナンス
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 62

PGroongaのWALの注意点
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 63

PGroongaのWALの注意点
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 64

PGroongaのWALの注意点
なぜ?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 65

ファイルサイズ増加の原因
原因はPGroonga
のWAL
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 66

ファイルサイズ増加の原因
PGroongaの
WALは削除しな
いと
増え続ける
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 67

ファイルサイズ増加の原因
つまり
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 68

ファイルサイズ増加の原因
1. PGroongaのWALが有効
2. 何もせずにずっと運用している
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 69

ファイルサイズ増加の原因
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 70

PGroongaのWALの運用方法
なので
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 71

PGroongaのWALの運用方法
定期的な
メンテナンス
が必要
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 72

PGroongaのWALの運用方法
ファイルサイズの
増加を防ぐには?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 73

PGroongaのWALの運用方法
1. REINDEXによるインデックス
再構築
2. WALを定期的に削除
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 74

REINDEX
REINDEXすると、インデックス
を0から再生成
古いインデックスは、VACUUM
時に削除
このときにWALも削除される
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 75

REINDEX
時間がかかる
REINDEX中は検索、更新がブ
ロックされる
手間は少ない
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 76

WALの定期的な削除
PGroongaのWALはSQLで削除
できる
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 77

WALの定期的な削除
SELECT pgroonga_wal_truncate('インデックス名');
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 78

WALの定期的な削除
手間がかかる
テーブルのロックが必要
データの更新ができない
明示的なWALの適用が必要
REINDEXより短時間
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 79

WALの定期的な削除
明示的なWALの適用が必要
単純にWAL削除すると、未適用のWAL
まで削除してしまう可能性がある
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 80

PGroongaのWALの運用方法
なので
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 81

PGroongaのWALの運用方法
明示的にWALを
適用する
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 82

PGroongaのWALの運用方法
SELECT pgroonga_wal_apply('インデックス名');
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 83

PGroongaのWALの運用方法
ストリーミング
レプリケーション
構成の場合
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 84

PGroongaのWALの運用方法
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 85

PGroongaのWALの運用方法
全ての
セカンダリーDB
でWALを適用
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 86

PGroongaのWALの運用方法
1. プライマリーDBでテーブルを
ロック
2. 全てのセカンダリーDBでWAL
を適用
3. プライマリーDBでWALを削除
4. テーブルのロックを解除
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 87

メンテナンス方法の選択
1. REINDEXによるインデックス
再構築
2. WALを定期的に削除
のどちらが良いのか?
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 88

メンテナンス方法の選択
REINDEX
時間がかかる
REINDEX中は検索、更新がブロッ
クされる
ブロックせずにREINDEXする方法もある
手間は少ない
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 89

メンテナンス方法の選択
REINDEX CONCURRENTLY
PostgreSQL 12 以降で使える
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 90

メンテナンス方法の選択
インデックスの構築にかなり
時間がかかる
インデックス構築中は
パフォーマンスが低下する
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 91

メンテナンス方法の選択
WALの定期的な削除
手間がかかる
テーブルのロックが必要
データの更新ができない
明示的なWALの適用が必要
REINDEXより短時間
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 92

メンテナンス方法の選択
REINDEX向きのケース
長時間のサービス停止が許容できる
例えば夜間に実行するなど
テーブルが小さい
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 93

メンテナンス方法の選択
WALの削除向きのケース
長時間のサービス停止が難しい
テーブルが大きい
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 94

PostgreSQLのWAL
PostgreSQLのWALはこのような
作業は必要ない。
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 95

PostgreSQLのWAL
PostgreSQLはWALの最大サイズ
を制御できる
max_wal_size
wal_keep_segments
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 96

PostgreSQLのWAL
PGroongaには、PostgreSQLと
同程度の機能はまだない。
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 97

PostgreSQLのWAL
今後、改善予定
PostgreSQLと同じような仕組みを追加
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 98

まとめ
PGroongaの
WALを
うまく使うことが
できました!!
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 99

最後に
PGroongaについての疑問等は、
GitHub、Gitterにて
ドキュメントも充実
https://pgroonga.github.io/ja/
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Page: 100

最後に
より突っ込んだお話がしたい場合は
↓↓
問い合わせ先:
https://www.clear-code.com/contact/
PGroonga運用技法 - ~PGroongaのWALを 放置していませんか?~
Powered by Rabbit 3.0.0

Other slides