S3は「速いストレージ」ではありません。正確には「スケールする throughput を持つが、単発の操作は速くない」ストレージです。この性質を知らずに大量のバッチ出力やログをS3に叩き込むと、スロットリングと請求とLISTの遅さで足をすくわれます。S3の性能の癖を、設計に効く粒度で掘ります。

01書き込み速度の正体 — 単発は遅い、並列で稼ぐ

まず誤解を解きます。S3のPUTは、ローカルディスクのように「1本のストリームが爆速」ではありません。1回のPUTのレイテンシは数十ミリ秒オーダーで、単一ストリームのスループットはそれほど高くない。S3の速さは「並列度」から生まれます。複数のオブジェクトを同時にPUTする、大きなオブジェクトはマルチパートで分割して並列に送る——これで初めて高いスループットが出ます。

「S3に大きいファイルを1本、順次書き込む」設計は、S3の一番遅い使い方です。この癖を知らないSIerが「S3、思ったより遅い」と言うのは、たいてい並列化していないのが原因です。

021プレフィックスあたりの壁 — 3,500 PUT / 5,500 GET

S3の性能を語るうえで外せない数字です。S3は1つのプレフィックスあたり、毎秒少なくとも3,500回のPUT/COPY/POST/DELETE、5,500回のGET/HEADまでスケールします。そしてこの上限は「プレフィックスごと」なので、複数のプレフィックスに分散すれば全体のスループットは足し算で伸びます。

03503 SlowDown — スロットリングは起きる

プレフィックスへのリクエストが上限を超えたり、パーティションの自動調整が追いつかないと、S3は503 SlowDownを返してスロットリングします。SDKは指数バックオフでリトライしますが、大量の並列バッチが同じプレフィックスに殺到すると、リトライ多発で全体が遅くなります。

現場のコツ:夜間バッチが一斉に同じ日付プレフィックス(例:output/2026-07-07/)に数十万オブジェクトを書き込む設計は、ホットプレフィックスの典型です。書き込み先を分散するか、書き込みレートを制御してください。「S3は無限にスケールするから何も考えなくていい」は、バースト時には成り立ちません。

04マルチパートアップロード — 大きいものは分割して並列に

大きなオブジェクトは、マルチパートアップロードで分割して並列に送るのが定石です。ある程度(目安として100MB超)から効果が出て、非常に大きいオブジェクトでは必須になります。利点は速度(並列化)と回復力(失敗したパートだけ再送)。

05スモールファイル問題 — 無数の小オブジェクトが招く地獄

S3で最も静かに、しかし深刻に効いてくるのがこれです。数百万〜数億の小さいオブジェクトは、次の三重苦を招きます。

対策は集約です。細かいレコードは、Parquet等の列指向フォーマットにまとめて「大きいファイル少数」にする。ログも、細切れに吐くのではなく、ある程度バッファして束ねてから置く。「小さいファイルを大量に」はS3の最も苦手なパターンだと覚えてください。

まとめ

S3の性能は、ディスクの速さではなく「並列度とプレフィックス分散」で決まります。単発PUTは速くない、1プレフィックス3,500/5,500の壁、ホットプレフィックスの503、マルチパートでの並列化、そしてスモールファイルの三重苦。これらを踏まえて「並列に・分散して・大きく束ねて」書けば、S3は桁違いのスループットを出します。SIerが「S3遅い」とつまずくポイントは、ほぼ全部この癖の裏返しです。次は全ストレージをS3へ集約する設計へ。

S3を高スループットで使う設計(キー・プレフィックス設計、マルチパート、スモールファイル対策)は、バッチやログ基盤の性能を左右します。EMWは「S3が遅い」の原因特定から、スケールする設計までご支援します。

相談する
← ブログ一覧へ戻る