Data store server limits outdated/incorrect.

The limits listed on this page appear to be wrong, when using the DataStoreService:GetRequestBudgetForRequestType in a private server with only 1 player I get significantly higher values returned than expected.

I have provided a list of documentation stated values and GetRequestBudgetForRequestType values below. numPlayers is 1 in every one of these cases:

Get Async / Set Async:

  • Documentation: 70 (60 + numPlayers * 10)
  • GetRequestBudgetForRequestType: 300

Ordered Set:

  • Documentation: 35 (30 + numPlayers * 5)
  • GetRequestBudgetForRequestType: 105

Get Sorted / Get Version / List / Remove Version:

  • Documentation: 7 (5 + numPlayers * 2)
  • GetRequestBudgetForRequestType: 21

If the contents on this page could be updated to represent the new formulas used to determine the request limit this would be greatly appreicated.

Page URL: https://create.roblox.com/docs/cloud-services/data-stores/error-codes-and-limits#server-limits

1 Like

These values aren’t necessarily wrong.
It is known that these requests built up over time when you are not using them.

These topics might help explain it.

I was not aware of this. Do you have a source for this info? Generally I don’t think people expect rate limits to “build up.”

1 Like

If this is the case then it is not documented on this page. I suspected some kind of build up to be the case but it seemed extremely weird for a request limit to work like this. I did test for this by starting up a new server and printing the request limit and I got the same results immediately and they never increased or decreased.

1 Like

I don’t have an official source for this but just as op mentioned. it’s not really documented anywhere. i’ve ran a few tests (using GetAsync)

I’ve waited for the limit to build up all the way to 300 and pasted the following code in the commands bar:

for i = 1, 300 do
    task.defer(function()
        game:GetService("DataStoreService"):GetDataStore("Test"):GetAsync("test")
    end)
end

And just as i thought all requests went through without any warnings or errors.
The budget now dropped down to 0 just as we would expect.
image

Now i’ve waited for the budget to climb back to 300 and it took exactly 3 minutes.
This means it was climbing at a rate of 100 requests per minute instead of 70 (60 + numPlayers * 10) per minute we would expect.
This is still a mystery for me.

Now that the budget is at 300 again i ran the same code from before accept i ran it 310 times instead of 300 times.

for i = 1, 310 do
    task.defer(function()
        game:GetService("DataStoreService"):GetDataStore("Test"):GetAsync("test")
    end)
end

And just as i thought we got exactly 9(?) warnings

My guess to why it’s 9 and not 10 is because while we were making the 300 requests we received some new budget causing only 9 to be over the limit instead of 10.

So to sum it all up it looks like we can use 300 requests at once in a single burst if only on average we stay below (60 + numPlayers * 10) 70 requests per minute.
So as long as your long term average doesn’t exceed the limit you’re free to occasionally go way above the 70 requests per minute.

1 Like

Hey all, thanks for the report. I’ve confirmed the limits are accurate and added a sentence to that section. We don’t want to guarantee it or put a number on it, but servers often get a one-time allotment of additional requests when they start up. You can also check out this post for some additional details on our future plans: DataStores Access and Storage Updates

1 Like