Estou vendo chamadas como as mostradas abaixo em meus logs de auditoria do SQL Server, mas não tenho ideia do que isso significa. Uma pesquisa no Google revelou uma possível relação com compila/recompila. A linha (ou linhas semelhantes) também pode ser encontrada dentro de vários sprocs internos do SQL Server.
EXEC %%Object(MultiName = @objname).LockMatchID(ID = @objid, Exclusive = 1, BindInternal = 0)
Alguém tem uma compreensão desse processo?
É um método interno, presumivelmente - a partir do nome - usado para bloquear um objeto com base em seu
object_id
e garantir que o usuário em execução tenha o direito de fazer alterações adicionais no objeto. Esse bloqueio é necessário para fazer coisas como adicionar/eliminar propriedades, colunas ocultas etc. tabela através de algum método indireto, já que não háLOCK TABLE
comando - mas claramente há canalização interna para ajudar nas operações do sistema).Se você olhar para qualquer um dos procedimentos em que isso é usado (há uma lista grande):
Você verá comentários anteriores como:
(E as pessoas dizem que comentar o código é uma perda de tempo.)
Também parece haver um
LockExclusiveMatchID
método, embora oExclusive
argumento pareça ter sido adicionado posteriormente aLockMatchID
, o que tornou o método exclusivo obsoleto.Não tenho certeza de quanto mais específico você precisa para isso - se você quiser rastrear onde há uma alta ocorrência disso, você precisa olhar para as chamadas externas, não para esta declaração específica. Por exemplo, você tem um aplicativo que está renomeando muito os objetos, ou chamando
sp_autostats
diretamente, alterando a replicação ou qualquer outra coisa que você possa inferir da lista gerada acima? Você terá que descobrir quais procedimentos estão sendo chamados para ajudar a determinar o porquê . E o que você fará a respeito (se ao menos puder determinar que há um "problema") não terá nada a verLockMatchID
especificamente.Eu enfrentei o mesmo problema e vi muitos bloqueios gerados pelas mesmas instruções e impasses ocorridos no servidor durante os mesmos 3 minutos.
Por meio de relatórios de impasse, descobri que impasses ocorreram com meus processos e este processo do sistema no meu caso: Proc [Database Id = 32767 Object Id = -993696157]
De acordo com este artigo , está relacionado à tarefa do sistema de replicação.
Esta é uma pilha de chamadas típica de relatório de processo bloqueado\processo de bloqueio\process\executionStack no meu caso:
Se eu decodificar com esta consulta:
Então eu obtenho este resultado: