Exportar (0) Imprimir
Expandir Tudo

Limitação do mecanismo do Banco de dados SQL do Azure

Atualizado: agosto de 2013

A limitação do mecanismo dimensiona o uso de recursos de backup bloqueando a conectividade de clientes que estão comprometendo a integridade do sistema. O grau em que a conectividade de um assinante é bloqueada varia de apenas inserções e atualizações, a bloqueio de todas as gravações, e todas as leituras e gravações. O intervalo de tempo para que a limitação ocorra é chamado de Ciclo de limitação, que é 10 segundos por padrão e não pode ser alterado pelos usuários.

Neste tópico

Fases de limitação do mecanismo

A severidade da limitação se enquadra em um dos dois estágios a seguir:

  • Limitação de software: este é o primeiro estágio quando os recursos do computador como o log de transação, a E/S e o armazenamento excedem os limites predefinidos de segurança. O Banco de dados SQL seleciona um subconjunto dos bancos de dados que consomem a maioria dos recursos, e limita suas atividades. Nem todos os bancos de dados no computador passam por limitação, apenas aqueles que usam a maioria dos recursos. O uso abaixo do limite predefinido indica que há recursos suficientes para todos os bancos de dados no servidor.

  • Limite de hardware: este é o segundo estágio e final quando um computador é afetado criticamente devido à sobrecarga. Com a limitação de hardware, nenhuma nova conexão é permitida para os bancos de dados hospedados no computador até que os recursos sejam liberados. O Banco de dados SQL retorna mensagens de erro para novas tentativas de conexão indicando que o recurso foi excedido.

Como funciona a limitação do mecanismo?

A tabela a seguir fornece informações sobre o mecanismo de limitação do mecanismo, o código de erro correspondente que é retornado e a recomendação sobre como endereçá-lo.

 

Mecanismo de limitação do mecanismo Código de erro retornado Recomendação

A limitação do mecanismo segue estas etapas para reduzir a carga e proteger a integridade do sistema:

  1. Determina a redução de carga necessária para retornar o sistema para um estado íntegro.

  2. Marca os bancos de dados do assinante que estão consumindo recursos excessivos como candidatos de limitação. Se a limitação do mecanismo estiver ocorrendo devido a um tipo excedido suavemente, alguns bancos de dados podem ser isentos da consideração como candidatos de limitação. Se a limitação de mecanismo for devido a um tipo excedido significativamente, todos os bancos de dados do assinante poderão ser candidatos à limitação com exceção dos bancos de dados do assinante que não receberam nenhuma carga no ciclo de limitação imediatamente antes do ciclo de limitação atual.

  3. Calcula quantos bancos de dados candidatos devem ser limitados para retornar o sistema para um estado íntegro avaliando os padrões históricos de uso de recursos dos bancos de dados candidato.

  4. Limita o número calculado de bancos de dados candidatos até que a carga do sistema seja retornada ao nível desejado. Dependendo se é Limitação de hardware ou Limitação de software, o grau aplicado ou o modo pode variar. Você pode descobrir o grau e o modo de estrangulamento aplicado usando a ID e os valores de código do incidente na mensagem de erro. Todos os bancos de dados que são limitados permanecem assim no mínimo durante um ciclo de limitação (10 segundos), mas geralmente a limitação pode persistir por vários ciclos de limitação para retornar o sistema para um estado íntegro

40501: o serviço está atualmente ocupado. Tente novamente a solicitação depois de 10 segundos. ID do incidente: <ID>. Código: <código>.

noteObservação
Os valores de ID do incidente e Código podem ser usados para determinar quais solicitações são limitadas e se foi uma limitação de software ou hardware. Para obter mais informações, consulte as seções “ID do incidente de limitação” e “Decodificando códigos de motivo” posteriormente neste tópico.

Solicitação de retirada e repetição depois de 10 segundos.

ID do incidente de limitação

A ID do incidente de limitação no erro 40501 é um valor GUID que identifica exclusivamente um incidente de limitação.

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: <ID>. Code: <code>.

Se você não puder determinar por que a limitação ocorreu ou se persiste, e não souber resolvê-la, entre em contato com o Suporte da Microsoft e indique a ID do incidente (<ID>) na mensagem de erro. O Suporte da Microsoft utilizará a ID do incidente para recuperar mais informações relacionadas ao incidente de limitação. A ID do incidente poderá ser usada para obter as seguintes informações:

  • A hora de início do incidente de limitação.

  • O tipo de limitação (limitação flexível ou limitação rígida).

  • O tipo de recurso (por exemplo, CPU) pelo qual o incidente de limitação ocorreu.

  • Qual usuário estava sendo executado quando ocorreu o incidente de limitação?

Depois de obter a causa original relevante do Atendimento ao Cliente da Microsoft, você poderá fazer as alterações apropriadas no aplicativo.

Decodificando códigos de motivos

Esta seção descreve como decodificar os códigos de motivo que são retornados pelo seguinte código de erro de limitação de mecanismo:

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: <ID>. Code: <code>.

O código do motivo (<código>) na mensagem de erro é um número decimal que contém informações sobre o modo de limitação e os tipos de recursos excedidos:

  • O modo de limitação enumera os tipos de instrução rejeitados.

  • O tipo de recurso especifica os recursos excedidos. A limitação pode ocorrer em vários tipos de recurso ao mesmo tempo, como a CPU e a ES.

Considere a seguinte mensagem de erro de exemplo como um exemplo, onde o código do motivo é 131075:

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: {5DE17AB8-A6E34BE5-A2E95BB5D4CC4155}. Code: 131075.

O diagrama a seguir demonstra como decodificar os códigos de motivo.

Decodificando códigos de motivo

Para obter o modo de limitação, aplique o módulo 4 ao código de motivo. A operação do módulo retorna o restante de um número dividido por outro. Para obter o tipo de limitação e o tipo de recurso, divida o código do motivo por 256 conforme mostrado na etapa 1. Em seguida, converta o quociente do resultado para seu equivalente binário conforme mostrado nas etapas 2 e 3. O diagrama lista todos os tipos de limitação e recurso. Compare seu tipo de limitação com os bits do tipo de recurso conforme mostrado no diagrama.

A tabela a seguir fornece uma lista dos modos de limitação.

 

Código do modo de limitação Descrição Tipos de instrução rejeitados Instruções que ainda podem ser processadas

0

Nenhuma limitação

Nenhuma

Todos

1

Rejeitar atualização / inserção

INSERT, UPDATE, CREATE TABLE | INDEX

DELETE, DROP TABLE | INDEX, TRUNCATE

2

Rejeitar todas as gravações

INSERT, UPDATE, DELETE, CREATE, DROP

SELECT

3

Rejeitar tudo

Tudo

Nenhuma

Para obter o modo de limitação, aplique o módulo 4 ao código de motivo. 131075 % 4 = 3. O resultado 3 significa que o modo de limitação é "Rejeitar tudo".

Para obter o tipo de limitação e o tipo de recurso, divida o código de motivo por 256. Em seguida, converta o quociente do resultado para seu equivalente binário. 131075 / 256 = 512 (decimal) e 512 (decimal) = 10 00 00 00 00 (binário). Isso significa que ocorreu limitação no banco de dados devido à CPU (Tipo de recurso 4) e à Limitação rígida (10).

Código de exemplo para decodificar códigos de motivo

O código de exemplo a seguir usa a classe ThrottlingCondition no bloqueio transitório do aplicativo de tratamento de falhas (também conhecido como “topázio ") no Enterprise Library Integration Pack para o Windows Azure para decodificar o código do motivo do erro do mecanismo de limitação (40501). Para baixar os assemblies do bloqueio Transient Fault Handling Application e o código de motivo para usar a classe ThrottlingCondition, consulte Enterprise Library 5.0 Integration Pack para Windows Azure.

Esse código de exemplo solicita a digitação do código do motivo que você recebe no erro de limitação do mecanismo (40501) e exibe o modo de limitação, o tipo de limitação e o tipo de recurso para o código do motivo especificado.

using System;
using Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.Data;

namespace ThrottlingDecoder
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Enter a throttling code to be decoded: ");
            var rawCode = Console.ReadLine();
            int reasonCode;

            if (Int32.TryParse(rawCode, out reasonCode))
            {
                var throttlingCode = ThrottlingCondition.FromReasonCode(reasonCode);

                Console.WriteLine("\nBreakdown for throttling reason code {0}:\n", reasonCode);

                Console.WriteLine("Throttling mode: {0}", throttlingCode.ThrottlingMode);
                Console.WriteLine("Throttled On CPU: {0}", throttlingCode.IsThrottledOnCpu);
                Console.WriteLine("Throttled On DB Size: {0}", throttlingCode.IsThrottledOnDatabaseSize);
                Console.WriteLine("Throttled On DB Reads: {0}", throttlingCode.IsThrottledOnDataRead);
                Console.WriteLine("Throttled On DB Free space: {0}", throttlingCode.IsThrottledOnDataSpace);
                Console.WriteLine("Throttled On Log Free Size: {0}", throttlingCode.IsThrottledOnLogSpace);
                Console.WriteLine("Throttled On Log Writes: {0}", throttlingCode.IsThrottledOnLogWrite);
                Console.WriteLine("Throttled On Worker Threads: {0}", throttlingCode.IsThrottledOnWorkerThreads);
                
                Console.WriteLine("\nThrottled resources:");

                foreach (var res in throttlingCode.ThrottledResources)
                {
                   if (res.Item2 != ThrottlingType.None) Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Resource type {0} is throttled on {1}", res.Item1, res.Item2);
                    if (res.Item2 != ThrottlingType.None) Console.ResetColor();
                }
            }
            else
            {
                Console.WriteLine("Sorry, but the input you provided does not seem to be a valid number.");
            }
            Console.Read();
        }
    }
}

Como alternativa, você pode usar o código de exemplo disponível no Guia de desempenho e elasticidade de Banco de dados SQL do Windows Azure no TechNet Wiki para decodificar os códigos de motivo. Esse código de exemplo não tem nenhuma dependência do bloqueio transitório do aplicativo de tratamento de falhas.

Consulte também

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft