Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
1MBの壁にぶつかった話
Search
赤神青空
PRO
September 03, 2026
Video
Programming
43
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1MBの壁にぶつかった話
赤神青空
PRO
September 03, 2026
Video
More Decks by 赤神青空
See All by 赤神青空
【AWS資格のニュース】SAP が SAP-C03 に変わります
akagami
PRO
0
2
【力学 #5】単振り子と小角近似
akagami
PRO
0
5
【AIニュース】Genie 4 とは何か
akagami
PRO
0
15
【基本情報対策】IPアドレスとサブネットマスク
akagami
PRO
0
15
GPT-6 Cyber とは何か
akagami
PRO
0
15
【AWSの新サービス】Amazon ECS Gateway とは何か
akagami
PRO
0
20
【力学 #4】単振動:ばねの運動方程式を解く
akagami
PRO
0
9
【力学 #4】単振動:ばねの運動方程式を解く
akagami
PRO
0
10
Cloudflare の AI で他人の会話が混ざった?
akagami
PRO
0
27
Other Decks in Programming
See All in Programming
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.3k
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.3k
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
220
AI-Powered Domain-Driven Design
ziobrando
0
430
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
650
SODA - FACT BOOK(EN)
sodainc
1
230
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
740
小さなアプリを作って公開するまで
onozaty
0
160
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.5k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
420
Getting Started with Vibe Coding
miccheng
0
200
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
330
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
670
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Testing 201, or: Great Expectations
jmmastey
46
8.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Typedesign – Prime Four
hannesfritz
42
3.2k
Skip the Path - Find Your Career Trail
mkilby
1
290
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
980
Transcript
2026年8月 1MB の壁にぶつかった話 ローカルでは絶対に再現しない 赤神 青空 SCOM
▪アンケートの集計ツール/NestJS 前提:本番だけ Data API を挟んでいる + TypeORM + Aurora ローカル開発環境
Docker の PostgreSQL に通常のドライバで直結 結果セットのサイズ上限がない だから、このバグは一度も再現しない 本番環境 Lambda から Data API 経由で Aurora へ VPC 内に Lambda を置かずに済む構成 1クエリの結果セットは 1MB まで この一点の差だけが、今日の話の全てです。 今ココ 前提 2/10
▪その間、デプロイもコード変更もしていない 症状:昼は動いていた画面が、夜には 500 昼 21:18 翌朝 +15分 今ココ 症状 担当者が「回答一覧」画面を普通に使えていた
同じ画面が HTTP 500。以降ずっと開けない 「まだ再現している」と報告 本番のログを見て、1行で原因確定 3/10
▪コードから立てた仮説は、どれも「形は合っている」 外れた仮説 500 が返る経路として、まず2つを疑った。 どちらも、症状の形とは矛盾していなかった。 01 02 判定が failure だと例外
→ そのまま 500。「403 ではなく 500」と 形が合う 前日に修正を2件入れていた。調べたら dev 止まりで本番未反映だ った 認可ライブラリ 今ココ 調査 デプロイ不整合 4/10
▪本番の ログ1行で確定した Lambda ロググループに、同じ例外が繰り返し出ていた The result exceeds the size limit
1 MB. Data API の仕様 1クエリの結果セットは 1MB まで。超えると API が 400 を 返す。 設定では変えられない Data API 側の固定値。結果サイズを減らして下回らせるし かない。 フレームワークがこの例外を拾えず、そのまま 500 になって画面に出ていた。 今ココ 真因 5/10
▪一覧を取得しているのは、これだけ 犯人のコード 特殊なことは何もしていない。ごく普通の書き方。 ts this.responses.find({ where: { surveyId, collectorId },
relations: { respondent: { organization: true }, answers: { question: true }, }, }) 今ココ 真因 6/10
▪552 行 既定では、1本の LEFT JOIN になる = 46 回答 ×
12 設問。各行に回答データが丸ごと乗る 意図している姿 実際に返ってきたもの 46 件 552 行(46 回答 × 12 設問) 回答 ︙ 回答A 回答データ 4.8KB 設問1 回答データ 4.8KB 回答B 回答データ 4.8KB 設問2 回答データ 4.8KB 設問3 回答データ 4.8KB 設問4 回答データ 4.8KB 合計 220KB 設問への回答 LEFT JOIN 552 行 値だけの軽い行 ︙ 同じ回答データが 552 回コピーされる 結果セットのサイズ(概算) 上限 1MB ︙ 概算 2.5MB 回答データは 46 個ぶんだけ 1MB を超えた瞬間に Data API が 400 1MB に対して十分に軽い アプリ側は拾えず、そのまま 500 1行に付いている重い荷物が、552回コピーされている(2.5MB は概算) 今ココ 真因 7/10
▪まだ答えていない設問には、行がそもそも存在しない 伏線回収:このバグは時間とともに発症する 行が増える → 回答が集まる 行が増える → 回答データの複製も 閾値へ 設問が埋まっていく
昼は開けたのに夜は落ちた その日のうちに回答が集まり、閾値を越 えた。 今ココ 真因 その分だけ増える 壊れ方が特殊 リリースを疑っても、原因はそこにな い。 突然 500 デプロイなしで 壊れる 静かに近づく 動いているうちは、誰も気づけない。 8/10
▪上限は変えられないので、結果サイズを減らす 直し方 01 直積をやめる(relationLoadStrategy) テーブルごとに別クエリで取らせる。552行 → 46行 + 軽い552行に分かれ、掛け算の構造が消える。 02
重いカラムを読まない(射影) 一覧が使うのは受付番号と回答者名だけ。必要な列だけ取ると1件 数KB → 百数十バイト。余裕が2桁変わる。 03 それでも上限との距離は残る 設問への回答は 回答件数 × 設問数 で育つ。12設問なら回答800件規模で再び当たる(概算)。 今ココ 対処 9/10
▪今日いちばん言いたいこと まとめ ローカルの緑が保証しているのは、 ローカルで動くことだけ。 この修正が効いたことは 1MB上限が無いので、修正前のコードも普通に動く。 「直った」の最終確認は 本番にデプロイした後にしかできない。PR にもその旨を明 記した。
ORM のデフォルトは、その先にどんなサービスが挟まっているかを知らない。 今ココ まとめ 10/10