S3 prefix request rate calculator

Amazon S3 serves at least 3,500 writes and 5,500 reads a second for each partitioned prefix, and answers 503 Slow Down while it scales past that. Whether you hit the limit depends on how your object keys spread traffic. Set the request rates and the key layout, and see which prefixes are over, and what client retries do to the load.

Served / s
9,000
503 / s
70,258
Key layout

Keys like logs/2026/10/16/14/7f3a….json. Every write in the current hour shares one prefix, so all of them land on whatever capacity that prefix has.

Load on each prefix
#1
10,000 PUT · 20,000 GET
PUT GET documented rate: 3,500 PUT / 5,500 GET a second (bars run to twice that)
Over one minute, every prefix at the documented rate
80,27400 s60 s
requests arriving (new and retries) served 503 Slow Down
Per second
Requests sent by the application
30,000
Served
9,000
503 Slow Down responses
70,258
Failed after 3 attempts
20,363
Attempts per request
2.64
Prefixes needed

At least 3 for 10,000 writes and 4 for 20,000 reads a second, if traffic is spread evenly between them. With this layout 1 prefix is over the documented rate.

S3 raises capacity for a busy prefix gradually, so real 503s fade as it scales; the model shows the worst case, before it has.

How to use the calculator

Enter the write (PUT, COPY, POST, DELETE) and read (GET, HEAD) rates your application sends to one bucket, then describe how its keys spread them: how many prefixes are in use at once and what share the busiest one gets. The bars compare each prefix's load with the documented per-prefix rates. The chart runs a minute of traffic with every prefix held at those rates, the situation before S3 has scaled, and shows what the client's retries add.

What a prefix is

S3 stores objects under flat string keys; the slashes in logs/2026/10/16/app.json are just characters, and the console's folders are a display convention. A prefix is any leading part of a key, such as logs/ or logs/2026/10/. Behind the scenes S3 divides a bucket's key space into partitions by prefix and gives each its own request capacity, adding partitions as traffic grows.

The documented request rates

The S3 User Guide states that an application can achieve at least 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second per partitioned prefix, that there is no limit on the number of prefixes in a bucket, and that performance grows with parallelism across prefixes: ten prefixes can serve 55,000 reads a second. It also says scaling to higher rates "happens gradually and is not instantaneous", and that S3 may return 503 Slow Down errors while it scales.

So the question for a design is not the bucket's total rate but the rate aimed at each part of the key space. 10,000 writes and 20,000 reads a second need at least 3 and 4 prefixes' worth of capacity, and only if the keys spread the traffic over them.

Key layout and hot prefixes

A date-first layout such as logs/2026/10/16/14/… sends every write in the current hour under the same prefix, however many prefixes the bucket has in total. With 10,000 writes and 20,000 reads a second, a single prefix at the documented rates serves 9,000 a second and turns the rest away. Putting a short hash first, logs/a/2026/10/16/… with 16 values, spreads the same traffic over 16 prefixes, each well under its rate: all 30,000 requests a second are served.

Spreading has to be even to help. A tenant-first layout with 40 tenants looks well spread, but if one tenant sends 40% of the traffic, its prefix carries 4,000 writes and 8,000 reads a second on its own, and the model serves 27,000 of 30,000. The fix is the same: a hash or shard number inside the big tenant's keys.

503 Slow Down and retries

A 503 Slow Down is a signal to back off, and AWS SDKs retry it automatically with exponential backoff and full jitter; their standard retry mode makes up to 3 attempts by default, and the SDK reference guide gives a 1,000 ms base delay for throttling errors and a 20 s cap, the defaults used here. Retries smooth out a short burst. Under sustained overload, though, every rejected request comes back, so the hot prefix receives more requests than the application sends: with all traffic on one prefix and 3 attempts, it gets 79,258 requests a second for 30,000 sent, 2.64 attempts per request, and still serves only 9,000. Raising the attempts to 10 pushes the arrivals to 170,155 a second without serving any more. Without retries, 21,000 requests a second simply fail.

Retries buy time while S3 scales; they do not replace spreading the keys. Watching the 503 rate, for example with S3 request metrics in CloudWatch, shows when a layout is close to its limit.

The old advice to randomise

Before July 2018, AWS advised adding random characters, such as a hash, to the start of keys for workloads with high request rates. That month it announced the per-prefix rates above and said the increase removed the earlier guidance to randomise prefixes. A hash in front of a hot, date-ordered key is still a sound way to spread sustained traffic over several prefixes; what changed is that ordinary layouts no longer need it, and listing objects by date stays simple when the date comes first and traffic is modest.

S3 request rate questions and answers

What is the S3 request rate limit per prefix?

AWS documents that an application can achieve at least 3,500 PUT, COPY, POST or DELETE requests and 5,500 GET or HEAD requests per second per partitioned prefix, with no limit on the number of prefixes in a bucket. Ten prefixes, for example, can serve 55,000 reads a second.

What is an S3 prefix?

The beginning of an object key, up to some point. S3 has no real folders; a key such as logs/2026/10/16/app.json is one string, and logs/ and logs/2026/ are prefixes of it. S3 partitions a bucket's key space by prefix, and the request rates apply to each partitioned prefix.

What does 503 Slow Down from S3 mean?

The bucket is getting more requests for some prefix than S3 is currently set up to serve. S3 scales up gradually and returns 503 Slow Down while it does; AWS says the errors go away once scaling is complete. Clients should retry with exponential backoff and jitter.

Do I still need random prefixes in S3?

Not for the reason they used to be recommended. When AWS raised the per-prefix rates in July 2018 it said the increase removed the earlier guidance to randomise prefixes. What still matters is that traffic above a few thousand requests a second is spread over several prefixes, rather than all aimed at one, such as the current hour of a date-based layout.

How many prefixes do I need?

At least the request rate divided by the per-prefix rate, for writes and reads separately, with traffic spread evenly between them. 10,000 writes and 20,000 reads a second need at least 3 and 4 prefixes; in this page's model 16 evenly used prefixes serve all 30,000 requests a second with no 503s.

Do retries help with S3 throttling?

They let a short burst through, but under sustained overload they add load. With all 30,000 requests a second aimed at one prefix and 3 attempts each, that prefix receives 79,258 requests a second, 2.64 attempts per request; with 10 attempts, 170,155. The successful rate stays at the prefix's capacity either way.

Further reading

Published Updated