1. S3 Baseline Performance

S3 automatically scales to high request rates. Understanding the baseline performance helps you identify when optimization is needed.

S3 Performance Baseline S3 supports: 3,500 PUT/COPY/POST/DELETE requests per second per prefix. 5,500 GET/HEAD requests per second per prefix. There is no limit on the number of prefixes in a bucket. These limits are per prefix, so distributing objects across prefixes multiplies your throughput.

2. Prefix-Based Performance

Since S3 performance scales per prefix, the key design (prefix structure) directly affects throughput.

Example: Single prefix = limited throughput
  my-bucket/images/photo1.jpg
  my-bucket/images/photo2.jpg
  my-bucket/images/photo3.jpg
  Prefix: images/ → 3,500 writes/s, 5,500 reads/s total

Example: Multiple prefixes = multiplied throughput
  my-bucket/images/2024/01/photo1.jpg  (prefix: images/2024/01/)
  my-bucket/images/2024/02/photo2.jpg  (prefix: images/2024/02/)
  my-bucket/images/2024/03/photo3.jpg  (prefix: images/2024/03/)
  3 prefixes → 3 × 3,500 = 10,500 writes/s, 3 × 5,500 = 16,500 reads/s


3. Upload Optimization


Multipart Upload

  1. Required for objects > 5 GB. Recommended for objects > 100 MB.
  2. Splits the file into parts and uploads in parallel
  3. Each part can retry independently on failure
  4. Significantly faster than single-stream upload for large files


S3 Transfer Acceleration

  1. Uses CloudFront Edge Locations as entry points for uploads
  2. Data travels over AWS’s optimized private backbone network
  3. Best for: long-distance uploads (e.g., uploading from Asia to us-east-1)
  4. Endpoint: my-bucket.s3-accelerate.amazonaws.com
  5. Compatible with Multipart Upload
  6. Test with the S3 Transfer Acceleration Speed Comparison tool

4. Download Optimization


S3 Byte-Range Fetches

  1. Request specific byte ranges of an object instead of downloading the whole file
  2. Parallelize downloads by requesting multiple ranges simultaneously
  3. Resume failed downloads by re-requesting only the failed range
  4. Retrieve only partial data (e.g., first 50 bytes for a file header)


CloudFront (CDN) Integration

  1. Cache S3 content at 400+ Edge Locations worldwide
  2. Dramatically reduces latency for global users
  3. Reduces load on S3 (requests served from cache, not S3)
  4. Can restrict direct S3 access using OAC (Origin Access Control), so users must go through CloudFront

5. S3 Select & Glacier Select

S3 Select allows you to retrieve only a subset of data from an object using SQL expressions, rather than downloading the entire object.


Key Features

  1. Run simple SQL queries (SELECT, WHERE, LIMIT) directly on S3 objects
  2. Supported formats: CSV, JSON, Parquet
  3. Returns only the matching data — reduces data transfer and processing time
  4. Up to 400% faster and 80% cheaper than downloading and filtering the full object
  5. Works with GZIP and BZIP2 compressed files
Example: S3 Select SQL

-- File: sales-data.csv (10 GB)
SELECT s.product, s.revenue
FROM S3Object s
WHERE s.revenue > 10000
  AND s.region = 'US-East'

-- Instead of downloading 10 GB, you get only
-- the matching rows (maybe 50 MB). 200x less data!


Glacier Select

  1. Same concept, but for objects in Glacier storage
  2. Query archived data without restoring the entire object
  3. Useful for: compliance queries on archived data

6. S3 Performance Best Practices Summary

7. KMS Throttling with SSE-KMS

  1. When using SSE-KMS, every upload calls GenerateDataKey, and every download call decrypts on KMS
  2. KMS has request quotas: 5,500–30,000 requests/second per Region
  3. High-throughput buckets can hit KMS throttling
  4. Solutions: 1) Enable S3 Bucket Keys (reduces calls by 99%). 2) Request a KMS quota increase.
Exam Tip S3 Performance: 3,500 PUT + 5,500 GET per second per prefix. More prefixes = more throughput. "Speed up large uploads" = Multipart Upload + Transfer Acceleration. "Speed up downloads" = Byte-Range Fetches + CloudFront. "Query data without downloading" = S3 Select. "KMS throttling" = enable S3 Bucket Keys. "Long-distance uploads" = Transfer Acceleration.