Slide 1

Slide 1 text

ʮ઀ଓʯ ύϑΥʔϚϯενϡʔχϯάͷ ࠷ޙͷҰख ఺ͱ఺Λ݁ͿɺͦͷҰॠͷͨΊʹ 1)1FS,BJHJ ෢ా ݑଠ࿠ !,FOUBSPV5BLFEB

Slide 2

Slide 2 text

ʮ઀ଓʯ ύϑΥʔϚϯενϡʔχϯάͷ ࠷ޙͷҰख ఺ͱ఺Λ݁ͿɺͦͷҰॠͷͨΊʹ 1)1FS,BJHJ ෢ా ݑଠ࿠ !,FOUBSPV5BLFEB

Slide 3

Slide 3 text

l ύϑΥʔϚϯενϡʔχϯά͸͋ΒΏΔ8FCΞϓ Ϧʹ͓͚Δॏཁͳؔ৺ࣄͰ͢ɻΫΤϦ࠷దԽɺܭࢉ ྔ࡟ݮɺΩϟογϡ׆༻ͳͲɺͦͷख๏͸ଟذʹ౉ Γ·͢ɻ ͔͠͠ɺͦΕΒͷଟ͘͸ʮಛఆͷՕॴʯΛ଎͘͢ ΔΞϓϩʔνʹཹ·Γ·͢ɻ ϓϩϙʔβϧΑΓ

Slide 4

Slide 4 text

l Ұํɺ8FCΞϓϦέʔγϣϯʹ͸ྫ֎ͳ͘ɺ͢΂ ͯͷϦΫΤετʹඞͣొ৔͢Δཁૉ͕͋Γ·͢ɻ Šʮ઀ଓʯͰ͢ɻ ϓϩϙʔβϧΑΓ

Slide 5

Slide 5 text

Cloud Infrastructure Server User CDN LB Web Server App Runtime DB Cache Ext API ͢΂ͯͷϦΫΤετ͸ɺ ඞͣ͜ΕΒͷlઢzΛ௨Δ

Slide 6

Slide 6 text

• ʮ઀ଓʯ͸શͯͷॲཧͰԿஈ֊΋ൃੜ͢Δ • ߟ͑ํ΍ख๏ɺݟΔ΂͖ࢦඪ͸ڞ௨͍ͯ͠Δ ʮ઀ଓʯ͕ॏཁͳཧ༝ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 5

Slide 7

Slide 7 text

• 1)1Λ୊ࡐʹɺ઀ଓ؅ཧͷݪଇΛཧղ͢Δ • αʔόͷઃఆϑΝΠϧ΍Ϋϥ΢υͷΠϯελ ϯεߏ੒ΛʮࠜڌΛ࣋ͬͯʯܾఆͰ͖Δ ͜ͷτʔΫͷΰʔϧ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 6

Slide 8

Slide 8 text

l ࠷ޙͷҰख τʔΫλΠτϧΑΓ

Slide 9

Slide 9 text

• ͍͍ͤͥ਺ύʔηϯτͷվળ • ΑΓେ͖ͳʮಛఆͷՕॴʯ͕࢒͍ͬͯΔ৔߹ɺ ޮՌ͕ݟ͑ͮΒ͍ ͳͥʮ࠷ޙͷҰखʯͳͷ͔ʁ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 8

Slide 10

Slide 10 text

• ඍྔ͕࣮ͩ֬ʹޮ͘ • ߴෛՙ࣌ͷʮͳ͔ͥ٧·ΔʯΛղফͰ͖Δ ͦΕͰ΋࠷ޙͷҰखΛଧͭཧ༝ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 9

Slide 11

Slide 11 text

 ʮ઀ଓʯͷجຊ֓೦ͱ)551  ΞϓϦέʔγϣϯ΁ͷʮ઀ଓʯ  σʔλϕʔε΁ͷʮ઀ଓʯ  Ωϟογϡ΁ͷʮ઀ଓʯ  ֎෦"1*΁ͷʮ઀ଓʯ  ઀ଓ͸ੑೳʹઌཱͭ ΞδΣϯμ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 10

Slide 12

Slide 12 text

l Ѩ෦׮ͷϗʔϜϖʔδʢ͋΂ͻΖ͠ ͷϗʔϜϖʔδʣ͸ɺ೔ຊͷആ༏Ͱ͋ ΔѨ෦׮ͷެࣜ΢ΣϒαΠτͰ͋Δɻ ඇৗʹγϯϓϧͳσβΠϯͷͨΊɺܰ ྔͰ͋Γɺͦͷදࣔͷߴ଎ੑ͔ΒΠϯ λʔωοτɾϛʔϜͱͯ͠΋ѻΘΕͯ ͍Δɻ Ѩ෦׮ͷϗʔϜϖʔδ 8JLJQFEJB

Slide 13

Slide 13 text

1 2 3 4 5 index.htm フレームセット 1 menu.htm ナビゲーション 2 top.htm コンテンツ 3 abehiroshi.jpg 背景画像 4 abe-top-*.jpg プロフィール写真 5 ʮѨ෦׮ͷϗʔϜϖʔδʯ͕දࣔ͞ΕΔ·Ͱ

Slide 14

Slide 14 text

 5$1઀ଓཱ֬ʢXBZIBOETIBLFʣ • EBZ5SBDL" 1)1ͰͰ͖Δʂࣗ࡞*1ϧʔλʔ CZࢢ઒!DBLFQIQFS  5-4ϋϯυγΣΠΫʢ)5514ͷ৔߹ʣ • EBZ5SBDL# 1)1Ͱ5-4ͷϓϩτίϧΛ࣮૷ͯ͠ΈΔ CZͻ͕͖  ϦΫΤετɾϨεϙϯε • %BZ5SBDL# ंྠͷ࠶ൃ໌Λ͠Α͏ʂ1)1Ͱ࣮૷ֶͯ͠Ϳɺ8FCαʔόʔͷ࢓૊Έͱ)551ͷਖ਼ମ CZ)3 ʮ઀ଓʯຖʹҰఆͷίετ͕ൃੜ͍ͯ͠Δ ʮ઀ଓʯΛߏ੒͢Δཁૉ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 13

Slide 15

Slide 15 text

໾ׂΛऴ͑ͨ઀ଓΛผͷϦΫΤετʹ࠶ར༻ • "QBDIF • ,FFQ"MJWF0O • σϑΥϧτ༗ޮʢ௨ৗ͸Կ΋͠ͳͯ͘ྑ͍ʣ • ݹ͍࣌୅ͷઃఆϑΝΠϧ͸0GG͕ଟ͍ͷͰ஫ҙ • /HJOY • ৗʹ༗ޮ )551,FFQ"MJWFr઀ଓͷ࠶ར༻ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 14

Slide 16

Slide 16 text

1 2 3 4 5 index.htm フレームセット 1 menu.htm ナビゲーション 2 top.htm コンテンツ 3 abehiroshi.jpg 背景画像 4 abe-top-*.jpg プロフィール写真 5 再利用 再利用 再利用 段階1 段階2 ─ 並列 段階3 ─ 並列 ઀ଓͷଟॏԽͱ࠶ར༻ʹΑΔੑೳ޲্

Slide 17

Slide 17 text

࠶ར༻ͷ༗ແʹΑΔੑೳࠩ ※全てのHTTPSリクエストに対し「OK」とだけ返すWebサーバをローカルネットワーク内の別マシンで起 動し「100並列 × 1000回 = 10万リクエスト」送信した際のレスポンスタイム 平均で約6倍、95パーセンタイルで約15倍の性能差 Avg Median 95pct KeepAlive Off 106ms 79ms 234ms KeepAlive On 17ms 11ms 16ms 倍率 6.16x 7.18x 14.63x 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 16

Slide 18

Slide 18 text

6 7 ϖʔδભҠΛލ͙઀ଓͷ࠶ར༻ トップページ 映画出演 index.htm フレームセット 1 menu.htm ナビゲーション 2 top.htm コンテンツ 3 abehiroshi.jpg 背景画像 4 abe-top-*.jpg プロフィール写真 5 eiga.htm 映画出演ページ 6 movie.jpg 映画画像 7 再利用したい 再利用したい

Slide 19

Slide 19 text

ϒϥ΢βଆ • ۭ͍͍ͯΔ઀ଓ͸ՄೳͳݶΓ࠶ར༻͢Δ • ϖʔδભҠΛލ͍Ͱ΋࠶ར༻͢Δ αʔόଆ • ࠶ར༻ͷ༗ޮظݶΛઃఆՄೳ • "QBDIF,FFQ"MJWF5JNFPVUʢඵɾσϑΥϧτʣ • OHJOYLFFQBMJWF@UJNFPVUTʢσϑΥϧτʣ ઀ଓ͕࠶ར༻͞ΕΔ৚݅ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 18

Slide 20

Slide 20 text

ੵۃతʹ઀ଓΛ࠶ར༻ͤ͞ΔͨΊ ,FFQ"MJWFͷλΠϜΞ΢τ͸ े෼ʹ௕͍஋Λઃఆ͢Δͱྑ͍ ͱ͸ݶΒͳ͍

Slide 21

Slide 21 text

• "QBDIFQSFGPSLϞσϧσϑΥϧτ஋ • .BY3FRVFTU8PSLFST • OHJOYσϑΥϧτ஋ • XPSLFS@DPOOFDUJPOT 8FCαʔόͷ࠷େಉ࣌઀ଓ਺ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 20

Slide 22

Slide 22 text

લఏ • 17NJOº઀ଓ • ཭୤཰ ʢλϒ͸ด͡ͳ͍ʣ ,FFQ"MJWF5JNFPVUͱಉ࣌઀ଓͷރׇ KeepAliveTimeout 離脱ユーザーのアイドル接続 60秒 50人 × 6接続 = 300 5秒 約4人 ×6接続 = 24 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 21 KeepAliveTimeoutを十分に長くすると MaxRequestWorkers 256 を離脱ユーザーだけで超過

Slide 23

Slide 23 text

࣋ଓ઀ଓʹٻΊΔཁ݅ • ϒϥ΢β • ͋ΒΏΔঢ়گͰ࠶ར༻Ͱ͖ΔΑ͏௕͘ҡ࣋ͯ͠ཉ͍͠ • αʔό • ඞཁͳ઀ଓ͸ҡ͍͕࣋ͨ͠ෆཁͳ઀ଓ͸଎΍͔ʹ੾Γ͍ͨ ,FFQ"MJWF5JNFPVUͷτϨʔυΦϑ 十分に大きな値 適度に小さな値 接続の再利用 ✅高確率で再利用 ❌同一ページ内に限定 同時接続数 ❌離脱ユーザーも消費 ✅ページロード中に限定 リソース消費 ❌メモリ圧迫・制限到達リスク ✅抑制される 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 22

Slide 24

Slide 24 text

$%/ϩʔυόϥϯαʹΑΔղܾ 直接接続 ブラウザ N = ?(予測困難) Webサーバ ෆಛఆଟ਺ͷ઀ଓ ʢ༧ଌࠔ೉ʣ Proxy経由 ブラウザ N = ?(予測困難) Proxyサーバ 設定管理された接続 (予測可能) Webサーバ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 23 Webサーバへの接続を ブラウザを跨いで再利用

Slide 25

Slide 25 text

ϒϥ΢β͔ΒݟΔͱ • ,FFQ"MJWF઀ଓ͸ඇৗʹ௕࣌ؒҡ࣋͞ΕΔ 8FCαʔό͔ΒݟΔͱ • ,FFQ"MJWF઀ଓ͸ద੾ͳλΠϛϯάͰ੾அ͞ΕΔ ϩʔυόϥϯγϯά΍Τοδ࠷దԽ͕ෆཁͳ৔߹Ͱ΋ ϓϩΫγΛಋೖ͢Δཧ༝͕͋Δ ϓϩΫγαʔόͷϝϦοτ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 24

Slide 26

Slide 26 text

• ʮ઀ଓʯʹ͸ίετ͕͔͔Δ • ࠶ར༻Ͱίετ࡟ݮ • ʮ઀ଓͷҡ࣋ʯ΋ίετ͕͔͔Δ • ద੾ͳλΠϛϯάͰഁغ͍ͨ͠ • ʮഁغWTҡ࣋ʯͷτϨʔυΦϑΛϓϩΫγͰղফ ͜͜·Ͱͷ·ͱΊ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 25

Slide 27

Slide 27 text

 ʮ઀ଓʯͷجຊ֓೦ͱ)551  ΞϓϦέʔγϣϯ΁ͷʮ઀ଓʯ  σʔλϕʔε΁ͷʮ઀ଓʯ  Ωϟογϡ΁ͷʮ઀ଓʯ  ֎෦"1*΁ͷʮ઀ଓʯ  ઀ଓ͸ੑೳʹઌཱͭ ΞδΣϯμ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 26

Slide 28

Slide 28 text

$%/-#ͱ8FCαʔόͷؔ܎ʹࣅ͍ͯΔ • OHJOY͕શͯͷ઀ଓΛड͚෇͚ • ඞཁͳ͚࣌ͩQIQGQN΁தܧ • ઀ଓ͸ϦΫΤετΛލ͍Ͱ࠶ར༻ ͜ΕʹΑΓ • ϒϥ΢β͔Βݟͨ઀ଓ਺ ΞϓϦ͔Βݟͨ઀ଓ਺ ͱ͍͏ߏ੒͕Մೳ OHJOY QIQGQN ブラウザ nginx php-fpm HTTP FastCGI 外部 サーバ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 27

Slide 29

Slide 29 text

• ੩తFQPMM /PO#MPDLJOH*0ʹΑΔߴฒྻੑ • ಈతִ཭͞Εͨগ਺ͷϓϩηεʹΑΔ҆શੑ • OHJOYͷڧΈঢ়گʹԠͯ͡ಈ࡞ϞσϧΛ࢖͍෼͚Δ OHJOYͷ੩తPSಈతίϯςϯπॲཧ 静的 リクエスト nginx レスポンス 直接応答 動的 リクエスト nginx php-fpm nginx レスポンス リバースプロクシがFastCGIへ中継 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 28

Slide 30

Slide 30 text

˞શͯͷ)551ϦΫΤετʹର͠ʮ0,ʯͱ͚ͩฦ͢8FCαʔόΛܭଌͱಉҰͷϚγϯͰىಈ ͠ʮฒྻ ºճ ສϦΫΤετʯૹ৴ͨ͠ࡍͷϨεϙϯελΠϜ 'BTU$(*΁ͷʮ઀ଓʯίετ͸ʁ nginx + php-fpm Apache + mod_php 倍率 Avg 2.72ms 1.80ms 1.51x Median 3.00ms 2.00ms 1.50x 95pct 3.00ms 2.00ms 1.50x 実測で1msの差。ただし全ての動的レスポンスに確実に積み上がる。 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 29

Slide 31

Slide 31 text

$%/ߏ੒Ͱͷ8FCαʔόͷ໾ׂ 責務 CDNなし CDNあり 接続のハンドリング nginx CDN 接続の集約 nginx CDN バッファリング nginx CDN 静的コンテンツ nginx S3 動的コンテンツ php-fpm or mod_php php-fpm or mod_php nginx + php-fpm ブラウザ CloudFront S3 nginx php-fpm 静的 動的 FastCGI Apache + mod_php ブラウザ CloudFront S3 Apache + mod_php 静的 動的 接続コスト = ゼロ ✓ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 30

Slide 32

Slide 32 text

• OHJOY͸઀ଓͷʮҡ࣋PSഁغʯΛ࠷దԽ͢Δ • ϒϥ΢β͔Βݟͨ઀ଓ਺ΞϓϦ͔Βݟͨ઀ଓ਺ • 'BTU$(*ʮ઀ଓʯʹ΋ίετ͕͔͔Δ • OHJOYʹΑΔ઀ଓ࠷దԽͷখ͞ͳฐ֐ • ʮ઀ଓʯͷίετΛผͷϨΠϠʔʹҠৡ͢Δબ୒ࢶ • ΠϯϑϥΛ၆ᛌͰݟΔ͜ͱͷॏཁੑ ͜͜·Ͱͷ·ͱΊ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 31

Slide 33

Slide 33 text

 ʮ઀ଓʯͷجຊ֓೦ͱ)551  ΞϓϦέʔγϣϯ΁ͷʮ઀ଓʯ  σʔλϕʔε΁ͷʮ઀ଓʯ  Ωϟογϡ΁ͷʮ઀ଓʯ  ֎෦"1*΁ͷʮ઀ଓʯ  ઀ଓ͸ੑೳʹઌཱͭ ΞδΣϯμ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 32

Slide 34

Slide 34 text

 5$1઀ଓཱ֬  5-4ϋϯυγΣΠΫ  ೝূϋϯυγΣΠΫ  όοΫΤϯυϓϩηεىಈ • %#ͷϓϩηε؅ཧίετ͸8FCαʔόΑΓܻҧ͍ʹߴ͍ 1)1ͷσϑΥϧτಈ࡞ • ϦΫΤετ͝ͱʹ઀ଓΛཱ֬͠ɺऴྃ࣌ʹ੾அ • όοΫΤϯυϓϩηε͸ىಈͱऴྃΛ܁Γฦ͢ %#઀ଓͷίετ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 33

Slide 35

Slide 35 text

࣋ଓ઀ଓʢ1FSTJTUFOU$POOFDUJPOʣ use Pdo¥Pgsql; $pdo = new Pgsql('pgsql:', options: [ // 持続接続: プロセス毎に接続を維持 Pgsql::ATTR_PERSISTENT ]) ; // Laravel: config/database.php 'pgsql' => [ // ...既存の設定... 'options' => [ Pgsql::ATTR_PERSISTENT => true, ], ], )551ʹ͓͚Δ,FFQ"MJWFͱಉ͡ൃ૝ •໾ׂΛऴ͑ͨ઀ଓΛ࠶ར༻ճ໨Ҏ߱͸θϩίετ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 34

Slide 36

Slide 36 text

࣋ଓ઀ଓͷϕϯνϚʔΫ ඇ࣋ଓ઀ଓ ࣋ଓ઀ଓ ഒ཰ ઀ଓ .FEJBO NT NT  Y ઀ଓ Q NT NT  Y ΫΤϦ .FEJBO NT NT Y ΫΤϦ Q NT NT Y 接続コストの消滅に加えクエリ性能も向上 ※計測と同一のマシンで稼働するPostgreSQLに対しUNIXドメインソケット経由で接続し SELECT 1 を 10,000回発行。 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 35

Slide 37

Slide 37 text

ো֐ྫ঎඼ߪೖ࣌ͷ"1*ϦΫΤετࣦഊ  ର৅঎඼Λ4&-&$5'0361%"5&ͰϩοΫ  ܾࡁ"1*ίʔϧ ˠλΠϜΞ΢τ  Ϣʔβʔʹ͸஫จࣦഊΛฦ͠Ϩεϙϯε͸ऴྃ  30--#"$,͞Εͳ͍··઀ଓ͕࣋ଓ  Ҏ߱ɺಉ͡঎඼Λങ͓͏ͱ͢ΔͱશͯλΠϜΞ΢τ  ʮ8FCαʔόΛ࠶ىಈͨ͠Β௚ͬͨʯˠݪҼෆ໌ %#઀ଓ͸ঢ়ଶΛ࣋ͭ ࣋ଓ઀ଓͷϦεΫঢ়ଶͷ࢒ཹ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 36

Slide 38

Slide 38 text

• ηογϣϯม਺ɾҰ࣌ςʔϒϧ • લͷϦΫΤετͷ৘ใ͕ผͷϦΫΤετ΁࿙Ӯ • ϓϦϖΞυεςʔτϝϯτ • BMSFBEZFYJTUTΤϥʔ • קࠂϩοΫ • ղ์͞ΕͣҎ߱ͷϦΫΤετΛશͯϒϩοΫ ࣋ଓ઀ଓΛ҆શʹ࢖͑Δ͔͸ʮυϥΠόͷ࣮૷࣍ୈʯ ͦͷଞͷঢ়ଶ࢒ཹϦεΫ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 37

Slide 39

Slide 39 text

1)1QEP@QHTRMঢ়ଶϦηοτ 1)1 • τϥϯβΫγϣϯ • ✅Ϩεϙϯεऴྃ࣌ʹղ์ • ϓϦϖΞυεςʔτϝϯτ • ✅ແ໊εςʔτϝϯτ͸҆શ • ❌໊લ෇͖εςʔτϝϯτ͸িಥ • ❌্هҎ֎͸શͯ࢒ཹ 1)1 • ✅ঢ়ଶ͸શͯϦηοτ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 38

Slide 40

Slide 40 text

%#઀ଓ਺1)1ϓϩηε਺ º αʔό୆਺ • 8FCαʔόͷεέʔϧΞ΢τ͕جຊ • %#઀ଓ਺͸εέʔϧΞ΢τͱڞʹ૿͑Δ • %#αʔό͸εέʔϧΞοϓ͕جຊ • શαʔό͔Βͷ%#઀ଓΛ୆Ͱड͚Δ 8FCαʔόͷεέʔϧΞ΢τ͕ %#઀ଓ਺ރׇΛট͘ϦεΫ εέʔϧಛੑͱ%#઀ଓ਺ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 39

Slide 41

Slide 41 text

$%/-#ͱಉ͡ʮؒʹϓϩΫγΛڬΉʯύλʔϯ • /ຊͷΞϓϦ઀ଓΛ.ຊͷ%#઀ଓʹू໿ʢ./ʣ ଞݴޠͰ͸'8ϥΠϒϥϦʹ઀ଓϓʔϥʔ͕಺ଂ • +BWB)JLBSJ$1 • (PEBUBCBTFTRM • 3BJMT"DUJWF3FDPSE ଟ͘ͷ઀ଓϓʔϥʔ͸ঢ়ଶ؅ཧ΍ॳظԽͷػೳΛ಺ଂ ઀ଓϓʔϥʔ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 40

Slide 42

Slide 42 text

• ͭͷϓϩηε͕ͭͷϦΫΤετΛॲཧ • ϓϩηεʢʹϦΫΤετʣΛލ͍ͩ࣌఺Ͱڞ༗͸ෆՄೳ • 4IBSFE/PUIJOH"SDIJUFDUVSF • Ϩεϙϯεऴྃ࣌ʹશͯΛഁغ͢Δઃܭ͕1)1ͷجຊ ઀ଓϓʔϥʔͰ઀ଓίετΛ࡟ݮ͢Δํ๏͸ʁ 1)1ʹ઀ଓϓʔϥʔ͕ແ͍ʢPSཁΒͳ͍ʣཧ༝ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 41

Slide 43

Slide 43 text

࣋ଓ઀ଓΛʮͲͷఔ౓࠶ར༻͢Δ͔ʯબ୒Մೳ • 4FTTJPOΫϥΠΞϯτ઀ଓ୯ҐʢσϑΥϧτʣ • ੍໿ͳ͠ɾޮ཰௿ • 5SBOTBDUJPOτϥϯβΫγϣϯ୯Ґ ʢਪ঑ʣ • ޮ཰ߴɾҰ෦ػೳΛར༻ෆՄ • 4UBUFNFOU42-จ୯Ґʢಛघ༻్ʣ • ࠷ߴޮ཰ɾτϥϯβΫγϣϯෆՄ ػೳͱੑೳͷͲͪΒΛ༏ઌ͢Δ͔Ͱબ୒ 1H#PVODFSʢϛυϧ΢ΣΞܕʣ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 42 機能 性能

Slide 44

Slide 44 text

• ௨ৗ͸1H#PVODFSͷ5SBOTBDUJPOϞʔυ૬౰ • ϐϯཹΊ4FTTJPOϞʔυ΁ͷࣗಈ੾Γସ͑ • 4&5΍קࠂϩοΫ౳ͰΞϓϦͱ%#ͷ઀ଓ͕ݻఆ͞ΕΔ • ʮঢ়ଶ࢒ཹϦεΫʯͱ׬શʹରԠ • ΞϓϦ઀ଓͷ੾அͰݻఆ͕ղআ͞ΕΔ • 3%41SPYZ΁ͷ઀ଓ͸࣋ଓͯ͠͸͍͚ͳ͍ʢݻఆղআͰ͖ͳ͍ʣ ಈ࡞ʹԠͯ͡ੑೳ͕ࣗಈతʹมΘΔ 3%41SPYZʢϚωʔδυαʔϏεܕʣ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 43

Slide 45

Slide 45 text

• ʮ઀ଓʯͷίετ͸)551Ҏ্ʹߴ͍ • ࣋ଓ઀ଓͰίετΛେ෯࡟ݮ • ʮ઀ଓҡ࣋ʯͷίετ΋)551Ҏ্ʹߴ͍ • 8FCαʔόεέʔϧΞ΢τ ˠ઀ଓރׇ ˠଈো֐ • ઀ଓ͕ঢ়ଶΛ࣋ͭϦεΫ • σʔλͷ࿙Ӯ΍ଛࣦɺো֐ʹܨ͕Δ͓ͦΕ • ઀ଓϓʔϥʔͰτϨʔυΦϑΛ͋Δఔ౓ղফ • ֎෦ͷϛυϧ΢ΣΞ΍1BB4Λ׆༻ ͜͜·Ͱͷ·ͱΊ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 44

Slide 46

Slide 46 text

 ʮ઀ଓʯͷجຊ֓೦ͱ)551  ΞϓϦέʔγϣϯ΁ͷʮ઀ଓʯ  σʔλϕʔε΁ͷʮ઀ଓʯ  Ωϟογϡ΁ͷʮ઀ଓʯ  ֎෦"1*΁ͷʮ઀ଓʯ  ઀ଓ͸ੑೳʹઌཱͭ ΞδΣϯμ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 45

Slide 47

Slide 47 text

Ωϟογϡ΁ͷ࣋ଓ઀ଓ // Memcached: `$persistent_id` を指定 $memcached = new Memcached('接続を識別するID'); $memcached->addServer('localhost', 11211); // Redis: `pconnect()`メソッド $redis = new Redis(); $redis->pconnect('localhost', 6379); // Laravel - Memcached: config/cache.php - 抜粋 'memcached' => [ 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), ], // Laravel - Redis: config/database.php - 抜粋 'redis' => [ 'options' => [ 'persistent' => env('REDIS_PERSISTENT', false), ], ], )551ɾ%#ͱಉ͡ߟ͑ํ •઀ଓཱ֬ʹ͸ίετ͕͔͔Δ • ˠ࣋ଓ઀ଓͰ࠶ར༻͍ͨ͠ )551ɾ%#ͱҟͳΔߟ͑ํ •ಉ࣌઀ଓ΍ฒྻॲཧʹڧ͍ • ˠ઀ଓ਺͸ؾʹ͠ͳͯ͘ྑ͍ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 46

Slide 48

Slide 48 text

