Solucionando problemas de conectividade e outros erros com o Banco de Dados SQL do Azure e a Instância Gerenciada de SQL do Azure

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

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

Observação

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

Mensagens de erro de falha transitória (40197, 40613 e outras)

O sistema Azure tem a capacidade de reconfigurar dinamicamente os servidores quando cargas de trabalho pesadas surgem no serviço do Banco de Dados SQL. Este comportamento dinâmico pode fazer com que o programa cliente perca a conexão com o banco de dados ou com a instância. Essa variante de condição de erro é chamada de uma falha transitória. Eventos de reconfiguração do banco de dados ocorrem devido a um evento planejado (por exemplo, uma atualização de software) ou um evento não planejado (por exemplo, uma falha no processo ou balanceamento de carga). A maioria dos eventos de reconfiguração geralmente é de curta duração e deve ser concluída em, no máximo, de 60 segundos. No entanto, esses eventos ocasionalmente podem levar mais tempo para serem concluídos, como quando uma transação grande causa uma recuperação de execução longa. 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 erros de falha transitória

Código do erro Severidade Descrição
926 14 O banco de dados “replicatedmaster” não pode ser aberto. Ele foi marcado como SUSPECT 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 de 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 que envolvem essa mensagem de erro são descritos na Documentação erros do MSSQL.
4060 16 Não é possível abrir o banco de dados "%.ls" solicitado pelo logon. Falha no logon. Para obter mais informações, veja Erros 4000 a 4999
40197 17 O serviço encontrou um erro ao processar sua solicitação. Tente novamente. Código de erro %d.

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

A reconexão conecta você automaticamente a uma cópia íntegra do banco de dados. Seu aplicativo deve capturar o erro 40197, registrar o código de erro inserido (%d) na mensagem para solução do problema e tentar se reconectar ao Banco de Dados SQL até que os recursos estejam disponíveis e a conexão seja restabelecida. Para obter mais informações, confira Erros transitórios.
40501 20 O serviço está ocupado. Repita a solicitação depois de 10 segundos. ID do incidente: %ls. Código: %d. Para obter mais informações, confira:
Limites lógicos de recursos do SQL Server.
Limites baseados em DTU para bancos de dados individuais.
Limites baseados em DTU para pools elásticos.
Limites baseados em vCore para bancos de dados individuais.
Limites baseados em vCore para pools elásticos.
Limites de recursos da Instância Gerenciada de SQL do Azure.
40613 17 O banco de dados '%.*ls' no servidor '%.*ls' não está disponível no momento. Tente a conexão novamente mais tarde. Se o problema persistir, entre em contato com o suporte ao cliente e forneça a ID de rastreamento da sessão de '%.*ls'.

Esse erro poderá ocorrer se já houver uma conexão de administrador dedicada (DAC) existente estabelecida com o banco de dados. Para obter mais informações, confira Erros transitórios.
49918 16 Não é possível processar a solicitação. Não há recursos suficientes para processar a solicitação.

O serviço está ocupado. Tente fazer novamente a solicitação. Para obter mais informações, confira:
Limites lógicos de recursos do SQL Server.
Limites baseados em DTU para bancos de dados individuais.
Limites baseados em DTU para pools elásticos.
Limites baseados em vCore para bancos de dados individuais.
Limites baseados em vCore para pools elásticos.
Limites de recursos da Instância Gerenciada de SQL do Azure.
49919 16 Não é possível criar o processo ou atualizar a solicitação. Muitas operações de criação ou atualização em andamento para a assinatura "%ld".

O serviço está ocupado processando várias solicitações de criação ou atualização para a assinatura ou o servidor. As solicitações estão bloqueadas no momento para a otimização de recursos. Consulte sys.dm_operation_status para obter as operações pendentes. Espere até que as solicitações pendentes de criação ou atualização sejam concluídas ou exclua uma das suas solicitações pendentes e tente a solicitação novamente mais tarde. Se as 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 travada, abra um tíquete de suporte com a Microsoft.
49920 16 Não é possível processar a solicitação. Muitas operações em andamento para assinatura "% ld".

