Solução de 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 Azure Instâ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.
Como sempre, aplique as práticas recomendadas e diretrizes de design durante o processo de design do aplicativo.
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.
Etapas para corrigir problemas comuns de conexão
Verifique se o TCP/IP está habilitado como um protocolo de cliente no servidor de aplicativos. 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).
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. Consulte Obter informações de conexão usando o SQL Server Management Studio.
Tente aumentar o valor do tempo limite da conexão. É recomendável usar um tempo limite de conexão de pelo menos 30 segundos.
Teste a conectividade entre o servidor de aplicativos e o banco de dados SQL do Azure usando o Quickstart: Use o SSMS para se conectar e consultar o Banco de Dados SQL do Azure ou a Instância Gerenciada de SQL do Azure, 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.
Como prática recomendada, os aplicativos conectados à nuvem devem usar a lógica de repetição.
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. 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. 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.
Implementar a lógica de repetição
É altamente recomendável que seus aplicativos clientes usem lógica de repetição para restabelecer uma conexão decorrido o tempo de falha transitória para autocorreção. É 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 deve aumentar exponencialmente, até um máximo de 60 segundos.
Para obter exemplos de código de lógica de repetição, consulte:
Para obter mais informações sobre como lidar com erros transitórios em seu aplicativo, consulte Solucionar erros de conexão transitórios no Banco de Dados SQL e na Instância Gerenciada de 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).
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 é 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 | Database 'replicatedmaster' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server error log for more information. Esse erro poderia 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 de erros do MSSQL. |
4060 |
16 | Cannot open database "%.*ls" requested by the login. The login failed. Para obter mais informações, veja Erros 4000 a 4999 |
40197 |
17 | The service has encountered an error processing your request. Please try again. Error code %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 | The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d. Para obter mais informações, consulte: • Gerenciamento de recursos. • Limites de recursos em pools elásticos usando o modelo de compra baseado em DTU. • 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 | Database '%.*ls' on server '%.*ls' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them with the session tracing ID of '%.*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 | Cannot process request. Not enough resources to process request. The service is currently busy. Please retry the request later. Para obter mais informações, consulte: • Gerenciamento de recursos. • Limites de recursos em pools elásticos usando o modelo de compra baseado em DTU. • 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 | Cannot process create or update request. Too many create or update operations in progress for subscription "%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ê poderia 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 | Cannot process request. Too many operations in progress for subscription "%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ê poderia 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 | Login to read-secondary failed due to long wait on '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 | Could not find database ID %d, name '%.*ls' Isso significa que o cache na memória não está sincronizado com a instância do servidor SQL 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 a tempo e as buscas subsequentes no banco de dados indicam um ID de banco de dados defasado. 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
- Confira o Painel de Serviços do Microsoft Azure quanto a quaisquer interrupções conhecidas que tenham ocorrido durante o tempo em que o aplicativo está relatando.
- 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.
- 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.
- 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 .
Ocorreu um erro relacionado à rede ou específico da instância ao estabelecer uma conexão com o servidor
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:
Faça logon no servidor usando o SQL Server Management Studio (SSMS).
Para verificar se o nome de logon está desabilitado, execute a seguinte consulta SQL no banco de dados
master
:SELECT name, is_disabled FROM sys.sql_logins;
Se o nome correspondente estiver desabilitado, talvez você queira habilitá-lo usando a seguinte instrução:
ALTER LOGIN <User name> ENABLE;
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
No Pesquisador de Objetos do SSMS, expanda Bancos de Dados.
Selecione o banco de dados ao qual você deseja conceder permissão ao usuário.
Clique com o botão direito em Segurança e, em seguida, selecione Novo, Usuário.
No script gerado com espaços reservados, siga as etapas para substituir os parâmetros do modelo SSMS e execute-o, por exemplo:
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, confira Autorizar acesso ao banco de dados.
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 foi causado por problemas de conectividade, consulte Confirmar se um erro é causado por um problema de conectividade.
Os tempos limite de conexão ocorrem porque o aplicativo não pode se conectar ao servidor. Para resolver esse problema, tente as etapas (na ordem apresentada) na seção Etapas para corrigir problemas comuns de conexão.
Erros de 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 ocorrem 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. Os limites podem ser encontrados 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 o texto "O limite de solicitação [...] é N e foi atingido" para fins de compatibilidade com versões anteriores. O limite atingido é, na verdade, o número de funções de 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 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, insira
admin:<fully_qualified_server_name>
(por exemplo,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 '%.*ls' on server '%.*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 '%.*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 DAC com o Pesquisador de Objetos no SSMS.
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:
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 à 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
Procure linhas com um para
blocking_session_id
identificar sessões bloqueadas. Encontre cadablocking_session_id
um na lista para determinar se essa sessão também está bloqueada. Seguir os valoresblocking_session_id
esession_id
acabará levando você ao bloqueador de cabeça: uma sessão que não está bloqueada, mas está bloqueando. Ajuste a consulta do bloqueador de cabeçalho.Dica
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.
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.
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:
- Limites de recursos para bancos de dados individuais usando o modelo de compra de vCore
- Limites de recursos para pools elásticos usando o modelo de compra baseado no vCore
- Limites de recursos para bancos de dados individuais usando o modelo de compra de DTU
- Limites de recursos em pools elásticos usando o modelo de compra baseado em DTU
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.
O Erro 40501 é 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, consulte Gerenciamento de recursos no Banco de Dados SQL do Azure.
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:
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
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.
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:
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 ignorar linhas nas quais a coluna
input_buffer
mostra uma leitura de consulta desys.fn_MSxe_read_event_stream
: essas solicitações estão relacionadas a sessões de Evento Estendido.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.
Considere o envio em lote de suas consultas. Para obter informações sobre a formação de lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure.
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:
- Altere as consultas para reduzir o uso de espaço de tabela temporário.
- Remover objetos temporários quando não são mais necessários.
- 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:
- O problema pode ocorrer devido a operações de inserção, atualização ou exclusão. Tente reduzir o número de linhas que são operadas imediatamente implementando envio em lote ou dividindo-as em várias transações menores.
- O problema pode ocorrer devido a operações de recompilação de índice. Para solucionar esse problema, verifique se o número de linhas afetadas na tabela * (tamanho médio do campo atualizado em bytes + 80) < 2 gigabytes (GB).
- Para uma recompilação de índice, o tamanho médio do campo que é atualizado deve ser substituído pelo tamanho médio do índice.
- Para obter mais informações, confira Solução de problemas de log de transações completo no Banco de Dados SQL do Azure e Solução de problemas de log de transações completo na Instância Gerenciada de SQL do Azure.
Erro 40553: a sessão foi encerrada devido ao uso excessivo de memória
40553: The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.
Para contornar esse problema, tente otimizar a consulta.
Para obter um procedimento 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 | Resource ID: %d. The %s limit for the database is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance. 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: • Gerenciamento de recursos no Banco de Dados SQL do Azure.. • Limites de recursos para o modelo de compras de DTU. • Limites baseados em vCore para bancos de dados individuais. • Limites de recursos da Instância Gerenciada de SQL do Azure. |
10936 |
20 | Resource ID: %d. The %s limit for the elastic pool is %d and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance. 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: • Gerenciamento de recursos no Banco de Dados SQL do Azure.. • Limites de recursos em pools elásticos usando o modelo de compra baseado em DTU. • Limites baseados em vCore para pools elásticos. • Limites de recursos da Instância Gerenciada de SQL do Azure. |
10929 |
20 | Resource ID: %d. 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. 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, consulte: • Gerenciamento de recursos no Banco de Dados SQL do Azure.. • Limites de recursos em pools elásticos usando o modelo de compra baseado em DTU. • 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 | The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Para dimensionamento de banco de dados, veja Dimensionar recursos de banco de dados individual e Dimensionar recursos de pool elástico. |
40549 |
16 | Session is terminated because you have a long-running transaction. Try shortening your transaction. Para obter informações sobre a formação de lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure. |
40550 |
16 | The session has been terminated because it has acquired too many locks. Try reading or modifying fewer rows in a single transaction. Para obter informações sobre a formação de lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure. |
40551 |
16 | The session has been terminated because of excessive tempdb usage. Try modifying your query to reduce the temporary table space usage. 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 | The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction. Para obter informações sobre a formação de lotes, consulte Como usar o envio em lote para melhorar o desempenho do aplicativo Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure. 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 | The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows. 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 | The elastic pool has reached its storage limit. The storage usage for the elastic pool cannot exceed (%d) MBs. 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 de recursos em pools elásticos usando o modelo de compra baseado em DTU. • 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 | 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. Para obter informações sobre limites de recursos, veja: • Limites de recursos de 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 | Database '%ls' on Server '%ls' is a '%ls' edition database in an elastic pool and cannot have a continuous copy relationship. |
N/D |
40857 |
16 | Elastic pool not found for server: '%ls', elastic pool name: '%ls'. Specified elastic pool does not exist in the specified server. |
Forneça um nome de pool elástico válido. |
40858 |
16 | Elastic pool '%ls' already exists in server: '%ls'. Specified elastic pool already exists in the specified server. |
Forneça um novo nome de pool elástico. |
40859 |
16 | Elastic pool does not support service tier '%ls'. Specified service tier is not supported for elastic pool provisioning. |
Forneça a edição correta ou deixe a camada de serviço em branco para o padrão. |
40860 |
16 | Elastic pool '%ls' and service objective '%ls' combination is invalid. Elastic pool and service tier can be specified together only if resource type is specified as 'ElasticPool'. |
Especifique a combinação correta de pool elástico e camada de serviço. |
40861 |
16 | The database edition '%.*ls' cannot be different than the elastic pool service tier which is '%.*ls'. The database edition is different than the elastic pool service tier. |
Não especifique uma edição de banco de dados que seja diferente da camada de serviço do pool elástico. Não é necessário especificar a edição do banco de dados. |
40862 |
16 | Elastic pool name must be specified if the elastic pool service objective is specified. Elastic pool service objective does not uniquely identify an elastic pool. |
Especifique o nome do pool elástico se você estiver usando o objetivo de serviço do pool elástico. |
40864 |
16 | The DTUs for the elastic pool must be at least (%d) DTUs for service tier '%.*ls'. Attempting to set the DTUs for the elastic pool below the minimum limit. |
Tente configurar novamente as DTUs para o pool elástico de acordo com o limite mínimo. |
40865 |
16 | The DTUs for the elastic pool cannot exceed (%d) DTUs for service tier '%.*ls'. Attempting to set the DTUs for the elastic pool above the maximum limit. |
Tente configurar novamente as DTUs para o pool elástico de acordo com o limite máximo. |
40867 |
16 | The DTU max per database must be at least (%d) for service tier '%.*ls'. Attempting to set the DTU max per database below the supported limit. |
Considere a possibilidade de usar a camada de serviço do pool elástico que dá suporte à configuração desejada. |
40868 |
16 | The DTU max per database cannot exceed (%d) for service tier '%.*ls'. Attempting to set the DTU max per database beyond the supported limit. |
Considere a possibilidade de usar a camada de serviço do pool elástico que dá suporte à configuração desejada. |
40870 |
16 | The DTU min per database cannot exceed (%d) for service tier '%.*ls'. Attempting to set the DTU min per database beyond the supported limit. |
Considere a possibilidade de usar a camada de serviço do pool elástico que dá suporte à configuração desejada. |
40873 |
16 | The number of databases (%d) and DTU min per database (%d) cannot exceed the DTUs of the elastic pool (%d). Attempting to specify DTU min for databases in the elastic pool that exceeds the DTUs of the elastic pool. |
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 | An elastic pool cannot be deleted unless it does not contain any databases. The elastic pool contains one or more databases and therefore cannot be deleted. |
Remova os bancos de dados do pool elástico para excluí-lo. |
40881 |
16 | The elastic pool '%.*ls' has reached its database count limit. The database count limit for the elastic pool cannot exceed (%d) for an elastic pool with (%d) DTUs. Attempting to create or add database to elastic pool when the database count limit of the elastic pool has been reached. |
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 | The DTUs or storage limit for the elastic pool '%.*ls' cannot be decreased since that would not provide sufficient storage space for its databases. Attempting to decrease the storage limit of the elastic pool below its storage usage. |
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 | The DTU min per database (%d) cannot exceed the DTU max per database (%d). Attempting to set the DTU min per database higher than the DTU max per database. |
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 | The storage size for an individual database in an elastic pool cannot exceed the max size allowed by '%.*ls' service tier elastic pool. The max size for the database exceeds the max size allowed by the elastic pool service tier. |
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:
Na tela de logon do SSMS, selecione Opções e, em seguida, selecione Propriedades da conexão.
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.
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 é gerado.
Msg 3906, Level 16, State 2, Line 1
Failed to update database "%d" because the database is read-only.
Há várias explicações possíveis para por que um banco de dados é somente leitura.
Após um failover manual, os aplicativos ainda estão se conectando à réplica antiga
No Banco de Dados SQL do Azure, após um failover para outra réplica, seu aplicativo ainda pode estar se conectando à réplica primária anterior devido ao DNS. O roteamento de conexão do grupo de failover é implementado usando DNS.
Possíveis causas raiz:
Durante o failover, os pontos de extremidade do grupo de failover são atualizados para apontar para os novos servidores primários e secundários apropriados por meio da alteração do destino da entrada DNS apropriada. Por padrão, as entradas de DNS são criadas com um TTL de 30 segundos, o que significa que os clientes DNS armazenam essas entradas em cache por 30 segundos. Como resultado, as atualizações dos registros de DNS não se propagam imediatamente; as entradas ficarão obsoletas até que todos os clientes e nós intermediários tenham atualizado seus caches. Portanto, zero a aproximadamente 10 minutos (dependendo da topologia da rede) poderão ser necessários para que os logons nos pontos de extremidade do grupo de failover sejam roteados para seus novos destinos após um failover. A liberação de caches de DNS pode ou não ajudar o problema, já que os nós de rede intermediários que respondem a solicitações de DNS também armazenam em cache os resultados de DNS por um tempo.
A solução recomendada para esse problema é simplesmente aguardar até que as entradas de DNS sejam atualizadas no cliente. Atualmente, essa solução alternativa levaria à resolução do problema dentro de 10 minutos.
Algumas bibliotecas de cliente SQL usam um recurso chamado "pool de conexões", que reutiliza conexões com a mesma fonte de dados em vez de fechá-las e reabri-las sempre que uma nova conexão de banco de dados for necessária. Em especial, o pool de conexões é habilitado no ADO.NET por padrão. Quando combinado com o problema descrito em 1), o pool de conexões pode fazer com que conexões recém-abertas reutilizem uma conexão com o banco de dados antigo, impedindo assim que o aplicativo se conecte ao novo banco de dados primário indefinidamente.
Soluções:
Há três possíveis soluções alternativas para esse problema de DNS após um failover do grupo de failover:
- Modifique o aplicativo para chamar
SQLConnection.ClearAllPools
ouSQLConnection.ClearPool(conn)
sempre que um erro "somente leitura" for encontrado. - Na cadeia de conexão do aplicativo, especifique
Pooling=False
para desabilitar o pool de conexões. Isso deve ser testado, pois poderá afetar significativamente o desempenho se o aplicativo abrir e fechar conexões com frequência. - Outra opção para evitar os atrasos de replicação/cache do DNS é conectar diretamente usando o nome do servidor lógico do Banco de Dados SQL do Azure (do servidor secundário original, agora o novo principal) por uma janela de tempo após o 3906 ser encontrado.
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 estar 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 mais informações sobre o desempenho de ajuste fino, consulte os seguintes recursos:
- Como manter índices e estatísticas no SQL do Azure
- Ajustar aplicativos e bancos de dados com relação ao desempenho no Banco de Dados SQL do Azure
- Monitorar o desempenho do Banco de Dados SQL do Azure usando exibições de gerenciamento dinâmico
- Operar o Repositório de Consultas no banco de dados SQL do Azure
Conteúdo relacionado
- Banco de Dados SQL do Azure e arquitetura de conectividade do Azure Synapse Analytics
- Controles de acesso à rede do Banco de Dados SQL do Azure e do Azure Synapse Analytics
- Solução de problemas de log de transações completo no Banco de Dados SQL do Azure
- Solução de problemas de log de transações completo na Instância Gerenciada de SQL do Azure
- Solucionar problemas de erros de conexão transitórios no Banco de Dados SQL e Instância Gerenciada de SQL
- Analisar e evitar deadlocks no Banco de Dados SQL do Azure