Resolver problemas de conectividade e outros erros com a Base de Dados SQL do Azure e o Azure SQL Managed Instance

Aplica-se a:Banco de Dados SQL do Azure Instância Gerenciada SQLdo Azure

Você recebe mensagens de erro quando a conexão com o Banco de Dados SQL do Azure ou a Instância Gerenciada SQL do Azure falha. Esses problemas de conexão podem ser causados por reconfiguração, configurações de firewall, tempo limite de conexão, informações de login incorretas ou falha na aplicação de práticas recomendadas e diretrizes de design durante o processo de design do aplicativo. Além disso, se o limite máximo de alguns recursos da Base de Dados SQL do Azure ou do SQL Managed Instance for atingido, já não poderá ligar-se.

Nota

Você pode usar o Verificador de Conectividade SQL do Azure para detetar e corrigir uma ampla variedade de erros de conectividade com o Banco de Dados SQL do Azure, a Instância Gerenciada do SQL do Azure e em ambientes do Azure Synapse Analytics.

Mensagens de erro de falha transitórias (40197, 40613 e outros)

A infraestrutura do Azure tem a capacidade de reconfigurar dinamicamente os serviços quando surgem cargas de trabalho pesadas no serviço Base de Dados SQL. Este comportamento dinâmico poderá fazer com que o seu programa cliente perca a ligação à base de dados ou à instância. Este tipo de condição de erro é chamado de falha transitória. Os eventos de reconfiguração da base de dados ocorrem devido a um evento planeado (por exemplo, uma atualização de software) ou a um evento não planeado (por exemplo, uma falha de processo ou balanceamento de carga). A maioria dos eventos de reconfiguração são geralmente de curta duração e devem estar concluídos em menos de 60 segundos, no máximo. No entanto, esses eventos ocasionalmente podem levar mais tempo para serem concluídos, como quando uma transação grande causa uma recuperação de longa duração. A tabela a seguir lista vários erros transitórios que os aplicativos podem receber ao se conectar ao Banco de Dados SQL do Azure.

Lista de códigos de erro de falha transitória

Código de erro Gravidade Description
926 14 O banco de dados 'replicatedmaster' não pode ser aberto. Foi marcado como SUSPEITO pela recuperação. Consulte o log de erros do SQL Server para obter mais informações.

Esse erro pode ser registrado no log de erros da Instância Gerenciada SQL, por um curto período de tempo, durante o último estágio de uma reconfiguração, enquanto o primário antigo está desligando seu log.
Outros cenários não transitórios envolvendo essa mensagem de erro são descritos na documentação de erros do MSSQL.
4000 16 Não é possível abrir o banco de dados "%.*ls" solicitado pelo login. O início de sessão falhou. Para obter mais informações, consulte Erros 4000 a 4999
40197 17 O serviço encontrou um erro ao processar o pedido. Tente novamente. Código de erro %d.

Você recebe esse erro quando o serviço está inativo devido a atualizações de software ou hardware, falhas de hardware ou quaisquer outros problemas de failover. O código de erro (%d) incorporado na mensagem de erro 40197 fornece informações adicionais sobre o tipo de falha ou failover que ocorreu. Alguns exemplos dos códigos de erro são incorporados na mensagem de erro 40197 são 40020, 40143, 40166 e 40540.

A reconexão automaticamente conecta você a uma cópia íntegra do seu banco de dados. Seu aplicativo deve detetar o erro 40197, registrar o código de erro incorporado (%d) na mensagem para solução de problemas e tentar se reconectar ao Banco de dados SQL até que os recursos estejam disponíveis e sua conexão seja estabelecida novamente. Para obter mais informações, veja Erros transitórios.
40501 20 o serviço está ocupado neste momento. Tente o pedido novamente após 10 segundos. ID do Incidente: %ls. Código: %d. Para mais informações, consulte:
• Limites lógicos de recursos do SQL Server.
• Limites baseados em DTU para bases de dados únicas.
• Limites baseados em DTU para piscinas elásticas.
• Limites baseados em vCore para bancos de dados únicos.
• Limites baseados em vCore para piscinas elásticas.
• Limites de recursos da Instância Gerenciada SQL do Azure.
40613 17 O banco de dados '%.*ls' no servidor '%.*ls' não está disponível no momento. Tente voltar a ligar mais tarde. Se o problema persistir, entre em contato com o suporte ao cliente e forneça a ID de rastreamento de sessão de '%.*ls'.

Este erro pode ocorrer se já existir uma conexão de administrador dedicado (DAC) estabelecida para o banco de dados. Para obter mais informações, veja Erros transitórios.
49918 16 Não é possível processar o pedido. Não há recursos suficientes para processar o pedido.

o serviço está ocupado neste momento. Por favor, tente novamente o pedido mais tarde. Para mais informações, consulte:
• Limites lógicos de recursos do SQL Server.
• Limites baseados em DTU para bases de dados únicas.
• Limites baseados em DTU para piscinas elásticas.
• Limites baseados em vCore para bancos de dados únicos.
• Limites baseados em vCore para piscinas elásticas.
• Limites de recursos da Instância Gerenciada SQL do Azure.
49919 16 Não é possível processar o pedido de criação ou atualização. Demasiadas operações de criação ou atualização em curso na subscrição “%ld”.

O serviço está ocupado processando várias solicitações de criação ou atualização para sua assinatura ou servidor. No momento, as solicitações estão bloqueadas para otimização de recursos. Consulta sys.dm_operation_status para operações pendentes. Aguarde até que as solicitações pendentes de criação ou atualização sejam concluídas ou exclua uma das solicitações pendentes e tente novamente sua solicitação mais tarde. Se suas operações parecerem travadas, aguarde a conclusão de outras operações em andamento ou cancele-as quando possível. Por exemplo, você pode cancelar uma cópia de banco de dados ou a criação de réplica geográfica excluindo o banco de dados ou a réplica que está sendo criada. Se não for possível cancelar uma operação aparentemente bloqueada, abra um tíquete de suporte com a Microsoft.
49920 16 Não é possível processar o pedido. Demasiadas operações em curso na subscrição “%ld”.