Ωϟογϡ࣋ଓ઀ଓͷϕϯνϚʔΫ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 47 3FEJT ඇ࣋ଓ઀ଓ ࣋ଓ઀ଓ ഒ཰ ઀ଓ "WH NT NT Y ઀ଓ .FEJBO NT NT Y ઀ଓ Q NT NT Y .FNDBDIFE ඇ࣋ଓ઀ଓ ࣋ଓ઀ଓ ഒ཰ (&5"WH NT NT Y (&5.FEJBO NT NT Y (&5Q NT NT Y ※php-memcachedは最初のコマンド実行まで接続を遅延するためGETでベンチマーク(この表はRedis とMemcachedの比較にはならない)

Slide 49

Slide 49 text

઀ଓ͕ঢ়ଶΛ͔࣋ͭʁ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 48 Memcached: 接続は状態を持てない(HTTPと同じ考え方) コマンドは全てアトミックに動作 → 持続接続を常に安全に利用できる Redis: 接続は状態を持てる—PhpRedisの持続接続は状態を持つ ػೳ ίϚϯυ ࢒ཹ ڍಈͱϦεΫ τϥϯβΫγϣϯ .6-5* ͠ͳ͍ ࣋ଓ઀ଓ͸ϦΫΤετऴྃ࣌ʹڧ੍੾அ ೝূ "65) ͢Δ ϚϧνςφϯτܕΞϓϦέʔγϣϯͰ৘ใ࿙Ӯ ָ؍ϩοΫ 8"5$) ͢Δ σʔλ૕ࣦ΍τϥϯβΫγϣϯࣦഊ %#੾Γସ͑ 4&-&$5/ ͢Δ ϚϧνςφϯτܕΞϓϦέʔγϣϯͰ৘ใ࿙Ӯ 1VC4VC 46#4$3*#& ͢Δ શͯͷίϚϯυ͕ࣦഊ DB接続の「状態残留リスク」と同じ構造

Slide 50

Slide 50 text

• 3FEJTͷঢ়ଶ࢒ཹ͸ʮ୯७ͳ,74ʹ͸ෆཁͳػೳʯʹىҼ • (&54&5%&-&5&͚ͩͳΒঢ়ଶ͸࢒ཹ͠ͳ͍ • ͔͠͠'8΍ϥΠϒϥϦ͕҉໧తʹ4&-&$5Λൃߦ͍ͯ͠ͳ͍͔ʁ • ͔͠͠কདྷతʹτϥϯβΫγϣϯ΍1VC4VCΛ࢖Θͳ͍อূ͸͋Δ͔ʁ • SFEJTSFTFU Ͱ ࠶ར༻લʹඞͣϦηοτ Š%#࣋ଓ઀ଓͱಉ͡ݪଇ • .FNDBDIFE͸ߏ଄తʹঢ়ଶ࢒ཹ͕ൃੜ͠ͳ͍ ʮෆཁͳػೳʯͷݟۃΊ͸ʮඞཁͳػೳʯͱಉ͘͡Β͍ॏཁ 3FEJTͱ.FNDBDIFEͷ࣋ଓ઀ଓͱঢ়ଶ؅ཧ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 49 ؍఺ .FNDBDIFE 3FEJT ઀ଓͷঢ়ଶ εςʔτϨε εςʔτϑϧ ࣋ଓ઀ଓ ҆શʹར༻Մೳ खಈͰঢ়ଶϦηοτ ઀ଓͷঢ়ଶ؅ཧ ෆཁ %#੾Γସ͑౳ͰෳࡶԽ

Slide 51

Slide 51 text

• Ωϟογϡͷ࣋ଓ઀ଓ͸޻਺ରޮՌ͕ߴ͍ • ߴස౓ΞΫηε͕લఏ ˠ࣋ଓ઀ଓͷޮՌ͕ಛʹେ͖͍ • ฒྻॲཧ͕ಘҙ ˠ઀ଓ਺Λؾʹͤͣ࣋ଓ઀ଓΛ࢖͑Δ • ҆શੑ͸ʮ઀ଓ͕ঢ়ଶΛ͔࣋ͭʯͰܾ·Δ • .FNDBDIFEεςʔτϨε ˠ҆શʹར༻Մೳ • 3FEJTεςʔτϑϧ ˠ։ൃऀ͕ঢ়ଶ؅ཧΛߦ͏ ͜͜·Ͱͷ·ͱΊ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 50

Slide 52

Slide 52 text

 ʮ઀ଓʯͷجຊ֓೦ͱ)551  ΞϓϦέʔγϣϯ΁ͷʮ઀ଓʯ  σʔλϕʔε΁ͷʮ઀ଓʯ  Ωϟογϡ΁ͷʮ઀ଓʯ  ֎෦"1*΁ͷʮ઀ଓʯ  ઀ଓ͸ੑೳʹઌཱͭ ΞδΣϯμ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 51

Slide 53

Slide 53 text

)551ϦΫΤετΛʮૹΔʯ৔߹΋ಉ͡ߏ଄ • 5$1઀ଓཱ֬ ˠ5-4ϋϯυγΣΠΫ ˠϦΫΤετ ˠϨεϙϯε • ઀ଓͷίετ͸ɺϦΫΤετΛʮૹΔଆʯʹ΋ൃੜ ͢Δʢࣗ෼ୡ͕خ͍͠ʣ • ʮૹΔଆʯͷίετ࡟ݮ͸ʮड͚Δଆʢ֎෦"1*ʣʯ ʹ΋޷Өڹʢ૬ख͕خ͍͠ʣ ֎෦"1*΁ͷϦΫΤετͱ,FFQ"MJWF 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 52

Slide 54

Slide 54 text

(V[[MFͷ઀ଓ࠶ར༻ $client = new ¥GuzzleHttp¥Client([ 'base_uri' => 'https://example.com' ]); // 最初のリクエスト: 新規接続確立 $client->get('/users'); // 同一ドメインへ再度: 接続を再利用 $client->get('/orders'); •DVSM (V[[MF͸,FFQ"MJWFඪ४ରԠ •ಉ͡ϋϯυϥͳΒ઀ଓ͸࠶ར༻͞ΕΔ •ಉҰϦΫΤετ಺ͷΈͰ༗ޮ •ϦΫΤετΛލ͙ͱ࠶ར༻͞Εͳ͍ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 53

Slide 55

Slide 55 text

-BSBWFM)551ϑΝαʔυͷ઀ଓ࠶ར༻ use GuzzleHttp¥Client; $client = new Client([ 'base_uri' => 'https://example.com', ]); Http::setClient($client)->get('/users'); Http::setClient($client)->get('/orders'); • ,FFQ"MJWF͸σϑΥϧτඇରԠ • δϣϒϫʔΧʔͳͲͰ5PPNBOZPQFOGJMFT Λ༠ൃ͢ΔΤοδέʔε MBSBWFMGSBNFXPSL • )551΍%#ͰͷϦιʔεރׇͱಉ͡ߏ଄ͷ໰୊ • ར༻͢Δ৔߹(V[[MF$MJFOUΛࣗ෼Ͱ؅ཧ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 54

Slide 56

Slide 56 text

1)1DVSM@TIBSF@JOJU@QFSTJTUFOU // リクエストを跨いで再利用可能 $sh = curl_share_init_persistent('my-pool', [ CURL_LOCK_DATA_DNS, CURL_LOCK_DATA_CONNECT, CURL_LOCK_DATA_SSL_SESSION, ]); $client = new ¥GuzzleHttp¥Client([ 'curl' => [CURLOPT_SHARE => $sh], ]); // ❌このコードは ValueError が発生する $sh = curl_share_init_persistent('my-pool', [ /* 省略 */ CURL_LOCK_DATA_COOKIE, ]); ैདྷͷ՝୊ • DVSMϋϯυϥͷ࣋ଓ઀ଓ͸ϦΫΤ ετΛލ͍Ͱ࠶ར༻Ͱ͖ͳ͔ͬͨ 1)1 • ϦΫΤετΛލ͙࠶ར༻͕αϙʔ τ͞Εͨ ঢ়ଶʮ࿙Ӯʯ΁ͷରॲ • $PPLJF৘ใΛؚΉ࣋ଓ઀ଓ͸ϦΫ ΤετΛލ͛ͳ͍ʢ҆શʣ (V[[MFͷରԠঢ়گ • ٞ࿦தHV[[MFHV[[MF • ཁ͸͕࣌ؒແ͍ʢ13׻ܴʣ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 55

Slide 57

Slide 57 text

• ֎෦"1*΁ͷ)551ϦΫΤετʹ΋ʮ઀ଓʯͷίετ • গ͠ͷίʔυमਖ਼Ͱ,FFQ"MJWFରԠՄೳ • ࠶ར༻ʹΑΔϦιʔεރׇϦεΫ͸ґવͱͯ͠ଘࡏ • (V[[MF͸σϑΥϧτରԠͯ͠΋-BSBWFM͸ରԠ͠ͳ͍ཧ༝ • ঢ়ଶͷ࿙ӮϦεΫ͸QIQࣗମͰղܾ͞Ε͍ͯΔ • ϦΫΤετΛލ͗$PPLJFΛڞ༗͢ΔͱΫϥογϡ ͜͜·Ͱͷ·ͱΊ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 56

Slide 58

Slide 58 text

 ʮ઀ଓʯͷجຊ֓೦ͱ)551  ΞϓϦέʔγϣϯ΁ͷʮ઀ଓʯ  σʔλϕʔε΁ͷʮ઀ଓʯ  Ωϟογϡ΁ͷʮ઀ଓʯ  ֎෦"1*΁ͷʮ઀ଓʯ  ઀ଓ͸ੑೳʹઌཱͭ ΞδΣϯμ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 57

Slide 59

Slide 59 text

l ࣮ଘ͸ຊ࣭ʹઌཱͭ MFYJTUFODFQSÉDÈEFMFTTFODF δϟϯʹϙʔϧɾαϧτϧʮ࣮ଘओٛͱ͸Կ͔ʯʢ೥ɺҏਧ෢඙༁ɺਓจॻӃɺ೥ʣ

Slide 60

Slide 60 text

઀ଓͷ࠷దԽΛऴ͑ͨޙɺ ࣍ʹݟΔ΂͖৔ॴ͸Ͳ͔͜ʁ

Slide 61

Slide 61 text

.BY3FRVFTU8PSLFST1)1ϓϩηε਺ Λݻఆͨ͠৔߹ ࠷ऴతʹεϧʔϓοτΛܾΊΔͷ͸Կ͔ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 60 PHPプロセス数 平均レスポンスタイム 処理可能な秒間リクエスト 100 1ms 100,000 100 10ms 10,000 100 10,000ms 10 100 100,000ms 1 レスポンスタイムをn倍速くすれば、全体のキャパシティもn倍になる

Slide 62

Slide 62 text

NFNPSZ@MJNJU͕ద੾ʹઃఆ͞Ε͍ͯΕ͹ • Πϯελϯεຖͷڐ༰Մೳͳ઀ଓ਺͸ݟੵ΋ΕΔ • ੑೳཁ݅ΑΓΠϯελϯεͷαΠζͱ਺Λݟੵ΋ΕΔ ݟੵ΋Εͳ͍ྫ 1)1ϓϩηε਺ͷݶքΛܾΊΔͷ͸Կ͔ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 61 memory_limit MaxRequestWorkers 必要メモリ 32MB 100 3.2GB 1GB 100 100GB NFNPSZ@MJNJUº.BY3FRVFTU8PSLFST࠷େϝϞϦ࢖༻ྔ # エクスポート機能のため上限緩和 memory_limit = 2G

Slide 63

Slide 63 text

ඞཁͳ৔߹͚ͩ૿ྔ͢Δ // php.iniの設定値を一時的に変更するLaravelミドルウェア class PhpIniSet { public function handle( Request $request, ¥Closure $next, string $name, string $value ): Response { ini_set($name, $value); return $next($request); } } // 特定のルートだけメモリ上限を引き上げ Route::get('/logs/xlsx', ...) ->middleware( PhpIniSet::class . ':memory_limit,2G’ ); શମ͸গͳ͘ɺඞཁͳ͚࣌ͩଟ͘ •NFNPSZ@MJNJU͸ʮయܕతͳॲཧʯͰ ඞཁͳ஋ •ॏ͍ॲཧ͸ݸผʹΦϓτΠϯ Πϯϑϥ୲౰ऀ •NFNPSZ@MJNJUͰ֓ࢉΛݟੵ΋Δ ΞϓϦ୲౰ऀ •ॲཧʹԠͯ͡ہॴతʹ૿ྔ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 62

Slide 64

Slide 64 text

ϨεϙϯελΠϜͱϝϞϦ࢖༻ྔͷ ݟੵ΋ΓʹԠͯ͡ɺ ΠϯελϯεͷαΠζͱ਺͸ ࣗ໌ʹܭࢉͰ͖Δɻ ʮਪଌʯͰ͸ͳ͘ʮࣗ໌ͳܭࢉʯ

Slide 65

Slide 65 text

ܭࢉ͸ਖ਼͔͔ͬͨ͠ʁԾઆʹޡΓ͸ͳ͔͔ͬͨʁ ܭଌ͢Δ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 64 サーバ 設定項目 Apache mod_log_config nginx ngx_http_log_module php-fpm access-format Laravel RequestHandledイベント サーバ 設定項目 Apache mod_status nginx stub_status php-fpm pm.status_path レスポンスタイムの計測 ワーカー稼働状況の計測

Slide 66

Slide 66 text

ྫ"QBDIFNPE@TUBUVT $ w3m localhost/server-status Apache Server Status for localhost (via ::1) Server Version: Apache/2.4.66 (Debian) Server MPM: prefork Server Built: 2025-12-05T18:52:34 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Current Time: Saturday, 14-Mar-2026 14:32:04 JST Restart Time: Thursday, 19-Feb-2026 21:15:04 JST Parent Server Config. Generation: 24 Parent Server MPM Generation: 23 Server uptime: 22 days 17 hours 17 minutes Server load: 0.19 0.25 0.15 Total accesses: 4162932 - Total Traffic: 75.7 GB - Total Duration: 198129127 CPU Usage: u787.2 s354.53 cu29342.1 cs9871.63 - 2.06% CPU load 2.12 requests/sec - 40.5 kB/second - 19.1 kB/request - 47.5936 ms/request 31 requests currently being processed, 0 workers gracefully restarting, 80 idle workers K_W_K_K_W__K_R_K_C_K_W_K__K_W__K_R_C_K_W_K__K_W__C_K_W_K_W__K___K...K___K_______ _____________..._______________..._______ Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, "C" Closing connection, "L" Logging, "G" Gracefully finishing, "I" Idle cleanup of worker, "." Open slot with no current process ಋೖํ๏  -PBE.PEVMFͰ༗ޮԽ  63-ެ։͠ΞΫηε੍ݶΛઃఆ Ӿཡํ๏ • ެ։63-΁ΞΫηε • BVUPͰςΩετऔಘ΋Մೳ औಘͰ͖Δ৘ใ • ্൒෼αʔόىಈ͔Βͷྦྷੵ৘ใ • Լ൒෼ݱࡏͷεφοϓγϣοτ • ࠓճ͸4DPSFCPBSEʹ஫໨ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 65

Slide 67

Slide 67 text

4DPSFCPBSEͷಡΈํ݈શͳঢ়ଶ ه߸ͷҙຯ • ˙_ ϦΫΤετ଴ͪ • ˙R ϦΫΤετड৴த • ˙W Ϩεϙϯεૹ৴த • ˙K ઀ଓҡ࣋த ݈શͳΞϓϦέʔγϣϯ • リクエストが増えても W͸ಈ͔ͳ͍ • Kͷ૿ݮ͸ਖ਼ৗͳڍಈ • _ˠRˠWˠKˠRˠ ,FFQ"MJWF͕݈શʹαΠΫϧ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 66

Slide 68

Slide 68 text

4DPSFCPBSEͷಡΈํো֐ͱͦͷஹީ 4FOEJOH3FQMZͷ૿ՃʢϨεϙϯελΠϜͷѱԽʣ • τϥϑΟοΫʹԠͨ͡8૿Ճ͸ཁ஫ҙαΠϯ • 8͚ͩٸ૿͢Δύλʔϯ͸ΫϦςΟΧϧ • εϥογϯάɾഉଞϩοΫɾσουϩοΫͳͲΛٙ͏ 8BJUJOH͕θϩʹ͍ۙͮͨΒةݥ • , 8 ͕࠷େಉ࣌઀ଓ਺ʹഭ͍ͬͯͳ͍͔֬ೝ • ࠷େಉ࣌઀ଓ਺΁౸ୡো֐ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 67

Slide 69

Slide 69 text

ਖ਼ͱෛͷϑΟʔυόοΫϧʔϓ Ϧτϧͷ๏ଇL = λ × W • L: ฏۉ଺ཹ਺ʢγεςϜ಺ͷ઀ଓ૯਺ʣ • λ: ౸ண཰ʢ୯Ґ࣌ؒ͋ͨΓͷ઀ଓཁٻ਺ʣ • W: ฏۉ଺ࡏ࣌ؒʢड෇͔Β׬ྃ·Ͱͷॴཁ࣌ؒʣ Е͕Ұఆͷͱ͖ɺ8Λ൒෼ʹ͢Ε͹-΋൒෼ʹ Ϧιʔεڝ߹ͷ؇࿨ -͕ݮΔͱϓϩηεؒͷୣ͍߹͍͕ݮΓɿ • ίϯςΩετεΠονͷଟൃ͕ऩ·Δ • ϝϞϦஅยԽ͕؇࿨͞ΕΔ • εϥογϯά͕཈੍͞ΕΔ ϑΟʔυόοΫϧʔϓ • ࣗݾڧԽϧʔϓʢ-ͷݮগ͕8Λߋʹ୹ॖͤ͞Δʣ • ٯ͸σεεύΠϥϧʢʮಥવɺݶքΛ௒͑Δʯݱ৅ʣ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 68 自己強化ループ 逆はデススパイラル Wの短縮 Lの減少 リソース競合の緩和 キューイング遅延↓

Slide 70

Slide 70 text

• ʮ઀ଓʯ͸͢΂ͯͷϦΫΤετʹඞͣొ৔͢Δ • ϨεϙϯελΠϜʹର͠ੵΈ্͛ࣜʹ࡞༻͢Δ • ࠷దԽͷجຊݪཧ͸ڞ௨ʢ࣋ଓɾղ์ɾதؒ૚Ͱͷ࠷దԽʣ • ࠷ऴతʹεϧʔϓοτΛܾΊΔͷ͸ΞϓϦέʔγϣϯ • ઀ଓͷ࠷దԽ͸ඞཁ৚݅Ͱ͋Γɺͦͷ౔୆Λ੔͑Δʮ࠷ޙͷҰखʯ • ʮಛఆͷՕॴʯͷνϡʔχϯά͸ґવͱͯ͠ॏཁ • ʮ࠷ޙͷҰखʯ͸࣍ͷվળαΠΫϧͷ౔୆ • શମ͕࠷దԽ͞Εͯ৽ͨͳϘτϧωοΫ͕ݦࡏԽ͢Δ͜ͱ΋ • ࣌ʹ͸؅׋Λඈͼӽ͑ͯશମΛݟΔࢹ࠲΋ඞཁ ·ͱΊ 2026/3/21 #phperkaigi #b 「接続」— パフォーマンスチューニングの最後の一手 69

Slide 71

Slide 71 text

ࠓճ঺հͨ͠ʮجຊݪཧʯΛ ໌೔͔Βશ࣮ͯફͰ͖·͔͢ʁ ஌ࣝͷนɺεΩϧͷนɺ૊৫ͷนཱ͕ͪ;͕͞Δ

Slide 72

Slide 72 text

଍Γͳ͍෦෼Λิ͍߹͏ ͦΕ͕ɺਓͱਓͱͷʮ઀ଓʯͰ͢

Slide 73

Slide 73 text

࠷ޙͷҰख͸ɺ࠷ॳͷҰखͰ΋͋Δ