Como monitorar a atividade em uma única tabela usando o profiler do SQL Server

6

Eu tenho uma tabela que usa e semente de identidade para sua coluna de identidade exclusiva. Percebemos alguns saltos maciços no valor de identidade que não podemos explicar. A tabela tem 20.000 linhas ímpares, o valor de identidade maximin é superior a 560.000.000 e o incremento de identidade é um valor de 1!

Eu queria usar o criador de perfil do SQL Server para monitorar a atividade apenas nessa tabela para que eu pudesse ver o que estava causando a identidade para saltar em grandes sequências, mas quando cheguei a olhar para o monitor fiquei instantaneamente confuso. Admito que estou com pressa e não tenho tempo para realmente aprender como este trabalho (tanto quanto eu gostaria de) assim poderia usar um guia aproximado quanto aos passos que você deve tomar para monitorar a atividade em uma tabela.

Qualquer ajuda seria realmente apreciada.

    
por user22785 10.02.2010 / 13:12

3 respostas

3

Inicie o SQL Profiler, crie um novo rastreio e conecte-se ao SQL Server que você deseja monitorar.

Cuidado, se este é um servidor de produção muito ocupado, então você não deve usar o SQL Profiler, pois ele irá desacelerar o SQL Server para baixo

Eu normalmente uso o perfil "padrão" e edito-o.

Clique na guia "Seleção de eventos". Eu costumo desmarcar "Login de auditoria", "Sair da auditoria", "ExistingConnections" e "Início do lote de RPC". Isso fornece uma boa saída de rastreio limpa.

Certifique-se de que "TextData" esteja marcado.

Você pode adicionar um filtro ao rastreamento de "LIKE %%" à coluna TextData, mas isso incluirá apenas instruções SQL enviadas diretamente para o servidor. Se houver procedimentos armazenados, você precisará saber quais procedimentos armazenados tocam sua tabela e filtrá-los.

Se você tiver consultas de cursor, você receberá muitas coisas "sp_fetch". Você precisa procurar a instrução DECLARE CURSOR com o mesmo ID do cursor.

Pensando nisso, um loop cursor-for ruim pode inserir rapidamente muitos milhares de registros de "erro" e isso pode ser uma causa desses grandes saltos de incremento.

    
por 10.02.2010 / 17:06
1

O valor da identidade será incrementado em cada inserção, mesmo que a inserção falhe.

Se você tiver uma restrição de verificação ou chave estrangeira, cada falha incrementará a identidade. Se você tiver um "valor muito grande", a inserção falhará, mas a identidade aumentará.

Geralmente, isso não é um problema. O propósito do campo de identidade é fornecer uma referência única para aquela linha e fazer com que ela incremente bem, sem nenhum número faltante, seja uma coisa humana "mantenha-a limpa" e não algo que o banco de dados fique chateado.

A questão mais urgente é por que suas inserções estão falhando e você não sabe sobre isso ...

    
por 10.02.2010 / 13:56
0

O SQL Server está redefinindo a coluna de identidade na parada e no início do serviço. há um item de conexão em que alguém achou que era um bug, mas o MS faz um ótimo design. link

Existe um sinalizador de rastreamento que desativa o comportamento de propagação de nova identidade adicionando -T272 como um sinalizador de inicialização ajudará.

    
por 11.03.2016 / 13:52