Explaining Database Transaction Units (DTUs) and elastic Database Transaction Units (eDTUs)
This article explains Database Transaction Units (DTUs) and elastic Database Transaction Units (eDTUs) and what happens when you hit the maximum DTUs or eDTUs.
What are Database Transaction Units (DTUs)
A DTU is a unit of measure of the resources that are guaranteed to be available to a single Azure SQL database at a specific performance level within a single database service tier. A DTU is a blended measure of CPU, memory, and data I/O and transaction log I/O in a ratio determined by an OLTP benchmark workload designed to be typical of real-world OLTP workloads. Doubling the DTUs by increasing the performance level of a database equates to doubling the set of resource available to that database. For example, a Premium P11 database with 1750 DTUs provides 350x more DTU compute power than a Basic database with 5 DTUs. To understand the methodology behind the OLTP benchmark workload used to determine the DTU blend, see SQL Database benchmark overview.
You can change service tiers at any time with minimal downtime to your application (generally averaging under four seconds). For many businesses and apps, being able to create databases and dial performance up or down on demand is enough, especially if usage patterns are relatively predictable. But if you have unpredictable usage patterns, it can make it hard to manage costs and your business model. For this scenario, you use an elastic pool with a certain number of eDTUs.
What are elastic Database Transaction Units (eDTUs)
An eDTU is a unit of measure of the set of resources (DTUs) that can be shared between a set of databases on an Azure SQL server - called an elastic pool. Elastic pools provide a simple cost effective solution to manage the performance goals for multiple databases that have widely varying and unpredictable usage patterns. See elastic pools and service tiers for more information.
A pool is given a set number of eDTUs, for a set price. Within the elastic pool, individual databases are given the flexibility to auto-scale within the configured boundaries. Under heavy load, a database can consume more eDTUs to meet demand while databases under light loads consume less, up to the point that databases under no load consume no eDTUs. By provisioning resources for the entire pool, rather than per database, management tasks are simplified and you have a predictable budget for the pool.
Additional eDTUs can be added to an existing pool with no database downtime and with no impact on the databases in the pool. Similarly, if extra eDTUs are no longer needed, they can be removed from an existing pool at any point in time. You can add or subtract databases to the pool, or limit the amount of eDTUs a database can use under heavy load to reserve eDTUs for other databases. If a database is predictably under-utilizing resources, you can move it out of the pool and configure it as a single database with predictable amount of resources it requires.
How can I determine the number of DTUs needed by my workload?
If you are looking to migrate an existing on-premises or SQL Server virtual machine workload to Azure SQL Database, you can use the DTU Calculator to approximate the number of DTUs needed. For an existing Azure SQL Database workload, you can use SQL Database Query Performance Insight to understand your database resource consumption (DTUs) to get deeper insight into how to optimize your workload. You can also use the sys.dm_db_ resource_stats DMV to get the resource consumption information for the last one hour. Alternatively, the catalog view sys.resource_stats can also be queried to get the same data for the last 14 days, although at a lower fidelity of five-minute averages.
How do I know if I could benefit from an elastic pool of resources?
Pools are suited for a large number of databases with specific utilization patterns. For a given database, this pattern is characterized by low average utilization with relatively infrequent utilization spikes. SQL Database automatically evaluates the historical resource usage of databases in an existing SQL Database server and recommends the appropriate pool configuration in the Azure portal. For more information, see when should an elastic pool be used?
What happens when I hit my maximum DTUs
Performance levels are calibrated and governed to provide the needed resources to run your database workload up to the max limits allowed for your selected service tier/performance level. If your workload is hitting the limits in one of CPU/Data IO/Log IO limits, you continue to receive the resources at the maximum allowed level, but you are likely to see increased latencies for your queries. These limits do not result in any errors, but rather a slowdown in the workload, unless the slowdown becomes so severe that queries start timing out. If you are hitting limits of maximum allowed concurrent user sessions/requests (worker threads), you see explicit errors. See Azure SQL Database resource limits for information on limit on resources other than CPU, memory, data I/O, and transaction log I/O.
- See Service tier for information on the DTUs and eDTUs available for single databases and for elastic pools.
- See Azure SQL Database resource limits for information on limit on resources other than CPU, memory, data I/O, and transaction log I/O.
- See SQL Database Query Performance Insight to understand your (DTUs) consumption.
- See SQL Database benchmark overview to understand the methodology behind the OLTP benchmark workload used to determine the DTU blend.