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