O serviço está ocupado processando várias solicitações para essa assinatura. As solicitações estão bloqueadas no momento para a otimização de recursos. Consulte sys.dm_operation_status para obter o status da operação. Espere até que as solicitações pendentes estejam concluídas ou exclua uma das suas solicitações pendentes e tente a solicitação novamente mais tarde. Se as 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 travada, abra um tíquete de suporte com a Microsoft.
4221 16 Falha de logon secundário de leitura devido a longa espera em 'HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING'. A réplica não está disponível para logon porque as versões de linha estão ausentes para as transações que estão em curso quando a réplica foi reciclada. O problema pode ser resolvido por reverter ou confirmar as transações ativas na réplica primária. Ocorrências dessa condição podem ser minimizadas, evitando transações de tempo de gravação no primário.
615 21 Não foi possível localizar a ID de banco de dados %d, de nome '%.*ls'. Código de erro 615
Isso significa que o cache na memória não está sincronizado com SQL instância do servidor e as buscas estão recuperando a ID de banco de dados desajustada.

Os logons de SQL usam cache na memória para obter o nome do banco de dados para mapeamento de ID. O cache deve estar em sincronia com o banco de dados de back-end e atualizado sempre que anexar e desanexar do banco de dados de/para a instância do servidor SQL.
Você recebe esse erro quando o fluxo de trabalho de desanexar falha ao limpar o cache na memória no horário e as buscas subsequentes para de banco de dados indicam uma ID de banco de dados defasada.

Tentar reconectar ao banco de dados SQL até que o recurso esteja disponível e a conexão seja restabelecida. Para obter mais informações, confira Erros transitórios.

Etapas para resolver problemas de conectividade temporários

  1. Confira o Painel de Serviços do Microsoft Azure quanto a quaisquer interrupções conhecidas que tenham ocorrido durante o tempo em que o erro foi relatado pelo aplicativo.
  2. Aplicativos que se conectam a um serviço de nuvem, como o Banco de Dados SQL do Azure, devem esperar eventos de reconfiguração periódicos e implementar lógica de repetição para lidar com esses erros em vez de exibir erros de aplicativo aos usuários.
  3. Conforme um banco de dados se aproxima dos limites de recursos, pode parecer que há um problema de conectividade temporário. Confira Limites de recursos.
  4. Se problemas de conectividade continuarem, se a duração pela qual o aplicativo encontra o erro exceder 60 segundos ou se você vir várias ocorrências do erro em um determinado dia, envie 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 tem a lógica de repetição para que ele pôde restabelecer uma conexão após conceder, a hora de falhas transitórias para corrigir a mesmo. É recomendável que você aguarde 5 segundos antes de sua primeira tentativa. Tentar novamente após um atraso inferior a 5 segundos pode sobrecarregar o serviço de nuvem. Para cada tentativa subsequente, o atraso deverá aumentar 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, veja 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 o ADO.NET está disponível em Pool de conexão (ADO.NET).

O problema ocorrerá se o aplicativo não puder 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 de nível de transporte ao receber os 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)

Estes problemas ocorrerão se o aplicativo não puder se conectar ao servidor.

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

Não é possível se conectar 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 fazer logon no servidor (erros 18456, 40531)

Falha no logon do usuário '< User name >'

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, entre em contato com o administrador de serviços para fornecer um nome de usuário e uma senha válidos.

Normalmente, o administrador de serviços pode usar as etapas a seguir para adicionar as credenciais de logon:

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

  2. Execute a seguinte consulta SQL no banco de dados master para verificar se a ID de logon está desabilitada:

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. Se o nome correspondente estiver desabilitado, habilite-o usando a instrução a seguir:

    ALTER LOGIN <User name> ENABLE;
    
  4. Se o nome de usuário de logon do SQL não existe, edite e execute a seguinte consulta SQL para criar um novo logon do 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 em Segurança e, em seguida, selecione Novo, Usuário.

  8. No script gerado com espaços reservados (exemplo mostrado abaixo), substitua os parâmetros do modelo executando estas etapas:

    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 as funções específicas do banco de dados.

    Observação

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

Para obter mais informações, veja 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 expirado

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 básico falhou ao abrir

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 a < server name >

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 de consulta. Para confirmar se esse erro é causado por problemas de conectividade, veja 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 encerramento de conexão de rede

