Problemas de conectividade de resolução de problemas e outros erros com SQL do Azure Database e Azure SQL Managed Instance

Aplica-se a: SQL do Azure Azure SQL Managed Instance de base de dados

Recebe mensagens de erro quando a ligação à Base de Dados de SQL do Azure ou Azure SQL Managed Instance falha. Estes problemas de ligação podem ser causados por reconfiguração, definições de firewall, tempo limite de ligação, informações incorretas de login ou falha na aplicação de boas práticas e orientações de design durante o processo de conceção da aplicação . Além disso, se for atingido o limite máximo de alguns SQL do Azure Base de Dados ou SQL Managed Instance recursos, já não é possível ligar.

Nota

Pode utilizar SQL do Azure Verificador de Conectividade para detetar e corrigir uma grande variedade de erros de conectividade para SQL do Azure Database, Azure SQL Managed Instance e em ambientes Azure Synapse Analytics.

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

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 pode fazer com que o seu programa de clientes perca a sua ligação à base de dados ou caso. 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 equilíbrio de carga). A maioria dos eventos de reconfiguração são geralmente de curta duração e devem ser concluídos em menos de 60 segundos no máximo. No entanto, estes eventos podem ocasionalmente demorar mais tempo a terminar, como quando uma grande transação causa uma recuperação prolongada. A tabela que se segue enumera vários erros transitórios que as aplicações podem receber ao ligar-se à Base de Dados SQL do Azure.

Lista de códigos de erro transitórios

Código de erro Gravidade Descrição
926 14 A base de dados "replicatedmaster" não pode ser aberta. Tem sido marcado suspeito pela recuperação. Consulte o SQL Server errorlog para obter mais informações.

Este erro pode ser registado no SQL Managed Instance errorlog, durante um curto período de tempo, durante a última fase de uma reconfiguração, enquanto a antiga primária está a desligar o seu registo.
Outros cenários não transitórios que envolvam esta mensagem de erro são descritos na documentação de erros mssQL.
4060 16 Não é possível abrir a base de dados "%.*ls" solicitada pelo login. O início de sessão falhou. Para mais informações, consulte Errors 4000 a 4999
40197 17 O serviço encontrou um erro ao processar o pedido. Tente novamente. Código de erro %d.

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

A reconexão liga-o automaticamente a uma cópia saudável da sua base de dados. A sua aplicação deve apanhar o erro 40197, registar o código de erro incorporado (%d) dentro da mensagem para resolução de problemas e tentar reconectar-se com Base de Dados SQL até que os recursos estejam disponíveis, e a sua ligação seja novamente estabelecida. 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 obter mais informações, consulte:
Limites de recursos do servidor SQL lógicos
Limites baseados em DTU para bases de dados individuais
Limites à base de DTU para piscinas elásticas
limites baseados em vCore para bases de dados individuais
limites à base de vCore para piscinas elásticas
Azure SQL Managed Instance limites de recursos.
40613 17 A base de dados '%.*ls' no servidor '%.*ls' não está atualmente disponível. Por favor, re-teste a ligação mais tarde. Se o problema persistir, contacte o suporte do cliente e forneça-lhes o ID de '%.*ls'.

Este erro pode ocorrer se já existir uma ligação de administrador dedicada existente (DAC) estabelecida na base 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, re-preenquanto o pedido mais tarde. Para obter mais informações, consulte:
Limites de recursos do servidor SQL lógicos
Limites baseados em DTU para bases de dados individuais
Limites à base de DTU para piscinas elásticas
limites baseados em vCore para bases de dados individuais
limites à base de vCore para piscinas elásticas
Azure SQL Managed Instance limites de recursos.
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 a processar vários pedidos de criação ou atualização para a sua subscrição ou servidor. Os pedidos estão atualmente bloqueados para otimização de recursos. Consulta sys.dm_operation_status para operações pendentes. Aguarde até que os pedidos de criação ou atualização pendentes estejam completos ou elimine um dos seus pedidos pendentes e relemisse o seu pedido mais tarde. Se as suas operações parecerem estar presas, aguarde que outras operações em curso sejam concluídas, ou cancele-as sempre que possível. Por exemplo, poderá cancelar uma cópia de base de dados ou criação de geo-réplicas eliminando a base de dados ou a réplica que está a ser criada. Se não conseguir cancelar uma operação aparentemente encravada, abra um bilhete de apoio 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 a processar vários pedidos para esta subscrição. Os pedidos estão atualmente bloqueados para otimização de recursos. Consulta sys.dm_operation_status para o estado de funcionamento. Aguarde até que os pedidos pendentes estejam completos ou elimine um dos seus pedidos pendentes e relemisse o seu pedido mais tarde. Se as suas operações parecerem estar presas, aguarde que outras operações em curso sejam concluídas, ou cancele-as sempre que possível. Por exemplo, poderá cancelar uma cópia de base de dados ou criação de geo-réplicas eliminando a base de dados ou a réplica que está a ser criada. Se não conseguir cancelar uma operação aparentemente encravada, abra um bilhete de apoio com a Microsoft.
4221 16 O login para ler secundário 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 a bordo quando a réplica foi reciclada. A questão pode ser resolvida recuando ou cometendo as transações ativas na réplica primária. As ocorrências desta condição podem ser minimizadas evitando transações de escrita longas nas primárias.
615 21 Não foi possível encontrar o ID da base de dados %d, o nome "%.*ls". Código de erro 615.
Isto significa que a cache na memória não está sincronizada com a instância do servidor SQL e as procuras estão a recuperar o ID da base de dados.

Os logins SQL usam cache de memória para obter o nome da base de dados para mapeamento de ID. A cache deve estar sincronizada com a base de dados de backend e atualizada sempre que ocorra a anexação e desconexão da base de dados para/a partir da instância do servidor SQL.
Recebe este erro quando o fluxo de trabalho descolado não consegue limpar a cache na memória a tempo e as pesquisas subsequentes para a base de dados apontam para iD de base de dados velha.

Tente voltar a ligar-se a Base de Dados SQL até que o recurso esteja disponível e a ligação seja novamente estabelecida. Para obter mais informações, veja Erros transitórios.

Medidas para resolver problemas transitórios de conectividade

  1. Verifique o Painel de Assistência do Microsoft Azure para saber se as falhas conhecidas ocorreram durante o período durante o qual os erros foram reportados pela aplicação.
  2. As aplicações que se ligam a um serviço na nuvem, como SQL do Azure Database, devem esperar eventos periódicos de reconfiguração e implementar lógica de repetição para lidar com estes erros em vez de surgirem erros de aplicação para os utilizadores.
  3. À medida que uma base de dados se aproxima dos seus limites de recursos, pode parecer uma questão de conectividade transitória. Consulte os limites de recursos.
  4. Se os problemas de conectividade continuarem, ou se a duração durante a qual a sua aplicação encontra o erro exceder 60 segundos ou se vir várias ocorrências do erro num determinado dia, arquive um pedido de suporte do Azure selecionando Obter Suporte no site do Suporte Azure.

Implementação da Lógica de Retry

Recomenda-se vivamente que o seu programa de clientes tenha uma lógica de retíria para que possa restabelecer uma ligação depois de dar tempo de falha transitória para se corrigir. Recomendamos que atrase por 5 segundos antes da primeira repetição. Tentar novamente depois de um atraso inferior a 5 segundos corre o risco de sobrecarregar o serviço de nuvem. Para cada tentativa subsequente, o atraso deve crescer exponencialmente, até um máximo de 60 segundos.

Para exemplos de código de lógica de retíria, consulte:

Para informações adicionais sobre como lidar com erros transitórios na sua aplicação, reveja erros de ligação transitórios para Base de Dados SQL

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

O problema ocorre se a aplicação não conseguir ligar-se ao servidor.

Para resolver este problema, experimente os passos (na ordem apresentada) na secção Etapas para corrigir questões de conexão comuns .

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

Erro 26: Servidor de localização de erros 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 ligação ao 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 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 ocorrem se a aplicação não conseguir ligar-se ao servidor.

Para resolver estas questões, experimente os passos (na ordem apresentada) na secção Etapas para corrigir questões de conexão comuns .

Não é possível ligar ao servidor devido a problemas de firewall

Erro 40615: Não é possível ligar-se ao < nome do servidor >

Para resolver este problema, configure as definições de firewall na Base de Dados SQL através do portal do Azure.

Erro 5: Não é possível ligar-se ao < nome do servidor >

Para resolver este problema, certifique-se de que a porta 1433 está aberta para ligações de saída em todas as firewalls entre o cliente e a internet.

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

O login falhou para o nome >de utilizador '<

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 este problema, contacte o seu administrador de serviço para lhe fornecer um nome de utilizador válido e uma palavra-passe.

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

  1. Inicie sessão no servidor utilizando SQL Server Management Studio (SSMS).

  2. Faça a seguinte consulta SQL na master base de dados para verificar se o nome de login está desativado:

    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 utilizador de login SQL não existir, edite e execute a seguinte consulta SQL para criar um novo login SQL:

    CREATE LOGIN <SQL_login_name, sysname, login_name>
    WITH PASSWORD = '<password, sysname, Change_Password>';
    GO
    
  5. Na Object Explorer SSMS, expanda as bases de dados.

  6. Selecione a base de dados a que pretende conceder a permissão do utilizador.

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

  8. No script gerado com espaços reservados (amostra mostrada abaixo), substitua os parâmetros do modelo seguindo os passos 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
    

    Também pode usar sp_addrolemember para mapear utilizadores específicos para funções específicas de base de dados.

    Nota

    Em SQL do Azure Database, considere a sintaxe alter role mais recente para gerir a adesão à função de base de dados.

Para obter mais informações, consulte Bases de dados e logins em SQL do Azure Base de Dados.

Erros expirados no tempo de tempo de ligação

System.Data.SqlClient.SqlException (0x80131904): Tempo de ligaçã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): Timeout expirou

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.EntityExcepção: O fornecedor 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 ligar-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

Estas exceções podem ocorrer quer por questões de ligação quer por questões de consulta. Para confirmar que este erro é causado por problemas de conectividade, consulte confirmar se um erro é causado por um problema de conectividade.

Os intervalos de ligação ocorrem porque a aplicação não pode ligar-se ao servidor. Para resolver este problema, experimente os passos (na ordem apresentada) na secção Etapas para corrigir questões de conexão comuns .

Erros de governação de recursos

SQL do Azure Database utiliza uma implementação de governação de recursos baseada em Resource Governor para impor limites de recursos. Saiba mais sobre a gestão de recursos na SQL do Azure Database.

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

Erro 10928: Identificação de recursos: 1. O limite de pedido para a base de dados é de %d e foi 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.

Esta mensagem de erro indica que o limite do trabalhador para SQL do Azure Base de Dados foi atingido. Um valor estará presente em vez do espaço reservado %d. Este valor indica o limite do trabalhador para a sua base de dados no momento em que o limite foi atingido.

Nota

A oferta inicial de SQL do Azure Database suportava apenas consultas com fios únicos. Nessa altura, o número de pedidos era sempre equivalente ao número de trabalhadores. Error message 10928 in SQL do Azure Database contém a redação "O limite de pedido para a base de dados é N e foi alcançado" para fins de retrocompatibilidade. O limite atingido é, na verdade, o número de funções de trabalho. Se o seu grau máximo de paralelismo (MAXDOP) é igual a zero ou é superior a um, o número de trabalhadores pode ser muito superior ao número de pedidos, e o limite pode ser atingido muito mais cedo do que quando MAXDOP é igual a um.

Saiba mais sobre Sessões, trabalhadores e pedidos.

Conecte-se com a Conexão Administração Dedicada (DAC) se necessário

Se houver um incidente ao vivo em que o limite do trabalhador tenha sido abordado ou atingido, poderá receber o Erro 10928 quando ligar usando SQL Server Management Studio (SSMS) ou Azure Data Studio. Uma sessão pode ligar-se utilizando a Ligação de Diagnóstico para Administradores de Bases de Dados (DAC) mesmo quando o limiar máximo do trabalhador foi atingido.

Estabelecer uma ligação com o CAD a partir de SSMS:

  • A partir do menu, selecione File > New > Database Engine Consulta
  • A partir da caixa de diálogo de ligação no campo Nome do servidor, insira admin:<fully_qualified_server_name> (isto será algo como admin:servername.database.windows.net).
  • Selecione Opções >>
  • Selecione o separador Propriedades de Ligação
  • Na base de dados 'Ligar à base de dados: box', digite o nome da sua base de dados
  • Selecione Ligar.

Se 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'isto pode indicar que outra sessão já está ligada ao DAC. Apenas uma sessão pode ligar-se ao DAC para uma única base de dados ou uma piscina elástica de cada vez.

Se encontrar o erro 'Falhando a ligação ao servidor' depois de selecionar o Connect, a sessão DAC poderá ainda ter sido estabelecida com sucesso se estiver a utilizar uma versão de SSMS antes de 18.9. As primeiras versões de SSMS tentaram fornecer intellisense para ligações ao DAC. Isto falhou, uma vez que o CAD apoia apenas um único trabalhador e o Intellisense requer um trabalhador separado.

Não é possível utilizar uma ligação DAC com Object Explorer.

Reveja o seu uso de max_worker_percent

Para encontrar estatísticas de consumo de recursos para a sua base de dados durante 14 dias, consulte a sys.resource_stats vista do catálogo do sistema. A max_worker_percent coluna mostra a percentagem de trabalhadores utilizados em relação ao limite de trabalhadores para a sua base de dados. Conecte-se à base de dados principal do 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;

Também pode consultar as estatísticas de consumo de recursos da última hora a partir da sys.dm_db_resource_stats vista dinâmica de gestão. Conecte-se diretamente à sua base 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 utilização do trabalhador quando possível

As cadeias de bloqueio podem causar um aumento súbito do número de trabalhadores numa base de dados. Um grande volume de consultas paralelas simultâneas pode causar um elevado número de trabalhadores. Aumentar o seu grau máximo de paralelismo (MAXDOP) ou definir MAXDOP a zero pode aumentar o número de trabalhadores ativos.

Triagem um incidente com trabalhadores insuficientes seguindo estes passos:

  1. Investigue se está a ocorrer bloqueio ou se pode identificar um grande volume de trabalhadores simultâneos. Faça a seguinte consulta para examinar os pedidos atuais e verifique se bloqueia quando a sua base de dados está a devolver o Erro 10928. Poderá ser necessário ligar-se à Ligação Administração (DAC) dedicada 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 filas com uma blocking_session_id para identificar sessões bloqueadas. Encontre cada um blocking_session_id na lista para determinar se essa sessão também está bloqueada. Isto irá eventualmente levá-lo ao bloqueador de cabeça. Sintonize a consulta do bloqueador de cabeça.

      Nota

      Para obter informações mais detalhadas sobre a resolução de problemas de longa duração ou bloqueio de consultas, consulte Compreender e resolver SQL do Azure problemas de bloqueio de bases de dados.

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

  2. Avalie o grau máximo de paralelismo (MAXDOP) para a base de dados.

Aumentar os limites dos trabalhadores

Se a base de dados atingir consistentemente o seu limite, apesar de abordar o bloqueio, otimizar consultas e validar a sua definição MAXDOP, considere adicionar mais recursos à base de dados para aumentar o limite do trabalhador.

Encontre limites de recursos para SQL do Azure Base de Dados por nível de serviço e tamanho de cálculo:

Saiba mais sobre SQL do Azure a governação dos recursos da Base de Dados dos trabalhadores.

Erro 10929: ID de 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.

Trata-se de um erro de estrangulamento do motor, uma indicação de que os limites de recursos estão a ser ultrapassados.

Para obter mais informações sobre os limites de recursos, consulte os limites de recursos do servidor Lógico SQL.

Erro 40544: A base de dados atingiu a sua quota 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 a base de dados atingiu a sua quota de tamanho.

Os seguintes passos podem ajudá-lo a contornar o problema ou fornecer-lhe mais opções:

  1. Verifique o tamanho atual da base de dados utilizando o painel de instrumentos no portal do Azure.

    Nota

    Para identificar quais as tabelas que consomem mais espaço e, portanto, são potenciais candidatos à 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 a sua edição, pode utilizar a BASE DE DADOS ALTER para aumentar a definição MAXSIZE.

  3. Se a base de dados já tiver ultrapassado o tamanho máximo suportado para a sua edição, experimente um ou mais dos seguintes passos:

    • Realizar atividades normais de limpeza de bases de dados. Por exemplo, limpe os dados indesejados utilizando o truncato/apagar, ou desloque os dados utilizando SQL Server Serviços de Integração (SSIS) ou o utilitário do programa de cópias a granel (bcp).
    • Particione ou elimine dados, remova índices ou consulte a documentação para obter as possíveis resoluções.
    • Para escalar a base de dados, consulte os recursos de base de dados únicos de escala e recursos de piscina elástica em escala.

Erro 40549: A sessão termina porque tem uma transação de longa duração

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

Se encontrar repetidamente este erro, tente resolver o problema seguindo estes passos:

  1. Executar a seguinte consulta para ver quaisquer sessões abertas que tenham um valor elevado 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
    

    Pode optar por ignorar linhas onde a input_buffer coluna mostra uma leitura de sys.fn_MSxe_read_event_streamconsulta: estes pedidos estão relacionados com sessões de Eventos Prolongados.

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

    Nota

    Para obter mais informações sobre o bloqueio de resolução de problemas na base de dados SQL do Azure, consulte Compreender e resolver SQL do Azure problemas de bloqueio de bases de dados.

  3. Considere emarnar as suas consultas. Para obter informações sobre o lote, consulte como utilizar o lote para melhorar Base de Dados SQL desempenho da aplicação.

Erro 40551: A sessão foi encerrada devido a uma utilização excessiva do 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 esta questão, siga estes passos:

  1. Altere as consultas para reduzir o uso temporário do espaço de mesa.
  2. Largue objetos temporários depois de já não serem necessários.
  3. Truncar as mesas ou remover mesas não used.

Erro 40552: A sessão foi encerrada devido ao uso excessivo do espaço de registo 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 à inserção, atualização ou eliminação de operações. Tente reduzir o número de linhas que são operadas imediatamente, implementando lotes ou dividindo-se em várias transações menores.

  • O problema pode ocorrer devido a operações de reconstrução de índices. Para contornar esta questão, certifique-se do número de linhas que são afetadas na tabela * (tamanho médio do campo que é atualizado em bytes + 80) < 2 gigabytes (GB).

    Nota

    Para uma reconstrução de índice, o tamanho médio do campo atualizado deve ser substituído pelo tamanho médio do índice.

    Nota

    Para obter mais informações sobre a resolução de um registo de transações completo em SQL do Azure Base de Dados e Azure SQL Managed Instance, consulte erros de registo de transações de resolução de problemas com SQL do Azure Database e Azure SQL Managed Instance.

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

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

Para contornar esta questão, tente otimizar a consulta.

Para um procedimento aprofundado de resolução de problemas, vês se a minha consulta está a correr bem na nuvem?

Para obter mais informações sobre outros erros de memória e consultas de amostra, consulte Resolução de problemas de erros de memória com SQL do Azure Base de Dados.

Tabela de mensagens de erro de governação de recursos

Código de erro Gravidade Descrição
10928 20 Identificação de recursos: %d. O limite de %s para a base de dados é de %d e foi atingido. Consulte 'http://go.microsoft.com/fwlink/?LinkId=267637' para assistência.

O ID de recursos indica o recurso que atingiu o limite. Quando o ID do recurso = 1, isto indica que foi atingido um limite de trabalhador. Saiba mais em Erro 10928: ID de recurso: 1. O limite de pedido para a base de dados é %d e foi atingido. Quando o ID do recurso = 2, isto indica que o limite de sessão foi atingido.

Saiba mais sobre os limites de recursos:
Limites de recursos do servidor SQL lógicos
Limites baseados em DTU para bases de dados individuais
Limites à base de DTU para piscinas elásticas
limites baseados em vCore para bases de dados individuais
limites à base de vCore para piscinas elásticas
Azure SQL Managed Instance limites de recursos.
10929 20 Identificação de recursos: %d. A garantia mínima %s é %d, o limite máximo é de %d, e a utilização atual para a base de dados é de %d. No entanto, o servidor encontra-se atualmente demasiado ocupado para suportar pedidos superiores a %d para esta base de dados. O ID de recursos indica o recurso que atingiu o limite. Para os fios dos trabalhadores, o ID de recurso = 1. Para sessões, o ID de recurso = 2. Para obter mais informações, consulte:
Limites de recursos do servidor SQL lógicos
Limites baseados em DTU para bases de dados individuais
Limites à base de DTU para piscinas elásticas
limites baseados em vCore para bases de dados individuais
limites à base de vCore para piscinas elásticas
Azure SQL Managed Instance limites de recursos.
Caso contrário, tente de novo mais tarde.
40544 20 A base de dados atingiu a sua quota de tamanho. Particione ou elimine dados, remova índices ou consulte a documentação para obter as possíveis resoluções. Para escalar a base de dados, consulte os recursos de base de dados únicos de escala e recursos de piscina elástica em escala.
40549 16 A sessão termina porque tem uma transação de longa duração. Tente encurtar a sua transação. Para obter informações sobre o lote, consulte como utilizar o lote para melhorar Base de Dados SQL desempenho da aplicação.
40550 16 A sessão foi encerrada porque adquiriu demasiadas fechaduras. Tente ler ou modificar menos linhas numa única transação. Para obter informações sobre o lote, consulte como utilizar o lote para melhorar Base de Dados SQL desempenho da aplicação.
40551 16 A sessão foi encerrada devido ao uso excessivo TEMPDB . Tente modificar a sua consulta para reduzir o uso temporário do espaço de mesa.

Se estiver a utilizar objetos temporários, conserva o TEMPDB espaço na base de dados, deixando cair objetos temporários depois de já não serem necessários pela sessão. Para obter mais informações sobre os limites de temperatura em Base de Dados SQL, consulte a base de dados Tempdb em Base de Dados SQL.
40552 16 A sessão foi encerrada devido ao uso excessivo do espaço de registo de transações. Tente modificar menos linhas numa única transação. Para obter informações sobre o lote, consulte como utilizar o lote para melhorar Base de Dados SQL desempenho da aplicação.

Se efetuar inserções a granel utilizando o bcp.exe utilitário ou a System.Data.SqlClient.SqlBulkCopy classe, tente utilizar as -b batchsize opções ou BatchSize opções para limitar o número de linhas copiadas para o servidor em cada transação. Se estiver a reconstruir um índice com a ALTER INDEX declaração, tente utilizar a opção REBUILD WITH ONLINE = ON . Para obter informações sobre os tamanhos dos registos de transações para o modelo de compra vCore, consulte:
limites baseados em vCore para bases de dados individuais
limites à base de vCore para piscinas elásticas
Azure SQL Managed Instance limites de recursos.
40553 16 A sessão foi encerrada devido ao uso excessivo da memória. Tente modificar a sua consulta para processar menos linhas.

A redução do número e GROUP BY operações ORDER BY no seu código Transact-SQL reduz os requisitos de memória da sua consulta. Para escalar a base de dados, consulte os recursos de base de dados únicos de escala e recursos de piscina elástica em escala. Para obter mais informações sobre erros de memória e consultas de amostras, consulte a resolução de problemas de erros de memória com SQL do Azure Base de Dados.

Erros elásticos da piscina

Os seguintes erros estão relacionados com a criação e utilização de piscinas elásticas:

Código de erro Gravidade Descrição Ação corretiva
1132 17 A piscina elástica atingiu o seu limite de armazenamento. A utilização do armazenamento para a piscina elástica não pode exceder (%d) MBs. Tentar escrever dados numa base de dados quando o limite de armazenamento do pool elástico tiver sido atingido. Para obter informações sobre os limites de recursos, consulte:
Limites à base de DTU para piscinas elásticas
limites à base de vCore para piscinas elásticas.
Considere aumentar os DTUs de e/ou adicionar armazenamento à piscina elástica, se possível, para aumentar o seu limite de armazenamento, reduzir o armazenamento utilizado por bases de dados individuais dentro da piscina elástica ou remover bases de dados da piscina elástica. Para dimensionamento elástico da piscina, consulte os recursos da piscina elástica da escala. Para obter mais informações sobre a remoção do espaço não-reutilizado das bases de dados, consulte Gerir o espaço de ficheiros para bases de dados na base de dados SQL do Azure.
10929 16 A garantia mínima %s é %d, o limite máximo é de %d, e a utilização atual para a base de dados é de %d. No entanto, o servidor encontra-se atualmente demasiado ocupado para suportar pedidos superiores a %d para esta base de dados. Para obter informações sobre os limites de recursos, consulte:
Limites à base de DTU para piscinas elásticas
limites à base de vCore para piscinas elásticas.
Caso contrário, tente de novo mais tarde. DTU /vCore min por base de dados; DTU /vCore max por base de dados. O número total de trabalhadores simultâneos em todas as bases de dados da piscina elástica tentou ultrapassar o limite da piscina.
Considere aumentar os DTUs ou vCores da piscina elástica, se possível, para aumentar o seu limite de trabalhadores, ou remover bases de dados da piscina elástica.
40844 16 A base de dados '%ls' no Servidor '%ls' é uma base de dados de edição '%ls' numa piscina elástica e não pode ter uma relação de cópia contínua. N/D
40857 16 Piscina elástica não encontrada para servidor: '%ls', nome de piscina elástica: '%ls'. Não existe piscina elástica especificada no servidor especificado. Forneça um nome de piscina elástica válido.
40858 16 Piscina elástica '%ls' já existe no servidor: '%ls'. Piscina elástica especificada já existe no servidor especificado. Forneça um novo nome elástico da piscina.
40859 16 A piscina elástica não suporta o nível de serviço '%ls'. O nível de serviço especificado não é suportado para o fornecimento de piscina elástica. Forneça a edição correta ou deixe o nível de serviço em branco para utilizar o nível de serviço predefinido.
40860 16 A combinação "%ls" de piscina elástica e o objetivo de serviço '%ls' são inválidos. Piscina elástica e nível de serviço só podem ser especificados em conjunto se o tipo de recurso for especificado como 'ElasticPool'. Especifique a combinação correta de piscina elástica e nível de serviço.
40861 16 A edição de base de dados "%.*ls" não pode ser diferente do nível de serviço de piscina elástico que é '%.*ls'. A edição da base de dados é diferente do nível de serviço de piscina elástica. Não especifique uma edição de base de dados diferente do nível de serviço da piscina elástica. Note que a edição da base de dados não precisa de ser especificada.
40862 16 O nome da piscina elástica deve ser especificado se o objetivo de serviço da piscina elástica for especificado. O objetivo elástico de serviço da piscina não identifica exclusivamente uma piscina elástica. Especifique o nome da piscina elástica se utilizar o objetivo de serviço de piscina elástica.
40864 16 Os DTUs para a piscina elástica devem ser pelo menos (%d) DTUs para o nível de serviço '%.*ls'. Tentar definir os DTUs para a piscina elástica abaixo do limite mínimo. Relemcando a fixação dos DTUs para a piscina elástica até pelo menos o limite mínimo.
40865 16 Os DTUs para a piscina elástica não podem exceder (%d) DTUs para o nível de serviço '%.*ls'. Tentar definir os DTUs para a piscina elástica acima do limite máximo. Relemcando a definição dos DTUs para a piscina elástica não superior ao limite máximo.
40867 16 O DTU max por base de dados deve ser pelo menos (%d) para o nível de serviço '%.*ls'. Tentar definir o DTU max por base de dados abaixo do limite suportado. Considere utilizar o nível de serviço de piscina elástico que suporta a regulação desejada.
40868 16 O DTU max por base de dados não pode exceder (%d) para o nível de serviço '%.*ls'. Tentar definir o DTU max por base de dados para além do limite suportado. Considere utilizar o nível de serviço de piscina elástico que suporta a regulação desejada.
40870 16 O DTU min por base de dados não pode exceder (%d) para o nível de serviço '%.*ls'. Tentando definir o DTU min por base de dados para além do limite suportado. Considere utilizar o nível de serviço de piscina elástico que suporta a regulação desejada.
40873 16 O número de bases de dados (%d) e DTU min por base de dados (%d) não pode exceder os DTUs do pool elástico (%d). Tentar especificar dTU min para bases de dados na piscina elástica que exceda os DTUs da piscina elástica. Considere aumentar os DTUs da piscina elástica, ou diminuir o DTU min por base de dados, ou diminuir o número de bases de dados na piscina elástica.
40877 16 Uma piscina elástica não pode ser eliminada a menos que não contenha bases de dados. A piscina elástica contém uma ou mais bases de dados e, portanto, não pode ser eliminada. Retire as bases de dados da piscina elástica para a eliminar.
40881 16 O conjunto elástico '%.*ls' atingiu o seu limite de contagem de dados. O limite de contagem de dados para a piscina elástica não pode exceder (%d) para uma piscina elástica com DTUs (%d). Tentar criar ou adicionar base de dados a piscina elástica quando o limite de contagem de dados do piscina elástica tiver sido atingido. Considere aumentar as DTUs da piscina elástica, se possível, para aumentar o seu limite de base de dados, ou remover bases de dados da piscina elástica.
40889 16 Os DTUs ou o limite de armazenamento para o pool elástico "%.*ls" não podem ser diminuídos, uma vez que isso não proporcionaria espaço de armazenamento suficiente para as suas bases de dados. Tentando diminuir o limite de armazenamento da piscina elástica abaixo do seu uso de armazenamento. Considere reduzir o uso de armazenamento de bases de dados individuais na piscina elástica ou remover bases de dados da piscina de modo a reduzir o seu DTUs ou limite de armazenamento.
40891 16 O DTU min por base de dados (%d) não pode exceder o DTU max por base de dados (%d). Tentando definir o DTU min por base de dados mais alto que o DTU max por base de dados. Certifique-se de que o DTU min por base de dados não excede o DTU max por base de dados.
TBD 16 O tamanho de armazenamento de uma base de dados individual numa piscina elástica não pode exceder o tamanho máximo permitido pela piscina elástica de nível de serviço "%.*ls". O tamanho máximo da base de dados excede o tamanho máximo permitido pelo nível de serviço da piscina elástica. Desa ajuste o tamanho máximo da base de dados dentro dos limites do tamanho máximo permitido pelo nível de serviço da piscina elástica.

Não é possível abrir a base de dados "master" solicitada pelo login. O login falhou

Este problema ocorre porque a conta não tem permissão para aceder à master base de dados. Mas por padrão, SQL Server Management Studio (SSMS) tenta ligar-se à master base de dados.

Para resolver este problema, siga estes passos:

  1. No ecrã de início de sSMS, selecione Opções e, em seguida, selecione Connection Properties.

  2. No campo 'Ligar à base de dados ', insira o nome de base de dados predefinido do utilizador como base de dados padrão e, em seguida, selecione Connect.

    Propriedades de conexão

Erros só de leitura

Se tentar escrever para uma base de dados que seja apenas para leitura, receberá um erro. Em alguns cenários, a causa do estado de leitura da base de dados pode não ser imediatamente clara.

Erro 3906: Falhou na atualização da base de dados "DatabaseName" porque a base de dados é apenas de leitura.

Ao tentar modificar uma base de dados apenas de leitura, o seguinte erro será levantado.

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

Pode estar ligado a uma réplica só de leitura.

Tanto SQL do Azure Base de Dados como Azure SQL Managed Instance, pode estar ligado a uma base de dados numa réplica apenas de leitura. Neste caso, a seguinte consulta utilizando a função DATABASEPROPERTYEX() irá retornar READ_ONLY:

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

Se estiver a ligar usando SQL Server Management Studio, verifique se especificou ApplicationIntent=ReadOnly no separador Parâmetros de Ligação Adicionaisnas suas opções de ligação.

Se a ligação for de uma aplicação ou de um cliente utilizando uma cadeia de ligação, valide se a cadeia de ligação tiver especificado ApplicationIntent=ReadOnly. Saiba mais em Ligar a uma réplica só de leitura.

A base de dados pode ser definida apenas para leitura

Se estiver a utilizar SQL do Azure Base de Dados, a base de dados em si pode ter sido definida apenas para leitura. Pode verificar o estado da base de dados com a seguinte consulta:

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

Pode modificar o estado de leitura de uma base de dados na base de dados SQL do Azure Base de Dados utilizando o ALTER DATABASE Transact-SQL. Não é possível definir uma base de dados numa instância gerida apenas para ler.

Confirme se um erro é causado por um problema de conectividade

Para confirmar se um erro é causado por um problema de conectividade, reveja o traço de pilha para quadros que mostrem chamadas para abrir uma ligação como as seguintes (note 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 desencadeada por problemas de consulta, notará uma pilha de chamadas semelhante à seguinte (note a referência à classe SqlCommand ). Nesta situação, afina as suas consultas.

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

Para obter orientações adicionais sobre o desempenho de afinação, consulte os seguintes recursos:

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

  1. Certifique-se de que o TCP/IP está ativado como protocolo de cliente no servidor de aplicações. Para mais informações, consulte os protocolos de clientes configurar. Nos servidores de aplicações onde não tenha ferramentas SQL instaladas, verifique se o TCP/IP está ativado executando cliconfg.exe (SQL Server serviço de Rede de Clientes).

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

  3. Tente aumentar o valor do tempo limite de ligação. Recomendamos a utilização de um tempo de ligação de pelo menos 30 segundos.

  4. Teste a conectividade entre o servidor de aplicações e a Base de Dados SQL do Azure utilizando SQL Server Management Studio (SSMS), um ficheiro UDL, ping ou telnet. Para obter mais informações, consulte problemas de conectividade de resolução de problemas e diagnósticos para questões de conectividade.

    Nota

    Como um passo de resolução de problemas, também pode testar conectividade em um computador cliente diferente.

  5. Como uma boa prática, certifique-se de que a lógica de retíria está em vigor. Para obter mais informações sobre a lógica de relagem, consulte falhas transitórias de resolução de problemas e erros de ligação a Base de Dados SQL.

Se estes passos não resolverem o seu problema, tente recolher mais dados e, em seguida, contacte o suporte. Se a sua aplicação for um serviço de cloud, ative o registo registado. Este passo devolve uma marca de tempo UTC da falha. Além disso, Base de Dados SQL devolve o ID de rastreio. Os Serviços de Apoio ao Cliente da Microsoft podem utilizar esta informação.

Para obter mais informações sobre como ativar a sessão, consulte Ativar o registo de diagnósticos de aplicações em Serviço de Aplicações do Azure.

Passos seguintes

Saiba mais sobre temas relacionados nos seguintes artigos: