Limites de recursos do banco de dados SQL e governança de recursosSQL Database resource limits and resource governance

Este artigo fornece uma visão geral dos limites de recursos do Banco de Dados SQL para um servidor do Banco de Dados SQL que gerencia bancos de dados individuais e pools elásticos.This article provides an overview of the SQL Database resource limits for a SQL Database server that manages single databases and elastic pools. Ele fornece informações sobre o que acontece quando esses limites de recursos são atingidos ou ultrapassados e descreve os mecanismos de governança de recursos usados para impor esses limites.It provides information on what happens when those resource limits are hit or exceeded, and describes the resource governance mechanisms used to enforce these limits.

Observação

Para limites de Instância Gerenciada, consulte Limites de recursos do Banco de Dados SQL para instâncias gerenciadas.For Managed Instance limits, see SQL Database resource limits for managed instances.

Limites máximos de recursosMaximum resource limits

GruposResource LimiteLimit
Bancos de dados por servidorDatabases per server 5.0005000
Número padrão de servidores por assinatura por regiãoDefault number of servers per subscription in any region 2020
Número máximo padrão de servidores por assinatura por regiãoMax number of servers per subscription in any region 200200
DTU / cota de eDTU por servidorDTU / eDTU quota per server 54.00054,000
Cota de vCore por servidor/instânciavCore quota per server/instance 540540
Pools de máx por servidorMax pools per server Limitado pelo número de DTUs ou vCores.Limited by number of DTUs or vCores. Por exemplo, se cada pool tiver 1.000 DTUs, um servidor poderá dar suporte a 54 pools.For example, if each pool is 1000 DTUs, then a server can support 54 pools.

Observação

Para obter mais cota de DTU/eDTU, cota de vCore ou mais servidores do que o valor padrão, uma nova solicitação de suporte pode ser enviada no portal do Azure para a assinatura com o tipo de problema "cota".To obtain more DTU/eDTU quota, vCore quota, or more servers than the default amount, a new support request can be submitted in the Azure portal for the subscription with issue type “Quota”. A cota de DTU/eDTU e o limite de banco de dados por servidor restringem o número de pools elásticos por servidor.The DTU/eDTU quota and database limit per server constrains the number of elastic pools per server.

Importante

Conforme o número de bancos de dados vai se aproximando do limite por servidor do Banco de Dados SQL, pode ocorrer o seguinte:As the number of databases approaches the limit per SQL Database server, the following can occur:

  • Aumento de latência nas consultas em execução no banco de dados mestre.Increasing latency in running queries against the master database. Isso inclui modos de exibição de estatísticas de utilização de recursos, como sys.resource_stats.This includes views of resource utilization statistics such as sys.resource_stats.
  • Aumento de latência nas operações de gerenciamento e pontos de vista do portais de renderização que envolvem a enumeração de bancos de dados no servidor.Increasing latency in management operations and rendering portal viewpoints that involve enumerating databases in the server.

Tamanho de armazenamentoStorage size

Para tamanhos de armazenamento de recursos de bancos de dados únicos, consulte limites de recursos baseados em DTU ou limites de recursos baseados em vCore para os limites de tamanho de armazenamento por tipo de preço.For single databases resource storage sizes, refer to either DTU-based resource limits or vCore-based resource limits for the storage size limits per pricing tier.

O que acontece quando os limites de recursos do banco de dados são atingidosWhat happens when database resource limits are reached

Computação (DTUs e eDTUs/ vCores)Compute (DTUs and eDTUs / vCores)

Quando a utilização de computação de banco de dados (medida por DTUs e eDTUs ou vCores) se torna alta, a latência de consulta aumenta e as consultas podem até mesmo atingir o tempo limite. Sob essas condições, as consultas podem ser enfileiradas pelo serviço e são fornecidas recursos para execução à medida que os recursos são liberados.When database compute utilization (measured by DTUs and eDTUs, or vCores) becomes high, query latency increases, and queries can even time out. Under these conditions, queries may be queued by the service and are provided resources for execution as resources become free. Ao encontrar uma utilização alta de computação, as opções de atenuação incluem:When encountering high compute utilization, mitigation options include:

ArmazenamentoStorage

Quando o espaço usado do banco de dados atingir o limite de tamanho máximo, inserções e atualizações do banco de dados que aumentam o tamanho dos dados falharão, e os clientes receberão uma mensagem de erro.When database space used reaches the max size limit, database inserts and updates that increase the data size fail and clients receive an error message. As instruções SELECT e DELETE continuam a ter sucesso.SELECT and DELETE statements continue to succeed.

