Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
1MBの壁にぶつかった話
Search
赤神青空
September 03, 2026
Programming
20
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1MBの壁にぶつかった話
赤神青空
September 03, 2026
More Decks by 赤神青空
See All by 赤神青空
Vitest5.0は何が速くなったのか
akagami
0
8
Zod4.5を10分で
akagami
0
18
S3ライフサイクル入門
akagami
0
17
Viteはサーバーとクライアントを判定していない
akagami
0
24
【AWS RDS解説】待機系は読めるのか
akagami
0
24
OpenAI と Cursor、決裂までの3年
akagami
0
43
「まずはAI」の前に、分けて考える
akagami
0
28
【AWS Dogwood入門】使い分けと、採用するときの注意
akagami
0
17
【AWS Dogwood入門】認可はどこに置かれているか
akagami
0
31
Other Decks in Programming
See All in Programming
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
100
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
350
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
180
VibeCodingからAgenticWorkflowへ
starfish719
0
1k
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
340
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
120
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
260
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.8k
AIエージェント時代のコードレビューを設計する
nogu66
5
1.1k
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
400
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
770
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
500
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
We Are The Robots
honzajavorek
0
320
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
180
Tell your own story through comics
letsgokoyo
1
1.1k
A Modern Web Designer's Workflow
chriscoyier
698
190k
So, you think you're a good person
axbom
PRO
2
2.1k
Leo the Paperboy
mayatellez
8
2.2k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
230
Test your architecture with Archunit
thirion
2
2.4k
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