O serviço está ocupado processando várias solicitações para esta assinatura. No momento, as solicitações estão bloqueadas para otimização de recursos. Consulta sys.dm_operation_status o status da operação. Aguarde até que as solicitações pendentes sejam concluídas ou exclua uma de suas solicitações pendentes e tente novamente sua solicitação mais tarde. Se suas operações parecerem travadas, aguarde a conclusão de outras operações em andamento ou cancele-as quando possível. Por exemplo, você pode cancelar uma cópia de banco de dados ou a criação de réplica geográfica excluindo o banco de dados ou a réplica que está sendo criada. Se não for possível cancelar uma operação aparentemente bloqueada, abra um tíquete de suporte com a Microsoft.
4221 16 O login para leitura-secundária falhou devido à longa espera em 'HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING'. A réplica não está disponível para login porque faltam versões de linha para transações que estavam em andamento quando a réplica foi reciclada. O problema pode ser resolvido revertendo ou confirmando as transações ativas na réplica primária. As ocorrências dessa condição podem ser minimizadas evitando transações de gravação longa no primário.
615 21 Não foi possível encontrar o ID do banco de dados %d, nome '%.*ls' . Código de erro 615.
Isso significa que o cache na memória não está sincronizado com a instância do SQL Server e as pesquisas estão recuperando a ID do banco de dados obsoleto.

Os logons SQL usam cache na memória para obter o nome do banco de dados para mapeamento de ID. O cache deve estar sincronizado com o banco de dados back-end e atualizado sempre que ocorrer anexação e desanexação do banco de dados de/para a instância do SQL Server.
Você recebe esse erro quando o fluxo de trabalho de desanexação não consegue limpar o cache na memória a tempo e pesquisas subsequentes para o banco de dados apontam para ID de banco de dados obsoleto.

Tente se reconectar ao Banco de dados SQL até que o recurso esteja disponível e a conexão seja estabelecida novamente. Para obter mais informações, veja Erros transitórios.

Passos para resolver problemas de conectividade transitórios

  1. Verifique o Painel de Serviço do Microsoft Azure para quaisquer interrupções conhecidas que ocorreram durante o tempo durante o qual os erros foram relatados pelo aplicativo.
  2. Os aplicativos que se conectam a um serviço de nuvem, como o Banco de Dados SQL do Azure, devem esperar eventos periódicos de reconfiguração e implementar a lógica de repetição para lidar com esses erros, em vez de revelar erros de aplicativo aos usuários.
  3. À medida que um banco de dados se aproxima de seus limites de recursos, pode parecer um problema transitório de conectividade. Consulte Limites de recursos.
  4. Se os problemas de conectividade continuarem, ou se a duração durante a qual seu aplicativo encontrar o erro exceder 60 segundos ou se você vir várias ocorrências do erro em um determinado dia, registre uma solicitação de suporte do Azure selecionando Obter Suporte no site de Suporte do Azure.

Implementando a lógica de repetição

É altamente recomendável que seu programa cliente tenha lógica de repetição para que ele possa restabelecer uma conexão depois de dar tempo de falha transitória para se corrigir. Recomendamos que você atrase por 5 segundos antes de sua primeira tentativa. Tentar novamente após um atraso inferior a 5 segundos corre o risco de sobrecarregar o serviço de nuvem. Para cada nova tentativa subsequente, o atraso deve crescer exponencialmente, até um máximo de 60 segundos.

Para obter exemplos de código de lógica de repetição, consulte:

Para obter informações adicionais sobre como lidar com erros transitórios em seu aplicativo, revise : Solução de problemas de erros de conexão transitória com o Banco de dados SQL

Uma discussão sobre o período de bloqueio para clientes que usam ADO.NET está disponível em Pool de conexões (ADO.NET).

O problema ocorre se o aplicativo não pode se conectar ao servidor.

Para resolver esse problema, tente as etapas (na ordem apresentada) na seção Etapas para corrigir problemas comuns de conexão.

O servidor/instância não foi encontrado ou não estava acessível (erros 26, 40, 10053)

Erro 26: Erro ao localizar o servidor especificado

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)

Erro 40: Não foi possível abrir uma conexão com o servidor

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Erro 10053: Ocorreu um erro no nível de transporte ao receber resultados do servidor

10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)

Esses problemas ocorrem se o aplicativo não pode se conectar ao servidor.

Para resolver esses problemas, tente as etapas (na ordem apresentada) na seção Etapas para corrigir problemas comuns de conexão.

Não é possível conectar-se ao servidor devido a problemas de firewall

Erro 40615: Não é possível conectar-se ao < servername >

Para resolver esse problema, defina as configurações de firewall no Banco de Dados SQL por meio do portal do Azure.

Erro 5: Não é possível conectar-se ao < servername >

Para resolver esse problema, verifique se a porta 1433 está aberta para conexões de saída em todos os firewalls entre o cliente e a Internet.

Não é possível iniciar sessão no servidor (erros 18456, 40531)

Falha de login para o usuário ' Nome de usuário >'<

Login failed for user '<User name>'.This session has been assigned a tracing ID of '<Tracing ID>'. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)

Para resolver esse problema, contate o administrador do serviço para fornecer um nome de usuário e senha válidos.