Ao encontrar uma utilização alta de espaço, as opções de atenuação incluem:When encountering high space utilization, mitigation options include:

Sessões e trabalhos (solicitações)Sessions and workers (requests)

O número máximo de sessões e trabalhos é determinado pela camada de serviço e pelo tamanho da computação (DTUs/eDTUs ou vCores.The maximum number of sessions and workers are determined by the service tier and compute size (DTUs/eDTUs or vCores. Novas solicitações serão rejeitadas quando os limites de sessão ou de trabalho forem atingidos, e os clientes receberão uma mensagem de erro.New requests are rejected when session or worker limits are reached, and clients receive an error message. Embora o número de conexões disponíveis possa ser controlado pelo aplicativo, o número de trabalhos simultâneos costuma ser mais difícil de ser estimado e controlado.While the number of connections available can be controlled by the application, the number of concurrent workers is often harder to estimate and control. Isso é especialmente verdadeiro durante períodos de pico de carga quando os limites de recursos do banco de dados são atingidos e os trabalhadores se acumulam devido a consultas em execução mais longas, cadeias de bloqueio grandes ou paralelismo de consulta excessivo.This is especially true during peak load periods when database resource limits are reached and workers pile up due to longer running queries, large blocking chains, or excessive query parallelism.

Ao encontrar uma utilização alta de sessão ou trabalho, as opções de atenuação incluem:When encountering high session or worker utilization, mitigation options include:

Governança de recursosResource governance

Para impor limites de recursos, o banco de dados SQL do Azure usa uma implementação de governança de recursos baseada em SQL Server resource governor, modificado e estendido para executar um serviço de banco de dados SQL Server no Azure.To enforce resource limits, Azure SQL Database uses a resource governance implementation that is based on SQL Server Resource Governor, modified and extended to run a SQL Server database service in Azure. Em cada instância de SQL Server no serviço, há vários pools de recursos e grupos de carga de trabalho, com limites de recursos definidos no pool e nos níveis de grupo para fornecer um banco de dados como serviço equilibrado.On each SQL Server instance in the service, there are multiple resource pools and workload groups, with resource limits set at both pool and group levels to provide a balanced Database-as-a-Service. Carga de trabalho do usuário e cargas de trabalho internas são classificadas em pools de recursos e grupos de carga de trabalho separados.User workload and internal workloads are classified into separate resource pools and workload groups. A carga de trabalho do usuário nas réplicas secundárias primárias e legíveis, incluindo réplicas geográficas, é classificada no pool de recursos SloSharedPool1 e UserPrimaryGroup.DBId[N] grupo de carga de trabalho, em que N representa o valor da ID do banco de dados.User workload on the primary and readable secondary replicas, including geo-replicas, is classified into the SloSharedPool1 resource pool and UserPrimaryGroup.DBId[N] workload group, where N stands for the database ID value. Além disso, há vários pools de recursos e grupos de carga de trabalho para várias cargas de trabalho internas.In addition, there are multiple resource pools and workload groups for various internal workloads.

Além de usar Resource Governor para controlar os recursos dentro do processo de SQL Server, o banco de dados SQL do Azure também usa objetos de trabalho do Windows para governança de recursos de nível de processo e o FSRM (Gerenciador de recursos de servidor de arquivos) do Windows para gerenciamento de cota de armazenamento.In addition to using Resource Governor to govern resources within the SQL Server process, Azure SQL Database also uses Windows Job Objects for process level resource governance, and Windows File Server Resource Manager (FSRM) for storage quota management.

A governança de recursos do banco de dados SQL do Azure é hierárquica por natureza.Azure SQL Database resource governance is hierarchical in nature. De cima para baixo, os limites são impostos no nível do sistema operacional e no nível do volume de armazenamento usando mecanismos de governança de recursos do sistema operacional e Resource Governor, em seguida, no nível do pool de recursos usando Resource Governor e, em seguida, no nível do grupo de carga de trabalho usando Resource Governor.From top to bottom, limits are enforced at the OS level and at the storage volume level using operating system resource governance mechanisms and Resource Governor, then at the resource pool level using Resource Governor, and then at the workload group level using Resource Governor. Os limites de governança de recursos em vigor para o banco de dados atual ou pool elástico são exibidos na exibição Sys. dm_user_db_resource_governance .Resource governance limits in effect for the current database or elastic pool are surfaced in the sys.dm_user_db_resource_governance view.

Governança de e/s de dadosData IO governance

A governança de e/s de dados é um processo no banco de dados SQL do Azure usado para limitar a e/s física de leitura e gravação em arquivos de data de um banco.Data IO governance is a process in Azure SQL Database used to limit both read and write physical IO against data files of a database. Os limites de IOPS são definidos para cada nível de serviço para minimizar o efeito de "vizinho ruidosa", para fornecer a integridade de alocação de recursos no serviço multilocatário e para permanecer dentro dos recursos do hardware e do armazenamento subjacentes.IOPS limits are set for each service level to minimize the "noisy neighbor" effect, to provide resource allocation fairness in the multi-tenant service, and to stay within the capabilities of the underlying hardware and storage.

Para bancos de dados individuais, os limites de grupo de carga de trabalho são aplicados a todas as e/s de armazenamento em relação ao banco de dados, enquanto os limites do pool de recursos se aplicam a todas as e/s de armazenamento em todos os bancos na mesma instância de SQL Server, incluindo tempdb oFor single databases, workload group limits are applied to all storage IO against the database, while resource pool limits apply to all storage IO against all databases on the same SQL Server instance, including the tempdb database. Para pools elásticos, os limites de grupo de carga de trabalho se aplicam a cada banco de dados no pool, enquanto o limite do pool de recursos se aplica a todo o pool elástico, incluindo o banco de dados tempdb, que é compartilhado entre todos os bancos de dados no pool.For elastic pools, workload group limits apply to each database in the pool, whereas resource pool limit applies to the entire elastic pool, including the tempdb database, which is shared among all databases in the pool. Em geral, os limites do pool de recursos podem não ser obtidos pela carga de trabalho em relação a um banco de dados (único ou em pool), pois os limites do grupo de carga de trabalho são menores do que os limites do pool de recursos e limitam o IOPS/taxaIn general, resource pool limits may not be achievable by the workload against a database (either single or pooled), because workload group limits are lower than resource pool limits and limit IOPS/throughput sooner. No entanto, os limites de pool podem ser alcançados pela carga de trabalho combinada em vários bancos de dados na mesma instância de SQL Server.However, pool limits may be reached by the combined workload against multiple databases on the same SQL Server instance.

Por exemplo, se uma consulta gerar 1000 IOPS sem nenhuma governança de recursos de e/s, mas o limite máximo de IOPS do grupo de carga de trabalho for definido como 900 IOPS, a consulta não poderá gerar mais de 900 IOPS.For example, if a query generates 1000 IOPS without any IO resource governance, but the workload group maximum IOPS limit is set to 900 IOPS, the query will not be able to generate more than 900 IOPS. No entanto, se o limite máximo de IOPS do pool de recursos for definido como 1500 IOPS e a e/s total de todos os grupos de carga de trabalho associados ao pool de recursos exceder 1500 IOPS, a e/s da mesma consulta poderá ser reduzida abaixo do limite do grupo de trabalhos de 900 IOPS.However, if the resource pool maximum IOPS limit is set to 1500 IOPS, and the total IO from all workload groups associated with the resource pool exceeds 1500 IOPS, then the IO of the same query may be reduced below the workgroup limit of 900 IOPS.

Os valores mínimo/máximo de IOPS e taxa de transferência retornados pela exibição Sys. dm_user_db_resource_governance atuam como limites/Caps, não como garantias.The IOPS and throughput min/max values returned by the sys.dm_user_db_resource_governance view act as limits/caps, not as guarantees. Além disso, a governança de recursos não garante nenhuma latência de armazenamento específica.Further, resource governance does not guarantee any specific storage latency. A melhor latência, IOPS e taxa de transferência atingíveis para uma determinada carga de trabalho de usuário dependem não apenas dos limites de governança de recursos de e/s, mas também da combinação de tamanhos de e/s usados e dos recursos do armazenamento subjacente.The best achievable latency, IOPS, and throughput for a given user workload depend not only on IO resource governance limits, but also on the mix of IO sizes used, and on the capabilities of the underlying storage. O SQL Server usa o IOs que varia de tamanho entre 512 KB e 4 MB.SQL Server uses IOs that vary in size between 512 KB and 4 MB. Para fins de imposição de limites de IOPS, cada e/s é contabilizada independentemente de seu tamanho, com a exceção de bancos de dados com arquivos de data no armazenamento do Azure.For the purposes of enforcing IOPS limits, every IO is accounted regardless of its size, with the exception of databases with data files in Azure Storage. Nesse caso, IOs com mais de 256 KB são contabilizados como vários 256 KB de IOs, para alinhar com a contabilidade de e/s do armazenamento do Azure.In that case, IOs larger than 256 KB are accounted as multiple 256 KB IOs, to align with Azure Storage IO accounting.

Para bancos de dados Basic, Standard e Uso Geral, que usam arquivos de dado no armazenamento do Azure, o valor de primary_group_max_io pode não ser atingível se um banco de dados não tiver arquivos suficientes para fornecer esse número de IOPS, ou se os dados não forem distribuídos uniformemente entre arquivos ou se o nível de desempenho dos BLOBs subjacentes limitar IOPS/taxa de transferência abaixo do limite de governança de recursosFor Basic, Standard, and General Purpose databases, which use data files in Azure Storage, the primary_group_max_io value may not be achievable if a database does not have enough data files to cumulatively provide this number of IOPS, or if data is not distributed evenly across files, or if the performance tier of underlying blobs limits IOPS/throughput below the resource governance limit. Da mesma forma, com o IOs de log pequeno gerado pela confirmação de transação frequente, o valor primary_max_log_rate pode não ser atingível por uma carga de trabalho devido ao limite de IOPS no blob de armazenamento do Azure subjacente.Similarly, with small log IOs generated by frequent transaction commit, the primary_max_log_rate value may not be achievable by a workload due to the IOPS limit on the underlying Azure storage blob.

Valores de utilização de recursos, como avg_data_io_percent e avg_log_write_percent, relatados nas exibições Sys. dm_db_resource_stats, Sys. resource_statse Sys. elastic_pool_resource_stats , são calculados como porcentagens de limites máximos de governança de recursos.Resource utilization values such as avg_data_io_percent and avg_log_write_percent, reported in the sys.dm_db_resource_stats, sys.resource_stats, and sys.elastic_pool_resource_stats views, are calculated as percentages of maximum resource governance limits. Portanto, quando fatores diferentes da governança de recursos limitam o IOPS/taxa de transferência, é possível ver o aumento de taxa de transferência e as latências aumentadas à medida que a carga de trabalho aumenta, embora a utilização de recursos relatada permaneça abaixo de 100%.Therefore, when factors other than resource governance limit IOPS/throughput, it is possible to see IOPS/throughput flattening out and latencies increasing as the workload increases, even though reported resource utilization remains below 100%.

Para ver a leitura e gravação de IOPS, taxa de transferência e latência por arquivo de banco de dados, use a função Sys. dm_io_virtual_file_stats () .To see read and write IOPS, throughput, and latency per database file, use the sys.dm_io_virtual_file_stats() function. Essa função faz a superfície de todas as e/s no banco de dados, incluindo a e/s de plano de fundo que não é contabilizada em avg_data_io_percent, mas usa IOPS e taxa de transferência do armazenamento subjacente e pode afetar a latência de armazenamento observada.This function surfaces all IO against the database, including background IO that is not accounted towards avg_data_io_percent, but uses IOPS and throughput of the underlying storage, and can impact observed storage latency. A função também apresenta uma latência adicional que pode ser introduzida pela governança de recursos de e/s para leituras e gravações, nas colunas io_stall_queued_read_ms e io_stall_queued_write_ms, respectivamente.The function also surfaces additional latency that may be introduced by IO resource governance for reads and writes, in the io_stall_queued_read_ms and io_stall_queued_write_ms columns respectively.

Governança de taxa de log de transaçõesTransaction log rate governance

A governança de taxa do log de transações é um processo no banco de dados SQL do Azure usado para limitar altas taxas de ingestão para cargas de trabalho, como inserção em massa, seleção INTO e compilações de índice.Transaction log rate governance is a process in Azure SQL Database used to limit high ingestion rates for workloads such as bulk insert, SELECT INTO, and index builds. Esses limites são rastreados e aplicados no nível de subsegundos à taxa de geração de registro de log, limitando a taxa de transferência, independentemente de quantos IOs podem ser emitidos em relação aos arquivos de dados.These limits are tracked and enforced at the subsecond level to the rate of log record generation, limiting throughput regardless of how many IOs may be issued against data files. As taxas de geração de log de transações atualmente são dimensionadas linearmente até um ponto que é dependente de hardware, com a taxa de log máxima permitida de 96 MB/s com o modelo de compra vCore.Transaction log generation rates currently scale linearly up to a point that is hardware-dependent, with the maximum log rate allowed being 96 MB/s with the vCore purchasing model.

Observação

O IOs físico real para os arquivos de log de transações não são governados ou limitados.The actual physical IOs to transaction log files are not governed or limited.

As taxas de log são definidas de modo que elas possam ser alcançadas e mantidas em vários cenários, enquanto o sistema geral pode manter sua funcionalidade com impacto minimizado na carga do usuário.Log rates are set such that they can be achieved and sustained in a variety of scenarios, while the overall system can maintain its functionality with minimized impact to the user load. A governança de taxa de log garante que os backups de log de transações permaneçam dentro dos SLAs de recuperação publicados.Log rate governance ensures that transaction log backups stay within published recoverability SLAs. Essa governança também impede uma pendência excessiva em réplicas secundárias.This governance also prevents an excessive backlog on secondary replicas.

À medida que os registros de log são gerados, cada operação é avaliada e avaliada se deve ser atrasada para manter uma taxa máxima de log desejada (MB/s por segundo).As log records are generated, each operation is evaluated and assessed for whether it should be delayed in order to maintain a maximum desired log rate (MB/s per second). Os atrasos não são adicionados quando os registros de log são liberados para armazenamento, em vez disso, a governança de taxa de log é aplicada durante a própria geração de taxa de log.The delays are not added when the log records are flushed to storage, rather log rate governance is applied during log rate generation itself.

As taxas de geração de log reais impostas em tempo de execução também podem ser influenciadas por mecanismos de comentários, reduzindo temporariamente as taxas de log permitidas para que o sistema possa se estabilizar.The actual log generation rates imposed at run time may also be influenced by feedback mechanisms, temporarily reducing the allowable log rates so the system can stabilize. Gerenciamento de espaço de arquivo de log, evitando a execução de condições de espaço de log e os mecanismos de replicação de grupo de disponibilidade podem diminuir temporariamente os limites gerais do sistema.Log file space management, avoiding running into out of log space conditions and Availability Group replication mechanisms can temporarily decrease the overall system limits.

A modelagem de tráfego do administrador da taxa de log é apresentada por meio dos seguintes tipos de espera (expostos na DMV Sys. dm_db_wait_stats ):Log rate governor traffic shaping is surfaced via the following wait types (exposed in the sys.dm_db_wait_stats DMV):

Tipo de EsperaWait Type ObservaçõesNotes
LOG_RATE_GOVERNORLOG_RATE_GOVERNOR Limitação de banco de dadosDatabase limiting
POOL_LOG_RATE_GOVERNORPOOL_LOG_RATE_GOVERNOR Limitação de poolPool limiting
INSTANCE_LOG_RATE_GOVERNORINSTANCE_LOG_RATE_GOVERNOR Limitação de nível de instânciaInstance level limiting
HADR_THROTTLE_LOG_RATE_SEND_RECV_QUEUE_SIZEHADR_THROTTLE_LOG_RATE_SEND_RECV_QUEUE_SIZE Controle de comentários, replicação física do grupo de disponibilidade em Premium/Comercialmente Crítico não está acompanhandoFeedback control, availability group physical replication in Premium/Business Critical not keeping up
HADR_THROTTLE_LOG_RATE_LOG_SIZEHADR_THROTTLE_LOG_RATE_LOG_SIZE Controle de comentários, limitando as taxas para evitar uma condição de espaço de log insuficienteFeedback control, limiting rates to avoid an out of log space condition

Ao encontrar um limite de taxa de log que está atrasando a escalabilidade desejada, considere as seguintes opções:When encountering a log rate limit that is hampering desired scalability, consider the following options:

  • Escale verticalmente para um nível de serviço superior para obter a taxa máxima de logs de 96 MB/s.Scale up to a higher service level in order to get the maximum 96 MB/s log rate.
  • Se os dados que estão sendo carregados forem transitórios, como dados de preparo em um processo de ETL, eles poderão ser carregados em tempdb (que é minimamente registrado).If data being loaded is transient, such as staging data in an ETL process, it can be loaded into tempdb (which is minimally logged).
  • Para cenários analíticos, carregue em uma tabela coberta por columnstore clusterizado.For analytic scenarios, load into a clustered columnstore covered table. Isso reduz a taxa de log necessária devido à compactação.This reduces the required log rate due to compression. Essa técnica aumenta a utilização da CPU e só é aplicável a conjuntos de dados que se beneficiam de índices columnstore clusterizados.This technique does increase CPU utilization and is only applicable to data sets that benefit from clustered columnstore indexes.

Próximos passosNext steps