As bibliotecas de cliente SQL se conectam ao Banco de Dados SQL do Azure e à Instância Gerenciada de SQL do Azure usando o protocolo de rede TCP. Uma biblioteca de clientes usa um componente de nível inferior chamado de provedor TCP para gerenciar conexões TCP. Quando o provedor TCP detecta que um host remoto encerrou inesperadamente uma conexão TCP existente, a biblioteca de clientes gera um erro. Como é um erro do 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 de erro é 0 e a mensagem de erro do provedor TCP é usada.

Exemplos de erros de encerramento de conexão de rede:

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 encerramento de conexão podem ocorrer porque o banco de dados ou o 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. Esses problemas podem ser transitórios ou permanentes. Como diretriz geral, os aplicativos devem usar um número fixo de tentativas de repetição 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 com base no Resource Governor 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ções 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 dirá: 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 dirá: os limites do pool elástico 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. são maiores do que os limites do banco de dados. Para obter mais informações, confira Limites de recursos. Eles podem ser acessados quando vários bancos de dados no pool usam um recurso (como trabalhadores) simultaneamente.

Esta 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 trabalhos 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.

Observação

A oferta inicial do Banco de Dados SQL do Azure suportava apenas consultas com thread único. Nesse momento, o número de solicitações sempre foi equivalente ao número de funções de trabalhos. As mensagens de erro 10928 e 10936 no Banco de Dados SQL do Azure contêm a redação "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 trabalhos. Se seu grau máximo de paralelismo (MAXDOP) for igual a zero ou for maior do que um, o número de funções de trabalhos poderá ser muito maior do que o número de solicitações, e o limite poderá ser atingido muito mais cedo do que quando MAXDOP for igual a um.

Saiba mais sobre Sessões, funções de trabalhos e solicitações.

Conexão 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 SQL Server Management Studio (SSMS) ou Azure Data Studio. Uma sessão pode se conectar usando a Conexão de DAC (Diagnóstico para Administradores de Banco de Dados) mesmo quando o limite máximo de trabalho tiver sido atingido.

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

  • No menu, selecione Arquivo> Novo> 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 Propriedades da Conexão
  • Na caixa Conexão para banco de dados: digite o nome do banco de dados
  • Selecione Conectar.

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. Somente uma sessão pode se conectar ao DAC para um único banco de dados ou um pool elástica por vez.

Se você encontrar o erro "Falha ao se conectar ao servidor" após selecionar Conexão, a sessão do DAC ainda poderá ter sido estabelecida com êxito se você estiver usando uma versão do SSMS anterior à 18.9. As versões SSMS tentaram fornecer o Intellisense para conexões com o DAC. Isso falhou, pois o DAC dá suporte a apenas um único trabalhador e o Intellisense requer um trabalho separado.

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

Analisar o uso max_worker_percent usuário

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

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 da exibição de gerenciamento dinâmico sys.dm_db_resource_stats. Conexão diretamente ao banco de dados para consultar sys.dm_db_resource_stats.

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

Menor uso do trabalho quando possível

As cadeias de bloqueio podem causar um aumento repentino no número de funções de trabalhos em um banco de dados. Um grande volume de consultas paralelas simultâneas pode causar um grande número de funções de trabalhos. Aumentar seu grau máximo de paralelismo (MAXDOP) ou definir MAXDOP como zero pode aumentar o número de funções de trabalhos ativos.

Triagem de um incidente com as funções de trabalhos insuficientes seguindo estas etapas:

  1. Investigue se o bloqueio está ocorrendo ou se você pode identificar um grande volume das funções de trabalhos simultâneas. Execute a seguinte consulta para examinar as solicitações atuais e verificar se há bloqueio quando o banco de dados está retornando o Erro 10928. Talvez seja necessário conectar-se à 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 para blocking_session_id identificar sessões bloqueadas. Encontre cada blocking_session_id um na lista para determinar se essa sessão também está bloqueada. Isso eventualmente levará você ao bloqueador de cabeça. Ajuste a consulta do bloqueador de cabeçalho.

      Observação

      Para obter informações mais detalhadas sobre como solucionar problemas de consultas de execução prolongada ou de bloqueio, veja Entender e resolver problemas de bloqueio do Banco de Dados SQL do Azure.

    2. Para identificar um grande volume das funções de trabalhos simultâneas, revise o número de solicitações gerais e a coluna worker_count para cada solicitação. Worker_count é o número de funções de trabalhos no momento da amostra 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 das funções de trabalhos for de consultas simultâneas que estão sendo executados em seu grau ideal de paralelismo. Para saber mais, consulte Ajuste/Dicas de consulta.

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

Aumentar os limites de trabalho

Se o banco de dados ou pool elástico atingir consistentemente seu limite de trabalho, apesar do bloqueio de endereçamento, otimização de consultas e validação da configuração MAXDOP, considere dimensionar o banco dados ou pool elástico para aumentar o limite de trabalho.

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

Saiba mais sobre aGovernança de recursos de funções de trabalhos do Banco de Dados SQL do Azure.

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á ocupado no momento

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

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

Para obter mais informações sobre limites de recursos, veja Limites de recursos lógicos 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>.

Esse erro ocorre quando o banco de dados atinge sua cota de tamanho.

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

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

    Observação

    Para identificar quais tabelas estão consumindo mais espaço e, portanto, são possíveis candidatas para 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 com suporte para sua edição, você poderá usar ALTER DATABASE para aumentar a configuração MAXSIZE.

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

    • Executar atividades normais de limpeza de banco de dados. Por exemplo, limpe os dados indesejados usando truncar/excluir ou mova os dados usando SQL Server Integration Services (SSIS) ou o utilitário programa de cópia em massa (bcp).
    • Particione ou exclua dados, descarte índices ou consulte a documentação para conhecer as possíveis resoluções.
    • Para o dimensionamento de banco de dados, veja Dimensionar recursos de banco de dados individual e Dimensionar recursos de pool elástico.

Erro 40549: a sessão foi encerrada porque você tem uma transação de longa execução

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

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

  1. Execute a seguinte consulta para ver sessões abertas que tenham um valor elevado para a coluna duration_ms:

    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 linhas nas quais a coluna input_buffer mostra uma leitura de consulta de sys.fn_MSxe_read_event_stream: essas solicitações estão relacionadas a sessões de Evento Estendido.

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

    Observação

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

  3. Considere o envio em lote de suas consultas. Para saber sobre o envio em lote, veja Como usar o envio em lote para melhorar o desempenho do aplicativo 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 encontrar uma solução alternativa para esse problema, siga essas etapas:

  1. Altere as consultas para reduzir o uso de espaço de tabela temporário.
  2. Remover objetos temporários quando não são mais necessários.
  3. Truncar tabelas ou remover tabelas não usadas.

Erro 40552: a sessão foi encerrada devido ao uso excessivo de espaço de 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 esse problema, tente métodos a seguir:

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 detalhado de solução de problemas, veja Minha consulta está funcionando bem na nuvem?.

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

Tabela de mensagens de erro de governança de recursos

Código do erro Severidade Descrição
10928 20 ID do recurso: %d. O limite de %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 qual dos recursos atingiu o limite. Quando a ID do Recurso = 1, isso indica que um limite de trabalho 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 a ID do 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 bancos de dados individuais.
Limites baseados em vCore para bancos de dados individuais.
Limites de recursos da Instância Gerenciada de SQL do Azure.
10936 20 ID do recurso: %d. O limite de %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 qual dos recursos atingiu o limite. Quando a ID do Recurso = 1, isso indica que um limite de trabalho foi atingido. Saiba mais em Erro 10936: ID de recurso : 1. O limite de solicitações para o pool elástico é %d, o qual foi atingido. Quando a ID do 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 pools elásticos.
Limites baseados em vCore para pools elásticos.
Limites de recursos da Instância Gerenciada de 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á muito ocupado para dar suporte a solicitações maiores que %d para este banco de dados. A ID do recurso indica qual dos recursos atingiu o limite. Para threads de trabalho, a ID do recurso é igual a 1. Para sessões, a ID do recurso é igual a 2. Para obter mais informações, confira:
Limites lógicos de recursos do SQL Server.
Limites baseados em DTU para bancos de dados individuais.
Limites baseados em DTU para pools elásticos.
Limites baseados em vCore para bancos de dados individuais.
Limites baseados em vCore para pools elásticos.
Limites de recursos da Instância Gerenciada de SQL do Azure.
Caso contrário, tente novamente mais tarde.
40544 20 O banco de dados atingiu sua cota de tamanho. Particione ou exclua dados, descarte índices ou consulte a documentação para conhecer as possíveis resoluções. Para dimensionamento de banco de dados, veja Dimensionar recursos de banco de dados individual e Dimensionar recursos de pool elástico.
40549 16 A sessão foi terminada porque você tem uma transação de longa execução. Tente encurtar a transação. Para saber sobre o envio em lote, veja Como usar o envio em lote para melhorar o desempenho do aplicativo Banco de Dados SQL.
40550 16 A sessão foi terminada porque ela adquiriu muitos bloqueios. Tente ler ou modificar menos linhas em uma única transação. Para saber sobre o envio em lote, veja Como usar o envio em lote para melhorar o desempenho do aplicativo Banco de Dados SQL.
40551 16 A sessão foi encerrada devido ao uso excessivo de tempdb . Tente modificar a consulta para reduzir o uso de espaço de tabela temporária.

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

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

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

Erros de pool elástico

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

Código do erro Severidade Descrição Ação Corretiva
1132 17 O pool elástico atingiu seu limite de armazenamento. O uso do armazenamento do pool elástico não pode exceder (%d) MB. Tentando gravar dados em um banco de dados quando o limite de armazenamento do pool elástico foi atingido. Para obter informações sobre limites de recursos, veja:
Limites baseados em DTU para pools elásticos.
Limites baseados em vCore para pools elásticos.
Considere a possibilidade de 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, veja Dimensionar recursos do pool elástico. Para obter mais informações sobre como remover espaço não utilizado de bancos de dados, veja 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á muito ocupado para dar suporte a solicitações maiores que %d para este banco de dados. Para obter informações sobre limites de recursos, veja:
Limites baseados em DTU para pools elásticos.
Limites baseados em vCore para pools elásticos.
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 funções de trabalhos simultâneas em todos os bancos de dados no pool elástico, tentou exceder o limite do pool.
Considere a possibilidade de aumentar as DTUs ou vCores do pool elástico, se possível, para aumentar o limite de funções 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 edição '%ls' em um pool elástico e não pode ter um relacionamento de cópia contínuo. N/D
40857 16 Pool elástico não encontrado para o 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 dá suporte à camada de serviço '%ls'. A camada de serviço especificada não dá suporte ao provisionamento de pool elástico. Forneça a edição correta ou deixe a camada de serviço em branco para o padrão.
40860 16 A combinação de pool elástico '%ls' e objetivo de serviço '%ls' é inválida. O pool elástico e a camada de serviço poderão 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 que seja 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 deverá ser especificado se o objetivo de 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 você estiver usando o objetivo de serviço do pool elástico.
40864 16 A quantidade mínima de DTUs para o pool elástico deve ser de (%d) DTUs para a camada de serviço '%.*ls'. Tentando definir uma quantidade de DTUs para o pool elástico abaixo do limite mínimo. Tente configurar novamente as DTUs para o pool elástico de acordo com o limite mínimo.
40865 16 A quantidade máxima de DTUs para o pool elástico deve ser de (%d) DTUs para a camada de serviço '%.*ls'. Tentando definir uma quantidade de DTUs para o pool elástico acima do limite máximo. Tente configurar novamente as DTUs para o pool elástico de acordo com o limite máximo.
40867 16 O máximo de DTUs por banco de dados deve ser de pelo menos (%d) para a camada de serviço '%.*ls'. Tentando definir o máximo de DTUs por banco de dados abaixo do limite permitido. Considere a possibilidade de usar a camada de serviço do pool elástico que dá suporte à configuração desejada.
40868 16 O máximo de DTUs por banco de dados não deve exceder (%d) para a camada de serviço '%.*ls'. Tentando definir o máximo de DTUs por banco de dados acima do limite permitido. Considere a possibilidade de usar a camada de serviço do pool elástico que dá suporte à configuração desejada.
40870 16 O mínimo de DTUs por banco de dados deve ser de, no máximo, (%d) para a camada de serviço '%.*ls'. Tentando definir o mínimo de DTUs por banco de dados acima do limite permitido. Considere a possibilidade de usar a camada de serviço do pool elástico que dá suporte à configuração desejada.
40873 16 O número de bancos de dados (%d) e o mínimo de DTUs por banco de dados (%d) não podem exceder as DTUs do pool elástico (%d). Tentando especificar uma quantidade mínima de DTUs para bancos de dados no pool elástico que excede as DTUs do pool elástico. Considere a possibilidade de aumentar as DTUs do pool elástico, diminuir o mínimo de DTUs por banco de dados ou diminuir o número de bancos de dados no pool elástico.
40877 16 Não é possível excluir um pool elástico, a menos que ele 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 os bancos de dados do pool elástico para excluí-lo.
40881 16 O pool elástico '%.*ls' atingiu o limite de banco de dados. O limite de bancos de dados para o pool elástico não pode exceder (%d) para um pool elástico com (%d) DTUs. Tentando criar ou adicionar um banco de dados ao pool elástico quando o limite de bancos de dados do pool elástico foi atingido. Considere a possibilidade de aumentar as DTUs do pool elástico, se possível, para aumentar o limite de bancos de dados ou remover bancos de dados do pool elástico.
40889 16 O limite de DTUs ou de armazenamento para o pool elástico '%.*ls' não pode ser reduzido, pois não haveria espaço de armazenamento suficiente para seus bancos de dados. Tentando reduzir o limite de armazenamento do pool elástico abaixo do seu uso de armazenamento. Considere a possibilidade de reduzir o uso do armazenamento de bancos de dados individuais no pool elástico ou remover bancos de dados do pool para reduzir seu limite de DTUs ou de armazenamento.
40891 16 O mínimo de DTUs por banco de dados (%d) não pode ser superior ao máximo de DTUs por banco de dados (%d). Tentando definir o mínimo de DTUs por banco de dados acima do máximo de DTUs por banco de dados. Verifique se o mínimo de DTUs por bancos de dados não excede o máximo de DTUs por banco de dados.
TBD 16 O tamanho do 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 "mestre" solicitado pelo logon. O logon falhou

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

Para resolver esse problema, siga estas etapas:

  1. Na tela de logon do SSMS, selecione Opções e, em seguida, selecione Propriedades da conexã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, em seguida, selecione Conectar.

    Connection properties

Erros somente leitura

Se você tentar gravar em um banco de dados 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

Tanto para o Banco de Dados SQL do Azure quanto para a Instância Gerenciada de SQL do Azure, é possível conectar-se 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 conectando usando o SQL Server Management Studio, verifique se especificou ApplicationIntent=ReadOnly na guia Parâmetros de Conexão Adicionaisem suas 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 uma réplica somente leitura.

O banco de dados pode ser definido como somente leitura

Se estiver usando o Banco de Dados SQL do Azure, o próprio banco de dados pode ter sido definido como somente leitura. É possível 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 for disparada 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 diretrizes adicionais sobre o desempenho de ajuste fino, consulte os seguintes recursos:

Etapas para corrigir problemas comuns de conexão

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

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

  3. Tente aumentar o valor do tempo limite da conexão. É recomendável usar 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, veja Solucionando problemas de conectividade e Diagnósticos de problemas de conectividade.

    Observação

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

  5. Como melhor prática, certifique-se de que a lógica de nova tentativa está em prática. Para obter mais informações sobre a lógica de nova tentativa, consulte Solucionar problemas de falhas transitórias e erros de conexão com o Banco de Dados SQL.

Se essas etapas não resolverem o problema, tente coletar mais dados e entre em contato com o suporte. Se o aplicativo for um serviço de nuvem, habilite o registro em log. Esta etapa retorna um stamp de data/hora UTC da falha. Além disso, o Banco de Dados SQL retorna a ID de rastreamento. Os Serviços de Atendimento ao Cliente da Microsoft podem usar essas informações.

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

Próximas etapas

Saiba mais sobre tópicos relacionados nos seguintes artigos: