Slide 1

Slide 1 text

Webアプリケーションの パフォーマンス・チューニングの勘所 PHPカンファレンス沖縄2023 & PHP Conference Japan 2023

Slide 2

Slide 2 text

先に読んでおいてほしい
 
 
 What is it?

Slide 3

Slide 3 text

https://speakerdeck.com/hanhan1978/purohuairawoshi-tutaphpapurikesiyongai-shan-falsekan-suo

Slide 4

Slide 4 text

https://speakerdeck.com/hanhan1978/web-application-tuning-guildline この資料は次のページにあります 富所(@hanhan1978)さんがとても丁寧に説明し ている資料です。
 ● パフォーマンスチューニングに必要な概 念、考え方
 ● パフォーマンスチューニングの基礎的な ツールの説明
 でこの2つを見ておくとより理解が深まるので オススメです。


Slide 5

Slide 5 text

https://speakerdeck.com/soudai/basic-of-rdb

Slide 6

Slide 6 text

https://speakerdeck.com/soudai/shi-xing-ji-hua-falsehua MySQLもPostgreSQLも公式やコミュニティが実 行計画の素晴らしい資料があるのでそちらを参 考にしてください。
 特にPostgreSQLはコミュニティの動画がとても 参考になるので見てください。 
 もっと色々知りたい人は中国地方DB勉強会の 過去のスライドや動画を見るのがオススメで す。
 スライドの概要欄にURLリンクがあります。 


Slide 7

Slide 7 text

https://fortee.jp/phpcon-2021/proposal/1e11a6b1-08d9-4044-9909-4c90105ea726 清家(@seike460)さんがPHPカンファレンスで PHPの場合のツールやLinuxのコマンドによるプ ロファイリングついて説明しているのでこちらも とても参考になります。 


Slide 8

Slide 8 text

https://fortee.jp/phperkaigi-2021/proposal/1d6859e3-26e4-4918-8603-44ecc3c61666 清家(@seike460)さんが類似の内容で PHPerKaigi2021でも喋っているのでこちらも参 考になります。
 なんと清家さんは会場にいるので気になったら 本人に聞いて見ましょう。 
 優しく教えてくれます。 


Slide 9

Slide 9 text

https://speakerdeck.com/soudai/isucon10 前述の中国地方DB勉強会の中でSQLの改善 についても話をしています。 
 こちらも基礎的なSQLの改善について紹介して いるのでご参考ください。 


Slide 10

Slide 10 text

前述の資料を見たら
 
 仕事で必要なことは全部書いてあります!
 What is it?

Slide 11

Slide 11 text

ただし、少しだけ古いので
 
 最新事情に合わせて話をします
 What is it?

Slide 12

Slide 12 text

前述の資料を見たら
 
 仕事で必要なことは全部書いてあります!
 What is it?

Slide 13

Slide 13 text

1. 自己紹介
 2. 計測の順番と勘所
 3. スロークエリの勘所と対応
 4. キャッシュの勘所と使い方
 5. まとめ
 あじぇんだ

Slide 14

Slide 14 text

1. 自己紹介
 2. 計測の順番と勘所
 3. スロークエリの勘所と対応
 4. キャッシュの勘所と使い方
 5. まとめ
 あじぇんだ

Slide 15

Slide 15 text

自己紹介
 曽根 壮大(38歳)
 Have Fun Tech LLC 代表社員
 株式会社リンケージ CTO
 
 そ
 ● 日本PostgreSQLユーザ会 勉強会分科会 担当
 ● 3人の子供がいます(長女、次女、長男)
 ● 技術的にはWeb/LL言語/RDBMSが好きです
 ● コミュニティが好き たけ
 ね
 とも


Slide 16

Slide 16 text

突然の宣伝
 
予防医療のリンケージ
 
 
 ● リモートワークの不安を数値にするストレスチェック ● 女性の健康課題をサポートする ● リモートワーク、ちょっとした心配を相談できる安心をご提供 


Slide 17

Slide 17 text

1. 自己紹介
 2. 計測の順番と勘所
 3. スロークエリの勘所と対応
 4. キャッシュの勘所と使い方
 5. まとめ
 あじぇんだ

Slide 18

Slide 18 text

推測するな、計測せよ
 
 
 計測の順番と勘所

Slide 19

Slide 19 text

推測するな、計測せよ
 ↓
 どこから計測すればいいの?
 計測の順番と勘所

Slide 20

Slide 20 text

まず、計測に必要な情報を
 
 整理することが最初
 計測の順番と勘所

Slide 21

Slide 21 text

● アクセスログなどのWebサーバのログ
 ○ レイテンシーやリクエストされた回数など実際に思いエンドポイントを 
 見つけるために必要
 ○ LTSVやJSONなどの使いやすい形にフォーマットを指定することも重要 
 ● CPUやメモリなどのシステムメトリックの可視化
 ○ 最初はプラットフォームの提供サービスで十分 
 ○ もう少し踏み込みたくなったらSaaS 
 ● スロークエリログなどデータベースのログ
 ○ デフォルトでは吐き出さないので設定が大事 
 ○ 集計ツールの都合に合わせる必要もあるので集計方法は先に決める 
 計測するために必要な情報

Slide 22

Slide 22 text

実際にどうやってみるかは前述の
 
 資料たちを参考に
 計測の順番と勘所

Slide 23

Slide 23 text

もう一歩踏み出すなら
 
 Application Performance Monitoring
 計測の順番と勘所

Slide 24

Slide 24 text

自分でやるなら
 
 Open Telemetry Trace
 計測の順番と勘所

Slide 25

Slide 25 text

楽がしたいなら
 
 New RelicかDatadogのAPM
 計測の順番と勘所

Slide 26

Slide 26 text

楽がしたいなら
 
 New RelicかDatadogのAPM
 計測の順番と勘所 ドキュメントも豊富なのでまず SaaSのAPMから始めるのがおすすめ Spanをしっかり設定しましょう

Slide 27

Slide 27 text

ログの検索のアプローチ
 
 
 計測の順番と勘所

Slide 28

Slide 28 text

定期的に検索して集計
 
 または必要な時に検索
 計測の順番と勘所

Slide 29

Slide 29 text

定期的に検索して集計
 
 または必要な時に検索
 計測の順番と勘所

Slide 30

Slide 30 text

● ERRORやCRITICALの文字列を検索してalertを飛ばす
 ○ SaaSやクラウドサービスには仕組みが用意されている
 ○ AWSならEC2のsyslogをCloud Watch Logsに送る
 ● VPSの場合などにアクセスログを集計してリクエストされた回数や レスポンスステータスを集計する
 ○ AWSならALBのメトリックを見ればアクセス数がわかるが、ない 場合は自分で用意する必要がある
 ○ Mackerelだと mackerel-plugin-accesslog が便利
 定期的に検索して集計の例

Slide 31

Slide 31 text

定期的に検索して集計
 
 または必要な時に検索
 計測の順番と勘所

Slide 32

Slide 32 text

● 障害対応のときに特定のキーワードによる検索
 ○ Linuxならgrepやlessで良かったがフルマネージドな
 サービスの場合などは無いので代替が必要
 ○ AWSの場合は CloudWatch Logs Insights が便利
 ○ 生ログで似たようなことがやりたい場合はtrdsqlが便利
 ● todo
 必要な時に検索の例

Slide 33

Slide 33 text

計測したい理由を整理する
 
 
 計測の順番と勘所

Slide 34

Slide 34 text

計測したい理由を整理する
 ↓
 無くても最低限は準備したほうが良い
 計測の順番と勘所

Slide 35

Slide 35 text

ログやメトリックは
 
 過去のデータはロストすると追加できない
 計測の順番と勘所

Slide 36

Slide 36 text

いざ!計測!!
 
 
 計測の順番と勘所

Slide 37

Slide 37 text

いざ!計測!!
 ↓
 どこから?
 計測の順番と勘所 ここが推測になっちゃうというジレンマ

Slide 38

Slide 38 text

最初にOSのメトリックを見るのが
 
 全体を知れてよい
 計測の順番と勘所

Slide 39

Slide 39 text

https://speakerdeck.com/soudai/linuxos-for-system-metrics

Slide 40

Slide 40 text

https://blog.a-know.me/entry/2017/02/02/215641 @a_knowさんが前述のシステムメトリックの項 目の説明をブログにまとめてくれています。 
 まずは入門編としてはとても良いブログなの で読んでみてください。 
 システムメトリックの詳細を知りたいなら『詳解 システムパフォーマンス』が詳しく書いてあり ますが、1000ページ近いので高い and 気合 が必要です。内容は申し分なく充実している ので興味があれば。 
 もっと踏み込んで監視も学びたい!という人 は『Webエンジニアのための監視システム実 装ガイド』を読むと良いです。 
 
 


Slide 41

Slide 41 text

OSの状況を見て
 
 CPUの振る舞いを確認しましょう
 計測の順番と勘所

Slide 42

Slide 42 text

1. 自己紹介
 2. 計測の順番と勘所
 3. スロークエリの勘所と対応
 4. キャッシュの勘所と使い方
 5. まとめ
 あじぇんだ

Slide 43

Slide 43 text

DBの負荷には色々ある
 
 
 スロークエリの勘所と対応

Slide 44

Slide 44 text

DBの負荷には色々ある
 ↓
 どんなクエリが流れているか探る
 スロークエリの勘所と対応

Slide 45

Slide 45 text

● 実行に数秒以上かかるようなスロークエリ
 ● N+1なINSERTでDisk I/Oなどが起因のクエリ
 ● 単発のクエリは早いがN+1な検索クエリ
 ● ロックが競合して待たされているクエリ
 ● デッドロックで頻繁にkillされるクエリ
 …etc
 DBに負荷がかかる例

Slide 46

Slide 46 text

● 実行に数秒以上かかるようなスロークエリ
 ● N+1なINSERTでDisk I/Oなどが起因のクエリ
 ● 単発のクエリは早いがN+1な検索クエリ
 ● ロックが競合して待たされているクエリ
 ● デッドロックで頻繁にkillされるクエリ
 …etc
 DBに負荷がかかる例 最初以外のクエリはスロークエリログには出てこない!

Slide 47

Slide 47 text

● 実行に数秒以上かかるようなスロークエリ
 ● N+1なINSERTでDisk I/Oなどが起因のクエリ
 ● 単発のクエリは早いがN+1な検索クエリ
 ● ロックが競合して待たされているクエリ
 ● デッドロックで頻繁にkillされるクエリ
 …etc
 DBに負荷がかかる例 スロークエリログを見る

Slide 48

Slide 48 text

● 実行に数秒以上かかるようなスロークエリ
 ● N+1なINSERTでDisk I/Oなどが起因のクエリ
 ● 単発のクエリは早いがN+1な検索クエリ
 ● ロックが競合して待たされているクエリ
 ● デッドロックで頻繁にkillされるクエリ
 …etc
 DBに負荷がかかる例 CPU、Disk i/o統計情報やテーブルの データ量から類推できる。

Slide 49

Slide 49 text

● 実行に数秒以上かかるようなスロークエリ
 ● N+1なINSERTでDisk I/Oなどが起因のクエリ
 ● 単発のクエリは早いがN+1な検索クエリ
 ● ロックが競合して待たされているクエリ
 ● デッドロックで頻繁にkillされるクエリ
 …etc
 DBに負荷がかかる例 統計情報で類推できる。 数が純粋に多い場合はスロークエリログの 閾値を0秒にして出てきたクエリをカウントしてソート するとわかる

Slide 50

Slide 50 text

● 実行に数秒以上かかるようなスロークエリ
 ● N+1なINSERTでDisk I/Oなどが起因のクエリ
 ● 単発のクエリは早いがN+1な検索クエリ
 ● ロックが競合して待たされているクエリ
 ● デッドロックで頻繁にkillされるクエリ
 …etc
 DBに負荷がかかる例 ロック待ちは実行時間に含まれない timeoutする場合はエラーログに出る ロックが頻発するとCPUも跳ねる テーブルロックの場合はUPDATEにWHEREのINDEXが足 りていないことがほとんど

Slide 51

Slide 51 text

● 実行に数秒以上かかるようなスロークエリ
 ● N+1なINSERTでDisk I/Oなどが起因のクエリ
 ● 単発のクエリは早いがN+1な検索クエリ
 ● ロックが競合して待たされているクエリ
 ● デッドロックで頻繁にkillされるクエリ
 …etc
 DBに負荷がかかる例 アプリケーションやDBのログからkillされたことはわかるが、 デッドロックの条件を見つけることが難しい。 SHOW ENGINE INNODB STATUSやpg_stat_activityで 地道な検証と対応が必要になる。 デッドロックのtimeoutを短くしてアプリケーション側でリトラ イすることで解決することも多い

Slide 52

Slide 52 text

DBのパフォーマンス改善の勘所
 
 
 スロークエリの勘所と対応

Slide 53

Slide 53 text

DBのパフォーマンス改善の勘所
 ↓
 仕様を変えたほうが早いことが多い
 スロークエリの勘所と対応

Slide 54

Slide 54 text

https://speakerdeck.com/soudai/release-small 不要なクエリを減らせるなら仕様を削ったほう が早い。
 例えば一覧表示の総ページ数など 


Slide 55

Slide 55 text

DBのパフォーマンス改善の勘所 2
 
 
 スロークエリの勘所と対応

Slide 56

Slide 56 text

DBのパフォーマンス改善の勘所 2
 ↓
 テーブル設計が悪い
 スロークエリの勘所と対応

Slide 57

Slide 57 text

朝起きたら、改善する問題ではないので
 
 これは頑張って直していくしかない
 スロークエリの勘所と対応

Slide 58

Slide 58 text

1. 自己紹介
 2. 計測の順番と勘所
 3. スロークエリの勘所と対応
 4. キャッシュの勘所と使い方
 5. まとめ
 あじぇんだ

Slide 59

Slide 59 text

キャッシュは麻薬
 
 
 キャッシュの勘所と使い方

Slide 60

Slide 60 text

キャッシュは麻薬
 ↓
 使わなくて済むなら使わない!
 キャッシュの勘所と使い方

Slide 61

Slide 61 text

https://speakerdeck.com/moznion/pattern-and-strategy-of-web-application-caching

Slide 62

Slide 62 text

それでもキャッシュを使うと言うんだね…
 
 
 キャッシュの勘所と使い方

Slide 63

Slide 63 text

それでもキャッシュを使うと言うんだね…
 ↓
 最小限に抑えましょう
 キャッシュの勘所と使い方

Slide 64

Slide 64 text

● キャッシュの多段、ダメゼッタイ!!
 ○ あくまで元のデータから常に取り出す
 ● キャッシュが消えてサービスも落ちる
 ● 間違ったキャッシュが保存されて、間違ったデータが表 示される
 ○ ユーザ情報の場合はインシデント…
 ● データが壊れたときにどこで壊れたかわからない
 …etc
 キャッシュの地獄

Slide 65

Slide 65 text

キャッシュを作る勘所
 
 
 キャッシュの勘所と使い方

Slide 66

Slide 66 text

クライアント
 インターネット
 サーバサイド
 通信
 DNS
 BGP
 ISP
 サーバ
 ネットワーク
 アプリケーション
 キャッシュの勘所と使い方

Slide 67

Slide 67 text

クライアント
 インターネット
 サーバサイド
 通信
 DNS
 BGP
 ISP
 サーバ
 ネットワーク
 アプリケーション
 キャッシュの勘所と使い方 クライアントに近いところで キャッシュしたほうが効果は高い しかし、更新コストや難易度は上がる

Slide 68

Slide 68 text

● データの公開、参照の範囲が広いほうが良い
 ○ よく使われるし、出し分けもシンプル
 ○ 例えば全ユーザが表示する記事内容
 ● データが更新されにくい、または更新タイミングをコントロールで きるようなデータ
 ○ 例えば商品説明の内容
 ● 更新の反映が遅れてよいデータ
 ○ 実はリアルタイムじゃなくて良いことも多い
 キャッシュと相性が良いデータ

Slide 69

Slide 69 text

逆のパターンは危険
 
 
 キャッシュの勘所と使い方

Slide 70

Slide 70 text

逆のパターンは危険
 ↓
 仕様から見直しましょう
 キャッシュの勘所と使い方

Slide 71

Slide 71 text

キャッシュは麻薬
 
 
 キャッシュの勘所と使い方

Slide 72

Slide 72 text

1. 自己紹介
 2. 計測の順番と勘所
 3. スロークエリログの勘所と対応
 4. キャッシュの勘所と使い方
 5. まとめ
 あじぇんだ

Slide 73

Slide 73 text

良い資料が沢山あるので読みましょう
 
 
 まとめ

Slide 74

Slide 74 text

まずは準備が大事
 
 サービスを監視できるようにしましょう
 まとめ

Slide 75

Slide 75 text

仕組みで問題を解決する
 
 
 まとめ

Slide 76

Slide 76 text

まとめ

Slide 77

Slide 77 text

目の前のコードを直すことができるのは
 
 自分たちだけ
 まとめ

Slide 78

Slide 78 text

リリースして価値を提供しましょう
 
 
 まとめ

Slide 79

Slide 79 text

ご清聴ありがとうございました
 
 
 まとめ