先日広島にて開催された OSC 2019 Hiroshima に参加してきました!
自分が JPUG中国支部長 になってから 毎年の参加で、今年で3回目になります。
今回の関わり
今回は ブース出典とPostgreSQLに関する本の提供を行いました。
本に関しては 以下 2冊 を提供させて頂きました。
失敗から学ぶRDBの正しい歩き方 (Software Design plus)
- 作者: 曽根壮大
- 出版社/メーカー: 技術評論社
- 発売日: 2019/03/06
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで
- 作者: 近藤雄太,正野裕大,坂井潔,鳥越淳,笠原辰仁,石井達夫
- 出版社/メーカー: 翔泳社
- 発売日: 2019/10/04
- メディア: 単行本
- この商品を含むブログを見る
当日のデモの内容は 後日行われた OSC 2019 Shimane の中で ハンズオン形式で体験出来るようにしたので 興味ある方がいれば 体験してみてください!
こういう時、Github便利ですね!!
デモの内容としては Indexを貼ってSQLの応答速度をチューニングする
という内容でした。
データとしては 40万件程度しか用意しなかったので msec
の世界でしか無かったのですが 単位をあわせて 170msec => 3msec って所で お、結構速くなったな?
っていう点を理解して頂けたのでは?って思っています。
- 高速化前
osc_demo=# EXPLAIN ANALYZE SELECT * FROM customers WHERE name = 'percy.wolff'; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Gather (cost=1000.00..10172.63 rows=3 width=110) (actual time=170.646..174.786 rows=1 loops=1) Workers Planned: 2 Workers Launched: 2 -> Parallel Seq Scan on customers (cost=0.00..9172.33 rows=1 width=110) (actual time=134.860..136.997 rows=0 loops=3) Filter: ((name)::text = 'percy.wolff'::text) Rows Removed by Filter: 133333 Planning Time: 2.530 ms Execution Time: 174.869 ms (8 rows)
- インデックスを作成
osc_demo=# CREATE INDEX customers_name_idx ON customers (name); CREATE INDEX
- 高速化後
osc_demo=# EXPLAIN ANALYZE SELECT * FROM customers WHERE name = 'percy.wolff'; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on customers (cost=4.45..16.30 rows=3 width=110) (actual time=2.301..2.319 rows=1 loops=1) Recheck Cond: ((name)::text = 'percy.wolff'::text) Heap Blocks: exact=1 -> Bitmap Index Scan on customers_name_idx (cost=0.00..4.45 rows=3 width=0) (actual time=2.275..2.284 rows=1 loops=1) Index Cond: ((name)::text = 'percy.wolff'::text) Planning Time: 6.774 ms Execution Time: 2.918 ms (7 rows)
結果としてこういう感じになりました。
項目 | Index構築前 | Index構築後 |
---|---|---|
スキャン方法 | Parallel Seq Scan | Bitmap Headp Scan |
実行時間 | 174.869 ms | 2.918 ms |
174ms => 2.9ms
なんと 60倍の高速化だぜ、やったー (パチパチ) っていうデモでした。
デモの意図
3年続けて参加をしていて OSC広島では 学生の方が多く参加されているなという印象を持っていました。
去年は PostgreSQL11の新機能の話とかもブースでさせて頂いたのですが 結構 新機能の前に そもそも SQLって? とか データベースって? みたいな質問をいただく事が多かったです。
ので、今回は思い切ってターゲティングを SQLを知らない方
ぐらいにして
- SQLのSELECT文の解説
- 「SQLって実は遅いんだよ」っていう話
- 高速化するにはどうするか
っていう話をさせて頂きました。
学生さんとかは非常に純粋なので、「うぉー!すごい! めっちゃ速くなりましたね!」 みたいなリアクションが返ってきてて、ありがたかったですね。
来季の意気込み
今回は ブース出典でしか無かったので 来季は ちゃんとセッションもご提供させていただければと思います。 主に今回はそこが反省点だったな、と思っています。
僕は 日本PostgreSQLユーザー会 に在籍しつつも バリバリのアプリケーションのエンジニアで PostgreSQLのインストールとかもQiitaとか見ながらじゃないと出来ないのでDockerでやるみたいな感じ()なんですが、そういう領域ではいつつも SQLの高速化 の領域は得意・好き な分野だと思っているので、 「アプリケーションを書きたいんです!」 みたいな世界を見ている学生さんにも届けられる事があるのでは?と思います。
告知
デモの延長みたいな話を PostgreSQL Conference Japan 2019 でやります!
アプリケーションエンジニア の観点から、 SQLの応答速度を高速化したみたいな所で 理論と改善の実例をご紹介させていただく予定です!