Normalmente, o administrador de serviço pode usar as seguintes etapas para adicionar as credenciais de login:

  1. Faça logon no servidor usando o SQL Server Management Studio (SSMS).

  2. Execute a seguinte consulta SQL no master banco de dados para verificar se o nome de logon está desabilitado:

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. Se o nome correspondente estiver desativado, ative-o através da instrução seguinte:

    ALTER LOGIN <User name> ENABLE;
    
  4. Se o nome de usuário de logon do SQL não existir, edite e execute a seguinte consulta SQL para criar um novo logon SQL:

    CREATE LOGIN <SQL_login_name, sysname, login_name>
    WITH PASSWORD = '<password, sysname, Change_Password>';
    GO
    
  5. No Pesquisador de Objetos do SSMS, expanda Bancos de Dados.

  6. Selecione o banco de dados ao qual você deseja conceder permissão ao usuário.

  7. Clique com o botão direito do rato em Segurança e, em seguida, selecione Novo, Utilizador.

  8. No script gerado por espaços reservados (exemplo mostrado abaixo), substitua os parâmetros do modelo seguindo as etapas aqui e execute-o:

    CREATE USER [<user_name, sysname, user_name>]
    FOR LOGIN [<login_name, sysname, login_name>]
    WITH DEFAULT_SCHEMA = [<default_schema, sysname, dbo>];
    GO
    
    -- Add user to the database owner role
    EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>';
    GO
    

    Você também pode usar sp_addrolemember para mapear usuários específicos para funções de banco de dados específicas.

    Nota

    No Banco de Dados SQL do Azure, considere a sintaxe ALTER ROLE mais recente para gerenciar a associação à função de banco de dados.

Para obter mais informações, consulte Gerenciando bancos de dados e logons no Banco de Dados SQL do Azure.

Erros de tempo limite de conexão expirado

System.Data.SqlClient.SqlException (0x80131904): Tempo limite de conexão expirou

System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3; handshake=29995;

System.Data.SqlClient.SqlException (0x80131904): Tempo limite expirado

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

System.Data.Entity.Core.EntityException: O provedor subjacente falhou em Open

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out

Não é possível conectar-se ao nome do < servidor >

Cannot connect to <server name>.ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out

Essas exceções podem ocorrer devido a problemas de conexão ou consulta. Para confirmar que esse erro é causado por problemas de conectividade, consulte Confirmar se um erro é causado por um problema de conectividade.

Os tempos limite de conexão ocorrem porque o aplicativo não pode se conectar ao servidor. Para resolver esse problema, tente as etapas (na ordem apresentada) na seção Etapas para corrigir problemas comuns de conexão.

Erros de terminação da conexão de rede

As bibliotecas de cliente SQL se conectam ao Banco de Dados SQL do Azure e à Instância Gerenciada SQL do Azure usando o protocolo de rede TCP. Uma biblioteca de cliente usa um componente de nível inferior chamado provedor TCP para gerenciar conexões TCP. Quando o provedor TCP deteta que um host remoto encerrou inesperadamente uma conexão TCP existente, a biblioteca de cliente gera um erro. Como o erro é um erro de cliente e não um erro do SQL Server, não há nenhum número de erro SQL incluído. Em vez disso, o número do erro é 0 e a mensagem de erro do provedor TCP é usada.

Exemplos de erros de terminação de conexão de rede incluem:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.) An existing connection was forcibly closed by the remote host

A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

The client was unable to establish a connection because of an error during connection initialization process before login. Possible causes include the following: the client tried to connect to an unsupported version of SQL Server; the server was too busy to accept new connections; or there was a resource limitation (insufficient memory or maximum allowed connections) on the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

Erros de terminação de conexão podem ocorrer porque o banco de dados ou pool elástico está temporariamente indisponível. Eles também podem ocorrer devido a vários problemas na infraestrutura de rede entre o servidor de banco de dados e o aplicativo cliente, incluindo firewalls, dispositivos de rede, etc. Estes problemas podem ser transitórios ou permanentes. Como orientação geral, os aplicativos devem usar um número fixo de tentativas repetidas para esses erros antes de considerá-los falhas permanentes.

Erros de governança de recursos

O Banco de Dados SQL do Azure usa uma implementação de governança de recursos baseada no Administrador de Recursos para impor limites de recursos. Saiba mais sobre o gerenciamento de recursos no Banco de Dados SQL do Azure.

Os erros de governança de recursos mais comuns são listados primeiro com detalhes, seguidos por uma tabela de mensagens de erro de governança de recursos.

Erros 10928 e 10936: ID do recurso: 1. O limite de solicitação para o [banco de dados ou pool elástico] é %d e foi atingido

Se o limite de nível de banco de dados for atingido, a mensagem de erro detalhada neste caso diz: Resource ID : 1. The request limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.

Se o limite do pool elástico for atingido, a mensagem de erro detalhada neste caso diz: Resource ID : 1. The request limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance. Os limites do pool elástico são maiores do que os limites do banco de dados, para obter mais informações, consulte Limites de recursos. Eles podem ser alcançados quando vários bancos de dados no pool usam um recurso (como trabalhadores) simultaneamente.

Essa mensagem de erro indica que o limite de trabalho para o banco de dados ou pool elástico foi atingido. O valor máximo de trabalhadores simultâneos para o objetivo de serviço do banco de dados ou pool elástico estará presente em vez do espaço reservado %d.

Nota

A oferta inicial do Banco de Dados SQL do Azure dava suporte apenas a consultas de thread único. Nessa altura, o número de pedidos era sempre equivalente ao número de trabalhadores. As mensagens de erro 10928 e 10936 no Banco de Dados SQL do Azure contêm o texto "O limite de solicitação [...] é N e foi atingido" para fins de compatibilidade com versões anteriores. O limite atingido é, na verdade, o número de funções de trabalho. Se sua configuração de grau máximo de paralelismo (MAXDOP) for igual a zero ou for maior que um, o número de trabalhadores pode ser muito maior do que o número de solicitações, e o limite pode ser atingido muito mais cedo do que quando MAXDOP é igual a um.

