Slide 1

Slide 1 text

RDB(ぽすぐれ)チューニング入門

Slide 2

Slide 2 text

目次 1. RDBチューニング_戦略編 2. RDBチューニング_戦術編 3. まとめ 4. 補足

Slide 3

Slide 3 text

RDBチューニング_戦略編 ● 早めに削る ● 効率的に削る ● チートで削る

Slide 4

Slide 4 text

RDBチューニング_戦略編 ● ep. 0: 遅いクエリはEXPLAINで実行計画を見る ○ 遅い原因を特定してから適切な対応をする ○ そもそも遅いクエリを検知できないといけない→スロークエリの監視をする ● 早めに削る ● 効率的に削る ● チートで削る

Slide 5

Slide 5 text

RDBチューニング_戦術編 ● 早めに削る ○ テーブルを小さくする ■ テーブル分割 ● パーティション(RANGE・LIST・HASH) ● シャーディング ○ SQLの評価順を意識して削る(細かいとこは割愛) ■ FROM→サブクエリとかとか ■ ON, JOIN ■ WHERE ■ GROUP BY ■ HAVING ■ SELECT ■ DISTINCT ■ ORDER BY ■ LIMIT

Slide 6

Slide 6 text

RDBチューニング_戦術編 ● 早めに削る ● 効率的に削る ○ joinしない→サマリテーブル(=非正規化) ○ 不要データを削ぐ ■ ON句、WHERE句 ■ SELECT句でカラム選択 ○ パーティショニング ○ ページネーション ● チートで削る

Slide 7

Slide 7 text

RDBチューニング_戦術編 ● 早めに削る ● 効率的に削る ● チートで削る ○ クエリ呼び出しを減らす ■ アプリケーション側での制御 ○ indexを張る ■ 複合indexのカラム順番大事→ユースケースを意識(参考) ● CREATE INDEX hoge_index ON fuga USING btree (c3, c1, c2 DESC) ■ カバリングインデックス ○ RDBMSのパラメータチューニング(参考:DBサーバのスペックで推奨値を算出) ■ shared_buffers、work_mem、effective_cache_sizeとかがパフォーマンス直結 ○ お金で解決(💸👋) ■ DBサーバのスペック上げる ■ リードレプリカを増やす ○ RDBを利用しない ■ NoSQL ■ NewSQL(SQLがインターフェース)

Slide 8

Slide 8 text

まとめ ● 戦略を立てるの大事 ○ 初手index張って改善しようとしてあまりうまく行かなかった ■ 敵を知って戦う準備を整える ● 調査と泥臭い検証 ○ 実行計画見よう ○ 何か試す→実行計画見よう ■ データ量によっても実行計画が変わる→統計情報を定期的にアップデート

Slide 9

Slide 9 text

補足 ● 機械学習を利用したパラメータチューニングとかもあるらしい ○ https://pgecons-sec-tech.github.io/tech-report/html_wg3_ml_tuning/wg3_ml_tun ing.html

Slide 10

Slide 10 text

参考 ● PostgreSQL 日本語ドキュメント ● [富士通] PostgreSQL技術インデックス ● 複合indexの正しい順序 ● Where狙いのキー、order by狙いのキー ● PostgreSQLの実行計画を読み解くための参考資料集