Reputation: 21
When you are doing your RU calculations for Cosmos DB, do you need to be calculating the max values of reads, inserts, updates and deletes or the average number per second? Reason why I ask is because the average documents read (in current mongo db) is around 5500 but the maximum number of documents read (in on second) over my sampling period was 965880.
I have looked through all of Microsoft's documentation on Costing Cosmos DB and there is no clear guidance on whether the figure for RU throughput is average or max
Upvotes: 2
Views: 6681
Reputation: 21
To avoid throttling you need to provide the MAX throughput you need in RUs. Also, it depends how frequently you hit the max RUs. There are basically 3 ways to provision RUs- Provisioned throughput, Autoscale & Serverless(Preview).
If you provision standard (manual) RU/s at the entry point of 400 RU/s, you won't be able to consume above 400 RU/s, unless you manually change the throughput. You'll be billed for 400 RU/s at the standard (manual) provisioned throughput rate, per hour.
If you provision autoscale throughput at the entry point of max RU/s of 4000 RU/s, the resource will scale between 400 to 4000 RU/s. Since the autoscale throughput billing rate per RU/s is 1.5x of the standard (manual) rate, for hours where the system has scaled down to the minimum of 400 RU/s, your bill will be higher than if you provisioned 400 RU/s manually. However, with autoscale, at any time, if your application traffic spikes, you can consume up to 4000 RU/s with no user action required. In general, you should weigh the benefit of being able to consume up to the max RU/s at any time with the 1.5x rate of autoscale.
For small applications with a low expected traffic, you can also consider the serverless capacity mode, which bills you as you use.
Use the Azure Cosmos DB capacity calculator to estimate your throughput requirements.
Should definitely go through this and related pages of documentation- https://learn.microsoft.com/en-us/azure/cosmos-db/request-units
Upvotes: 1
Reputation: 15991
As you said there's no MS document on 'average or max' for setting throughput, in my opinion, both average and max are meaningful, but we also need to look at the most common situation, for example, there's always around 5800 per second, and also usually 4500 per second, the min is 3000 and the max is 9000. 1 RU means '1KB doc read', if we set the max number as the throughput, it's expensive and waste, if we set the average, maybe the system usually 'in debt' as the answer said. That's why I say we also need to consider the 'most common' situation.
By the way, MS provides a web based tool for helping estimate the request unit requirements for typical operations. If admin also don't know the real situation about the database, I think this doc may help, in short for the doc, that says, if you're building a new application or a small application, you can start at the minimum RU/s to avoid over-provisioning in the beginning. After running the application for some time, maybe you can use azure monitor to determine if your traffic pattern is suitable.
Upvotes: 1