Colaboração : Cisco ICM Logger

Identifique e cancele um processo SQL bloqueado

26 Outubro 2015 - Tradução por Computador
Outras Versões: Versão em PDFpdf | Inglês (22 Agosto 2015) | Feedback


Índice


Introdução

Este documento fornece um método para identificar e remover os processos do Microsoft SQL que bloqueiam outros processos no sistema Cisco Intelligent Contact Management (ICM). É importante identificar os processos SQL que bloqueiam outros processos porque isso favorece a ilusão de que os outros processos estão paralisados. De fato, os processos não são paralisados, e sim apenas aguardando a liberação dos recursos pelo processo de bloqueio.

Pré-requisitos

Requisitos

A Cisco recomenda que você tenha conhecimento destes tópicos:

  • Arquitetura do banco de dados Cisco ICM

  • Arquitetura de relatórios Cisco ICM

  • Utilitários de Consulta Microsoft SQL (Analisador de Consulta do Microsoft SQL Server versão 7.0 ou 2000 ou ISQL_W para Microsoft SQL Server versão 6.5)

Componentes Utilizados

As informações neste documento são baseadas nestas versões de software e hardware:

  • Cisco ICM versão 4.6.2 ou posterior

  • Microsoft SQL Server versão 6.5 ou posterior

As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a sua rede estiver ativa, certifique-se de que entende o impacto potencial de qualquer comando.

Convenções

Consulte as Convenções de Dicas Técnicas da Cisco para obter mais informações sobre convenções de documentos.

Diagnosticar Processos Bloqueados

Para determinar se um processo SQL bloqueia outros, o comando sp_who armazenado precisa ser executado com o Analisador de Consulta (Microsoft SQL Server versão 7.0 ou 2000) ou ISQL_W (Microsoft SQL versão 6.5).

Isso mostra um resultado hipotético quando o comando sp_who é executado.

Figura 1: sp_who

BLOCK-1.gif

Se um processo tiver um valor na coluna BlkBy, isso indicará que o processo está bloqueado por um processo cujo Server Process ID (SPID) é esse valor. Nesse exemplo, o processo com SPID 9 bloqueia o processo com SPID 13. Por isso, ele impede a conclusão desse processo.

Identificar a Origem de um Processo Bloqueado

Uma vez que você determinou que o processo está bloqueado e qual é o processo de bloqueio, a próxima etapa é determinar a origem do processo de bloqueio para que ela possa ser terminada.

Embora seja possível utilizar as colunas HostName e Login na janela de resultados de sp_who para diagnosticar a origem de um processo de bloqueio, na maioria dos casos isso talvez não forneça todos os detalhes necessários do que o processo faz. Um método possível para obter essas informações é ir até a máquina que é a origem do processo de bloqueio e ver se há um ISQL_W, um Analisador de Consulta ou uma sessão do Enterprise Manager travada.

Uma opção é observar a parte da consulta que o processo executa para obter informações de identificação adicionais. Emita este comando:

dbcc
inputbuffer(<x>)

Na sintaxe de comando anterior, x indica o SPID do processo de bloqueio. Se você se utilizar os dados do comando sp_who mostrado na Figura 1, x será igual a 9. Isso mostra um resultado hipotético quando o comando dbcc inputbuffer é executado.

Figura 2: dbcc inputbuffer

/image/gif/paws/22156/BLOCK-2.gif

Embora a consulta possa ser indicada com o comando dbcc inputbuffer, a finalidade desejada dela talvez ainda seja desconhecida. Se esse for o caso e se o HostName não estiver identificado claramente nos resultados do comando sp_who, emita esses comandos de rede padrão SQL e DOS para identificar o endereço IP do home de host da origem.

  1. Emita essa consulta SQL no processo de bloqueio SPID para obter o endereço MAC da máquina:

    select * from master.dbo.sysprocesses where
    spid = <y>
    

    Nessa consulta, y indica o SPID do processo de bloqueio e é substituído por 9 (consulte a Figura 2).

    A coluna net_address contém o endereço MAC da máquina que corresponde ao SPID especificado.

  2. Emita esse comando de rede DOS em uma janela DOS para determinar o endereço IP que corresponde a esse endereço MAC:

    arp
    -a
    

    Esse comando exibe o endereço IP de todas as máquinas conectadas.

  3. Compare o valor net_address da consulta sysprocesses (passo 1) com o Endereço Físico correspondente nos resultados de arp -a (passo 2). Isso determina se o endereço IP que corresponde ao Endereço Físico é o endereço IP da máquina que executa o processo de bloqueio. Emita esse comando de rede DOS em uma janela DOS para localizar o nome de host correspondente dessa máquina:

    ping -a
    <IPaddress>
    
    

    Nesse comando, <IPaddress> indica o endereço IP identificado com o comando arp -a.

    Quando você tem o endereço IP e/ou o nome de host da máquina que executa o processo de bloqueio, é mais fácil ir até a raiz do problema do bloco.

Finalizar o Processo Bloqueado

Há três métodos para finalizar o processo de bloqueio:

  • Aborde a máquina que executa o processo de bloqueio e determine o aplicativo que se conecta ao Microsoft SQL Server. Se o aplicativo puder ser desligado, feche-o.

    Nota: Se você fecha o aplicativo, talvez demore um pouco. Isso depende da natureza do trabalho feito pelo aplicativo. Esse processo também leva o Microsoft SQL Server a executar um rollback de todo o trabalho não comprometido iniciado pelo aplicativo. Esse é o método mais seguro para finalizar o processo afetado.

  • Mate o processo de bloqueio com esse comando SQL:

    kill
    <z>
    
    

    Nesse comando, <z> é o SPID do processo de bloqueio.

    cuidado Cuidado: O comando kill é uma abordagem muito perigosa de limpar o processo de bloqueio porque pode corromper o banco de dados SQL se o processo de bloqueio executa uma atualização de base de dados. O comando kill também pode demorar um pouco para terminar se o processo de bloqueio executou muito trabalho que o processo kill deve desfazer (rollback). Consulte os Manuais SQL on-line para obter mais informação sobre o comando kill. Isso deve ser incluído na mídia de instalação do Microsoft SQL Server.

  • O método final para finalizar o processo de bloqueio é reinicializar a máquina que executa o processo de bloqueio.

    Nota: Assim como acontece com a opção de comando kill, é uma abordagem muito perigosa limpar o processo de bloqueio porque o aplicativo conectado ao Microsoft SQL Server não é desligado corretamente.

Discussões relacionadas da comunidade de suporte da Cisco

A Comunidade de Suporte da Cisco é um fórum onde você pode perguntar e responder, oferecer sugestões e colaborar com colegas.


Informações Relacionadas


Document ID: 22156