Saiba mais sobre Sessões, trabalhadores e solicitações.

Conecte-se com a Conexão de Administrador Dedicado (DAC), se necessário

Se um incidente ao vivo estiver em andamento onde o limite de trabalho foi abordado ou atingido, você poderá receber o Erro 10928 ao se conectar usando o SQL Server Management Studio (SSMS) ou o Azure Data Studio. Uma sessão pode se conectar usando a Conexão de Diagnóstico para Administradores de Banco de Dados (DAC) mesmo quando o limite máximo de trabalho tiver sido atingido.

Para estabelecer uma conexão com o DAC a partir do SSMS:

  • No menu, selecione Arquivo > Nova > Consulta do Mecanismo de Banco de Dados
  • Na caixa de diálogo de conexão no campo Nome do servidor, digite admin:<fully_qualified_server_name> (isso será algo como admin:servername.database.windows.net).
  • Selecione Opções >>
  • Selecione a guia Propriedades da conexão
  • Na caixa Conectar ao banco de dados:, digite o nome do seu banco de dados
  • Selecione Ligar.

Se você receber o erro 40613, Database '%.&#x2a;ls' on server '%.&#x2a;ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '%.&#x2a;ls'isso pode indicar que outra sessão já está conectada ao DAC. Apenas uma sessão pode se conectar ao DAC para um único banco de dados ou um pool elástico de cada vez.

Se você encontrar o erro 'Falha ao se conectar ao servidor' depois de selecionar Conectar, a sessão do DAC ainda pode ter sido estabelecida com êxito se você estiver usando uma versão do SSMS anterior à 18.9. As primeiras versões do SSMS tentaram fornecer o Intellisense para conexões com o DAC. Isso falhou, pois o DAC suporta apenas um único trabalhador e o Intellisense requer um trabalhador separado.

Não é possível usar uma conexão de DAC com o Pesquisador de Objetos.

Rever a sua utilização max_worker_percent

Para encontrar estatísticas de consumo de recursos para seu banco de dados por 14 dias, consulte a exibição sys.resource_stats catálogo do sistema. A max_worker_percent coluna mostra a porcentagem de trabalhadores usados em relação ao limite de trabalhadores do banco de dados. Conecte-se ao master banco de dados em seu servidor lógico para consultar sys.resource_statso .

SELECT start_time, end_time, database_name, sku, avg_cpu_percent, max_worker_percent, max_session_percent 
FROM sys.resource_stats;

Você também pode consultar estatísticas de consumo de recursos da última hora a partir do modo de exibição de gerenciamento dinâmico sys.dm_db_resource_stats . Conecte-se diretamente ao seu banco de dados para consultar sys.dm_db_resource_statso .

SELECT end_time, avg_cpu_percent, max_worker_percent, max_session_percent
FROM sys.dm_db_resource_stats;

Menor uso do trabalhador quando possível

O bloqueio de cadeias pode causar um aumento súbito no número de trabalhadores em um banco de dados. Um grande volume de consultas paralelas simultâneas pode causar um grande número de trabalhadores. Aumentar seu grau máximo de paralelismo (MAXDOP) ou definir MAXDOP para zero pode aumentar o número de trabalhadores ativos.

Faça a triagem de um incidente com trabalhadores insuficientes seguindo estes passos:

  1. Investigue se o bloqueio está ocorrendo ou se você pode identificar um grande volume de trabalhadores simultâneos. Execute a consulta a seguir para examinar as solicitações atuais e verificar se há bloqueio quando o banco de dados estiver retornando o erro 10928. Talvez seja necessário conectar-se com a Conexão de Administrador Dedicado (DAC) para executar a consulta.

    SELECT
        r.session_id, r.request_id, r.blocking_session_id, r.start_time, 
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        (SELECT COUNT(*) 
            FROM sys.dm_os_tasks AS t 
            WHERE t.session_id=r.session_id and t.request_id=r.request_id) AS worker_count,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1;
    GO
    
    1. Procure linhas com um blocking_session_id para identificar sessões bloqueadas. Encontre cada blocking_session_id um na lista para determinar se essa sessão também está bloqueada. Isto acabará por levá-lo ao bloqueador de cabeça. Ajuste a consulta do bloqueador de cabeça.

      Nota

      Para obter informações mais completas sobre como solucionar problemas de consultas de longa execução ou bloqueio, consulte Compreender e resolver problemas de bloqueio do Banco de Dados SQL do Azure.

    2. Para identificar um grande volume de trabalhadores simultâneos, revise o número geral de solicitações e a worker_count coluna de cada solicitação. Worker_count é o número de trabalhadores no momento amostrado e pode mudar ao longo do tempo à medida que a solicitação é executada. Ajuste as consultas para reduzir a utilização de recursos se a causa do aumento de trabalhadores for consultas simultâneas que estão sendo executadas em seu grau ideal de paralelismo. Para obter mais informações, veja Ajuste/Sugestões de Consultas.

  2. Avalie a configuração de grau máximo de paralelismo (MAXDOP) para o banco de dados.

Aumentar os limites de trabalhadores

Se o banco de dados ou pool elástico atingir consistentemente seu limite de trabalho apesar de abordar o bloqueio, otimizar consultas e validar sua configuração MAXDOP, considere dimensionar o banco de dados ou pool elástico para aumentar o limite de trabalho.

Encontre limites de recursos para o Banco de Dados SQL do Azure por camada de serviço e tamanho de computação:

Saiba mais sobre a governança de recursos do Banco de Dados SQL do Azure dos trabalhadores.

Erro 10929: ID do recurso: 1

10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.

Erro 40501: O serviço está atualmente ocupado

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

Este é um erro de limitação do mecanismo, uma indicação de que os limites de recursos estão sendo excedidos.

Para obter mais informações sobre limites de recursos, consulte Limites lógicos de recursos do SQL Server.

Erro 40544: O banco de dados atingiu sua cota de tamanho

40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: <ID>. Code: <code>.

Este erro ocorre quando o banco de dados atingiu sua cota de tamanho.

As etapas a seguir podem ajudá-lo a contornar o problema ou fornecer mais opções:

  1. Verifique o tamanho atual do banco de dados usando o painel no portal do Azure.

    Nota

    Para identificar quais tabelas estão consumindo mais espaço e, portanto, são potenciais candidatas à limpeza, execute a seguinte consulta SQL:

    SELECT o.name,
     SUM(p.row_count) AS 'Row Count',
     SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)'
    FROM sys.objects o
    JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id
    GROUP BY o.name
    ORDER BY [Table Size (MB)] DESC;
    GO
    
  2. Se o tamanho atual não exceder o tamanho máximo suportado para sua edição, você poderá usar ALTER DATABASE para aumentar a configuração MAXSIZE.

  3. Se o banco de dados já tiver ultrapassado o tamanho máximo suportado para sua edição, tente uma ou mais das seguintes etapas:

    • Execute atividades normais de limpeza do banco de dados. Por exemplo, limpe os dados indesejados usando truncate/delete ou mova dados para fora usando o SQL Server Integration Services (SSIS) ou o utilitário de programa de cópia em massa (bcp).
    • Crie uma partição ou elimine dados, remova índices ou consulte a documentação para conhecer resoluções possíveis.
    • Para dimensionamento de banco de dados, consulte Dimensionar recursos de banco de dados único e Dimensionar recursos de pool elástico.

Erro 40549: A sessão é encerrada porque você tem uma transação de longa duração

40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.

Se você encontrar esse erro repetidamente, tente resolver o problema seguindo estas etapas:

  1. Execute a seguinte consulta para ver todas as sessões abertas que têm um valor alto para a duration_ms coluna:

    SELECT
        r.start_time, DATEDIFF(ms,start_time, SYSDATETIME()) as duration_ms, 
        r.session_id, r.request_id, r.blocking_session_id,  
        r.status, r.command, DB_NAME(r.database_id) AS database_name,
        i.parameters, i.event_info AS input_buffer,
        r.last_wait_type, r.open_transaction_count, r.total_elapsed_time, r.cpu_time,
        r.logical_reads, r.writes, s.login_time, s.login_name, s.program_name, s.host_name
    FROM sys.dm_exec_requests as r
    JOIN sys.dm_exec_sessions as s on r.session_id=s.session_id
    OUTER APPLY sys.dm_exec_input_buffer (r.session_id,r.request_id) AS i
    WHERE s.is_user_process=1
    ORDER BY start_time ASC;
    GO
    

    Você pode optar por ignorar as linhas em que a input_buffer coluna mostra uma consulta lendo de : essas solicitações estão relacionadas a sessões de sys.fn_MSxe_read_event_streamEventos Estendidos.

  2. Analise a coluna para ver se o blocking_session_id bloqueio está contribuindo para transações de longa duração.

    Nota

    Para obter mais informações sobre como solucionar problemas de bloqueio no Banco de Dados SQL do Azure, consulte Compreender e resolver problemas de bloqueio do Banco de Dados SQL do Azure.

  3. Considere agrupar suas consultas em lote. Para obter informações sobre lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo do Banco de dados SQL.

Erro 40551: A sessão foi encerrada devido ao uso excessivo de tempdb

40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.

Para contornar este problema, siga estes passos:

  1. Altere as consultas para reduzir o uso temporário de espaço de tabela.
  2. Solte objetos temporários depois que eles não forem mais necessários.
  3. Truncar tabelas ou remover tabelas não utilizadas.

Erro 40552: A sessão foi encerrada devido ao uso excessivo de espaço no log de transações

40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

Para resolver este problema, experimente os métodos seguintes:

  • O problema pode ocorrer devido a operações de inserção, atualização ou exclusão. Tente reduzir o número de linhas que são operadas imediatamente implementando lotes ou dividindo em várias transações menores.
  • O problema pode ocorrer devido a operações de reconstrução de índice. Para contornar esse problema, verifique o número de linhas que são afetadas na tabela * (tamanho médio do campo atualizado em bytes + 80) < 2 gigabytes (GB).
  • Para uma reconstrução de índice, o tamanho médio do campo atualizado deve ser substituído pelo tamanho médio do índice.
  • Para obter mais informações, consulte Solução de problemas de um log de transações completo no Banco de Dados SQL do Azure e Solução de problemas de um log de transações completo na Instância Gerenciada SQL do Azure.

Erro 40553: A sessão foi encerrada devido ao uso excessivo de memória

40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

Para contornar esse problema, tente otimizar a consulta.

Para obter um procedimento de solução de problemas detalhado, consulte Minha consulta está sendo executada corretamente na nuvem?.

Para obter mais informações sobre outros erros de falta de memória e consultas de exemplo, consulte Solucionar problemas de erros de falta de memória com o Banco de Dados SQL do Azure.

Tabela de mensagens de erro de governança de recursos

Código de erro Gravidade Description
10928 20 ID do recurso: %d. O limite %s para o banco de dados é %d e foi atingido. Consulte "http://go.microsoft.com/fwlink/?LinkId=267637" para obter assistência.

