Estamos realizando uma migração de dados de terceiros e está travando.
Quando investigamos, vemos que o SPID 38 (um SPID do sistema/em segundo plano) é o bloqueio dos SPIDs do usuário tentando fazer a migração. Infelizmente, o SQL_Text de sp_whoisactive (ou mesmo o monitor de atividade) é NULL para SPID 38. O wait_info é PREEMPTIVE_OS_GENERICOPS
.
Existe alguma maneira de dizer o que 38 está tentando fazer?
Ele está usando uma ferramenta baseada no Windows fornecida por terceiros. Fiz um backup dos dados, restaurei neste novo servidor (para que o banco de dados e seu conteúdo estejam acessíveis e funcionando). Em seguida, executamos esta ferramenta para fazer a atualização para a nova versão do software e é aí que estamos obtendo os blocos.
sp_WhoIsActive @get_locks = 1
retorna um XML muito longo (4k caracteres muito longos para postar).
Resolvi olhar a tabela sys.sysprocesses e descobri que
FT_CRAWL
(olhando no campo CMD) estava rodando no spid de bloqueio.Eu acho que um banco de dados restaurado começa a rastrear imediatamente? De qualquer forma, desliguei o Full Text Daemon e o bloqueio cessou. Terminamos a atualização e, em seguida, ligamos o Daemon novamente e tudo estava bem no mundo.
Enviei um e-mail para Adam Mechanic para ver se o campo CMD é usado em seu sp_WhoIsActive , pois acho que seria muito benéfico nesse tipo de situação.