Eu tenho uma consulta que precisa de um guia de plano, mas estou tendo dificuldade em configurá-lo.
Consulta abaixo do cache do procedimento...
(@state nvarchar(14),
@jobName nvarchar(18),
@jobGroup nvarchar(28),
@oldState nvarchar(6))
UPDATE JOB_TRIGGERS
SET TRIGGER_STATE = @state
WHERE JOB_NAME = @jobName
AND JOB_GROUP = @jobGroup
AND TRIGGER_STATE = @oldState
O SQL Server opta por executar uma verificação de índice clusterizado em vez de uma busca de índice não clusterizado. Estou tendo problemas esporádicos de deadlock com esta instrução de atualização e uma determinada instrução de seleção na tabela. Entendo por que o SQL está escolhendo uma verificação de índice clusterizado na tabela....Rows < 100 e PageCount < 25.
A tabela tem uma grande quantidade de atividade e, como é um produto de terceiros, não tenho a capacidade de modificar a consulta e fornecer uma dica de índice. O custo de consulta de usar o índice não clusterizado é maior, mas acredito que melhorará a simultaneidade com base em testes....
Eu preciso dizer a ele para usar o índice não clusterizado abaixo
WITH (INDEX (ix_jobname_jobgroup_triggerstate))
Ajuda para configurar isso seria muito apreciada..
Idealmente, gostaríamos de usar um guia de plano para adicionar um
TABLE HINT
, para que a consulta guiada se torne:Infelizmente, isso não é possível porque o
UPDATE
é escrito sem umaFROM
cláusula:Você pode contornar isso capturando o showplan XML para o equivalente:
Observe que este formulário da consulta tem uma
FROM
cláusula para dar suporte à dica de índice. A consulta deve ser escrita exatamente como acima, sem o alias usual para a tabela de destino.Você pode usar esse elemento XML (sem a abertura
<?xml version="1.0" encoding="utf-16"?>
) como o@hints
parâmetro emsp_create_plan_guide
.Exemplo
Dada a tabela e os índices:
O guia do plano (usando o XML capturado do formulário com sugestão de índice acima) é:
Enviando a consulta:
Dá o plano desejado:
As propriedades do plano mostram que o guia do plano foi usado:
Você não pode simplesmente usar o guia de plano exato acima - é apenas um exemplo que funcionou no esquema de brinquedo que criei para reproduzir seu problema. No entanto, o processo geral descrito deve funcionar para você.