A ID do recurso indica o recurso que atingiu o limite. Quando ID de recurso = 1, isso indica que um limite de trabalhador foi atingido. Saiba mais em Erro 10928: ID do recurso: 1. O limite de solicitação para o banco de dados é %d e foi atingido. Quando ID de Recurso = 2, isso indica que o limite de sessão foi atingido.

Saiba mais sobre os limites de recursos:
• Limites lógicos de recursos do SQL Server.
• Limites baseados em DTU para bases de dados únicas.
• Limites baseados em vCore para bancos de dados únicos.
• Limites de recursos da Instância Gerenciada SQL do Azure.
10936 20 ID do recurso: %d. O limite %s para o pool elástico é %d e foi atingido. Consulte "http://go.microsoft.com/fwlink/?LinkId=267637" para obter assistência.

A ID do recurso indica o recurso que atingiu o limite. Quando ID de recurso = 1, isso indica que um limite de trabalhador foi atingido. Saiba mais em Erro 10936: ID do recurso : 1. O limite de solicitação para o pool elástico é %d e foi atingido.. Quando ID de Recurso = 2, isso indica que o limite de sessão foi atingido.

Saiba mais sobre os limites de recursos:
• Limites lógicos de recursos do SQL Server.
• Limites baseados em DTU para piscinas elásticas.
• Limites baseados em vCore para piscinas elásticas.
• Limites de recursos da Instância Gerenciada SQL do Azure.
10929 20 ID do recurso: %d. A garantia mínima de %s é %d, o limite máximo é %d e o uso atual do banco de dados é %d. No entanto, o servidor está atualmente muito ocupado para suportar solicitações maiores que %d para esse banco de dados. A ID do recurso indica o recurso que atingiu o limite. Para threads de trabalho, a ID do Recurso = 1. Para sessões, o ID do recurso = 2. Para mais informações, consulte:
• Limites lógicos de recursos do SQL Server.
• Limites baseados em DTU para bases de dados únicas.
• Limites baseados em DTU para piscinas elásticas.
• Limites baseados em vCore para bancos de dados únicos.
• Limites baseados em vCore para piscinas elásticas.
• Limites de recursos da Instância Gerenciada SQL do Azure.
Caso contrário, tente novamente mais tarde.
40544 20 O banco de dados atingiu sua cota de tamanho. Crie uma partição ou elimine dados, remova índices ou consulte a documentação para conhecer resoluções possíveis. Para dimensionamento de banco de dados, consulte Dimensionar recursos de banco de dados único e Dimensionar recursos de pool elástico.
40549 16 A sessão é encerrada porque você tem uma transação de longa duração. Tente encurtar a sua transação. Para obter informações sobre lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo do Banco de dados SQL.
40550 16 A sessão foi encerrada porque adquiriu muitos bloqueios. Tente ler ou modificar menos linhas em uma única transação. Para obter informações sobre lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo do Banco de dados SQL.
40551 16 A sessão foi encerrada devido ao uso excessivo tempdb . Tente modificar sua consulta para reduzir o uso temporário de espaço de tabela.

Se você estiver usando objetos temporários, conserve espaço tempdb no banco de dados descartando objetos temporários depois que eles não forem mais necessários para a sessão. Para obter mais informações sobre tempdb limites no Banco de dados SQL, consulte Banco de dados tempdb no Banco de dados SQL.
40552 16 A sessão foi encerrada devido ao uso excessivo de espaço no log de transações. Tente modificar menos linhas em uma única transação. Para obter informações sobre lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo do Banco de dados SQL.

Se você executar inserções em massa usando o utilitário ou a System.Data.SqlClient.SqlBulkCopy classe, tente usar as -b batchsize opções ou BatchSize para limitar o número de linhas copiadas para o bcp.exe servidor em cada transação. Se você estiver reconstruindo um índice com a instrução, tente usar a ALTER INDEX REBUILD WITH ONLINE = ON opção. Para obter informações sobre tamanhos de log de transações para o modelo de compra vCore, consulte:
• Limites baseados em vCore para bancos de dados únicos.
• Limites baseados em vCore para piscinas elásticas.
• Limites de recursos da Instância Gerenciada SQL do Azure.
40553 16 A sessão foi encerrada devido ao uso excessivo de memória. Tente modificar sua consulta para processar menos linhas.

Reduzir o número de ORDER BY operações no GROUP BY código Transact-SQL reduz os requisitos de memória da consulta. Para dimensionamento de banco de dados, consulte Dimensionar recursos de banco de dados único e Dimensionar recursos de pool elástico. Para obter mais informações sobre erros de falta de memória e consultas de exemplo, consulte Solucionar problemas de erros de falta de memória com o Banco de Dados SQL do Azure.

Erros do pool elástico

Os seguintes erros estão relacionados à criação e ao uso de pools elásticos:

Código de erro Gravidade Description Ação corretiva
1132 17 O conjunto elástico atingiu o seu limite de armazenamento. O uso de armazenamento para o pool elástico não pode exceder (%d) MBs. Tentativa de gravar dados em um banco de dados quando o limite de armazenamento do pool elástico tiver sido atingido. Para obter informações sobre limites de recursos, consulte:
• Limites baseados em DTU para piscinas elásticas.
• Limites baseados em vCore para piscinas elásticas.
Considere aumentar as DTUs e/ou adicionar armazenamento ao pool elástico, se possível, para aumentar seu limite de armazenamento, reduzir o armazenamento usado por bancos de dados individuais dentro do pool elástico ou remover bancos de dados do pool elástico. Para dimensionamento de pool elástico, consulte Dimensionar recursos de pool elástico. Para obter mais informações sobre como remover espaço não utilizado de bancos de dados, consulte Gerenciar espaço de arquivo para bancos de dados no Banco de Dados SQL do Azure.
10929 16 A garantia mínima de %s é %d, o limite máximo é %d e o uso atual do banco de dados é %d. No entanto, o servidor está atualmente muito ocupado para suportar solicitações maiores que %d para esse banco de dados. Para obter informações sobre limites de recursos, consulte:
• Limites baseados em DTU para piscinas elásticas.
• Limites baseados em vCore para piscinas elásticas.
Caso contrário, tente novamente mais tarde. DTU / vCore min por banco de dados; DTU / vCore max por banco de dados. O número total de trabalhadores simultâneos em todos os bancos de dados no pool elástico tentou exceder o limite do pool.
Considere aumentar as DTUs ou vCores do pool elástico, se possível, para aumentar seu limite de trabalho ou remover bancos de dados do pool elástico.
40844 16 O banco de dados '%ls' no servidor '%ls' é um banco de dados de edição '%ls' em um pool elástico e não pode ter uma relação de cópia contínua. N/A
40857 16 Pool elástico não encontrado para servidor: '%ls', nome do pool elástico: '%ls'. O pool elástico especificado não existe no servidor especificado. Forneça um nome de pool elástico válido.
40858 16 O pool elástico '%ls' já existe no servidor: '%ls'. O pool elástico especificado já existe no servidor especificado. Forneça um novo nome de pool elástico.
40859 16 O pool elástico não oferece suporte à camada de serviço '%ls'. A camada de serviço especificada não é suportada para o provisionamento de pool elástico. Forneça a edição correta ou deixe a camada de serviço em branco para usar a camada de serviço padrão.
40860 16 A combinação do pool elástico '%ls' e do objetivo de serviço '%ls' é inválida. O pool elástico e a camada de serviço podem ser especificados juntos somente se o tipo de recurso for especificado como 'ElasticPool'. Especifique a combinação correta de pool elástico e camada de serviço.
40861 16 A edição do banco de dados '%.*ls' não pode ser diferente da camada de serviço do pool elástico que é '%.*ls'. A edição do banco de dados é diferente da camada de serviço do pool elástico. Não especifique uma edição de banco de dados diferente da camada de serviço do pool elástico. Observe que a edição do banco de dados não precisa ser especificada.
40862 16 O nome do pool elástico deve ser especificado se o objetivo do serviço do pool elástico for especificado. O objetivo de serviço do pool elástico não identifica exclusivamente um pool elástico. Especifique o nome do pool elástico se estiver usando o objetivo do serviço do pool elástico.
40864 16 As DTUs para o pool elástico devem ser pelo menos (%d) DTUs para a camada de serviço '%.*ls'. Tentando definir as DTUs para o pool elástico abaixo do limite mínimo. Tente definir novamente as DTUs para o pool elástico para pelo menos o limite mínimo.
40865 16 As DTUs para o pool elástico não podem exceder (%d) DTUs para a camada de serviço '%.*ls'. Tentando definir as DTUs para o pool elástico acima do limite máximo. Tente definir novamente as DTUs para o pool elástico para não mais do que o limite máximo.
40867 16 O DTU max por banco de dados deve ser pelo menos (%d) para a camada de serviço '%.*ls'. Tentando definir o máximo de DTU por banco de dados abaixo do limite suportado. Considere o uso da camada de serviço do pool elástico que ofereça suporte à configuração desejada.
40868 16 O DTU max por banco de dados não pode exceder (%d) para a camada de serviço '%.*ls'. Tentando definir o máximo de DTU por banco de dados além do limite suportado. Considere o uso da camada de serviço do pool elástico que ofereça suporte à configuração desejada.
40870 16 O min de DTU por banco de dados não pode exceder (%d) para a camada de serviço '%.*ls'. Tentando definir o min DTU por banco de dados além do limite suportado. Considere o uso da camada de serviço do pool elástico que ofereça suporte à configuração desejada.
40873 16 O número de bancos de dados (%d) e DTU min por banco de dados (%d) não pode exceder as DTUs do pool elástico (%d). Tentando especificar min de DTU para bancos de dados no pool elástico que excedem as DTUs do pool elástico. Considere aumentar as DTUs do pool elástico, diminuir o min de DTU por banco de dados ou diminuir o número de bancos de dados no pool elástico.
40877 16 Um pool elástico não pode ser excluído, a menos que não contenha bancos de dados. O pool elástico contém um ou mais bancos de dados e, portanto, não pode ser excluído. Remova bancos de dados do pool elástico para excluí-lo.
40881 16 O pool elástico '%.*ls' atingiu seu limite de contagem de banco de dados. O limite de contagem do banco de dados para o pool elástico não pode exceder (%d) para um pool elástico com (%d) DTUs. Tentativa de criar ou adicionar banco de dados ao pool elástico quando o limite de contagem de banco de dados do pool elástico tiver sido atingido. Considere aumentar as DTUs do pool elástico, se possível, para aumentar seu limite de banco de dados ou remover bancos de dados do pool elástico.
40889 16 As DTUs ou o limite de armazenamento para o pool elástico '%.*ls' não podem ser reduzidos, pois isso não forneceria espaço de armazenamento suficiente para seus bancos de dados. Tentativa de diminuir o limite de armazenamento do pool elástico abaixo de seu uso de armazenamento. Considere reduzir o uso de armazenamento de bancos de dados individuais no pool elástico ou remover bancos de dados do pool para reduzir suas DTUs ou limite de armazenamento.
40891 16 O min de DTU por banco de dados (%d) não pode exceder o máximo de DTU por banco de dados (%d). Tentando definir o min de DTU por banco de dados maior do que o máximo de DTU por banco de dados. Verifique se o min de DTU por bancos de dados não excede o máximo de DTU por banco de dados.
TBD 16 O tamanho de armazenamento de um banco de dados individual em um pool elástico não pode exceder o tamanho máximo permitido pelo pool elástico da camada de serviço '%.*ls'. O tamanho máximo do banco de dados excede o tamanho máximo permitido pela camada de serviço do pool elástico. Defina o tamanho máximo do banco de dados dentro dos limites do tamanho máximo permitido pela camada de serviço do pool elástico.

