OSC2019 広島 に ブース出典 してきました #osc19hi

先日広島にて開催された OSC 2019 Hiroshima に参加してきました!

www.ospn.jp

自分が JPUG中国支部長 になってから 毎年の参加で、今年で3回目になります。

今回の関わり

今回は ブース出典とPostgreSQLに関する本の提供を行いました。


本に関しては 以下 2冊 を提供させて頂きました。

失敗から学ぶRDBの正しい歩き方 (Software Design plus)

失敗から学ぶRDBの正しい歩き方 (Software Design plus)

PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで

PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで

  • 作者: 近藤雄太,正野裕大,坂井潔,鳥越淳,笠原辰仁,石井達夫
  • 出版社/メーカー: 翔泳社
  • 発売日: 2019/10/04
  • メディア: 単行本
  • この商品を含むブログを見る


当日のデモの内容は 後日行われた OSC 2019 Shimane の中で ハンズオン形式で体験出来るようにしたので 興味ある方がいれば 体験してみてください!

github.com

こういう時、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の高速化 の領域は得意・好き な分野だと思っているので、 「アプリケーションを書きたいんです!」 みたいな世界を見ている学生さんにも届けられる事があるのでは?と思います。

告知

www.postgresql.jp

デモの延長みたいな話を PostgreSQL Conference Japan 2019 でやります!

アプリケーションエンジニア の観点から、 SQLの応答速度を高速化したみたいな所で 理論と改善の実例をご紹介させていただく予定です!