Não é possível abrir o banco de dados "master" solicitado pelo login. O início de sessão falhou

Esse problema ocorre porque a conta não tem permissão para acessar o master banco de dados. Mas, por padrão, o SQL Server Management Studio (SSMS) tenta se conectar ao master banco de dados.

Para resolver este problema, siga estes passos:

  1. No ecrã de início de sessão do SSMS, selecione Opções e, em seguida, selecione Propriedades da Ligação.

  2. No campo Conectar ao banco de dados, insira o nome do banco de dados padrão do usuário como o banco de dados de logon padrão e selecione Conectar.

    Connection properties

Erros somente leitura

Se você tentar gravar em um banco de dados que seja somente leitura, receberá um erro. Em alguns cenários, a causa do status somente leitura do banco de dados pode não ser imediatamente clara.

Erro 3906: Falha ao atualizar o banco de dados "DatabaseName" porque o banco de dados é somente leitura.

Ao tentar modificar um banco de dados somente leitura, o seguinte erro será gerado.

Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.

Você pode estar conectado a uma réplica somente leitura

Para o Banco de Dados SQL do Azure e a Instância Gerenciada SQL do Azure, você pode estar conectado a um banco de dados em uma réplica somente leitura. Nesse caso, a seguinte consulta usando a função DATABASEPROPERTYEX() retornará READ_ONLY:

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');
GO

Se você estiver se conectando usando o SQL Server Management Studio, verifique se especificou ApplicationIntent=ReadOnly na guia Parâmetros de Conexão Adicionaisnas opções de conexão.

Se a conexão for de um aplicativo ou cliente usando uma cadeia de conexão, valide se a cadeia de conexão especificou ApplicationIntent=ReadOnly. Saiba mais em Conectar-se a uma réplica somente leitura.

O banco de dados pode ser definido como somente leitura

Se você estiver usando o Banco de Dados SQL do Azure, o próprio banco de dados pode ter sido definido como somente leitura. Você pode verificar o status do banco de dados com a seguinte consulta:

SELECT name, is_read_only
FROM sys.databases
WHERE database_id = DB_ID();

Você pode modificar o status somente leitura de um banco de dados no Banco de Dados SQL do Azure usando ALTER DATABASE Transact-SQL. No momento, não é possível definir um banco de dados em uma instância gerenciada como somente leitura.

Confirmar se um erro é causado por um problema de conectividade

Para confirmar se um erro é causado por um problema de conectividade, examine o rastreamento de pilha para quadros que mostram chamadas para abrir uma conexão como as seguintes (observe a referência à classe SqlConnection ):

System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
 at System.Data.SqlClient.SqlConnection.Open()
 at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:<Client connection ID>

Quando a exceção é acionada por problemas de consulta, você notará uma pilha de chamadas semelhante à seguinte (observe a referência à classe SqlCommand ). Nessa situação, ajuste suas consultas.

  at System.Data.SqlClient.SqlCommand.ExecuteReader()
  at AzureConnectionTest.Program.Main(String[] args)
  ClientConnectionId:<Client ID>

Para obter orientações adicionais sobre como ajustar o desempenho, consulte os seguintes recursos:

Steps to fix common connection issues (Passos para corrigir problemas de ligação comuns)

  1. Verifique se o TCP/IP está habilitado como um protocolo cliente no servidor de aplicativos. Para obter mais informações, consulte Configurar protocolos de cliente. Em servidores de aplicativos onde você não tem ferramentas SQL instaladas, verifique se o TCP/IP está habilitado executando cliconfg.exe (utilitário de rede cliente do SQL Server).

  2. Verifique a cadeia de conexão do aplicativo para certificar-se de que está configurado corretamente. Por exemplo, certifique-se de que a cadeia de conexão especifica a porta correta (1433) e o nome do servidor totalmente qualificado. Consulte Obter informações de conexão.

  3. Tente aumentar o valor do tempo limite de conexão. Recomendamos o uso de um tempo limite de conexão de pelo menos 30 segundos.

  4. Teste a conectividade entre o servidor de aplicativos e o Banco de Dados SQL do Azure usando o SQL Server Management Studio (SSMS), um arquivo UDL, ping ou telnet. Para obter mais informações, consulte Solução de problemas de conectividade e Diagnóstico de problemas de conectividade.

    Nota

    Como etapa de solução de problemas, você também pode testar a conectividade em um computador cliente diferente.

  5. Como prática recomendada, certifique-se de que a lógica de repetição esteja em vigor. Para obter mais informações sobre lógica de repetição, consulte Solucionar problemas de falhas transitórias e erros de conexão com o Banco de dados SQL.

Se estes passos não resolverem o problema, tente recolher mais dados e, em seguida, contacte o suporte. Se o seu aplicativo for um serviço de nuvem, habilite o registro. Esta etapa retorna um carimbo de data/hora UTC da falha. Além disso, o Banco de dados SQL retorna a ID de rastreamento. Os Serviços de Atendimento Microsoft podem usar essas informações.

Para obter mais informações sobre como habilitar o log, consulte Habilitar o log de diagnóstico para aplicativos no Serviço de Aplicativo do Azure.

Próximos passos

Saiba mais sobre tópicos relacionados nos seguintes artigos: