Acabei de migrar meu servidor de banco de dados ERP do SQL Server 2000 para o SQL Server 2008 R2 (ambos Enterprise Edition) e essa migração ocorreu sem problemas.
No entanto, agora que estou tentando recriar a replicação do ERP para o ambiente de relatórios, tenho duas publicações que estão tentando criar uma série de MSFixupNonUniqueIndex_{{datetimestamp}}
índices não exclusivos. Os processos que criam esses índices estão todos suspensos, mas estão bloqueando outros processos SQL que os usuários finais estão executando.
O que está causando essa criação de índice de correção e posso evitá-la?
- Usando
sp_whoisactive
there is nowait_info
para a tarefa de criação de índice. - Não descartei o banco de dados replicado no ambiente Reporting.
- O "Ambiente de relatórios" também é SQL Server 2008 R2 Enterprise.
- Esta é a replicação de 2008 R2 para 2008 R2, agora.
sysprocesses
mostra dois procs bloqueados pelo spid tentando criar o índice. O próprio spid tem umwaittype
de0x0000
e umlastwaittype
deMISCELLANEOUS
.sys.locks
mostra que existem 777 bloqueios: 7 Intent, 761 Exclusive, 6 Shared, 2 Schema Mod, 1 Schema Stability. Os recursos são: 1ALLOCATION_UNIT
, 9OBJECT
, 3DATABASE
, 2METADATA
, 677PAGE
, 11KEY
, 1HOBT
, 73EXTENT
.select * from sysprocesses where open_tran > 0
retorna o spid com uma transação abertaDBCC OPENTRAN
não tem transações abertas.MAXDOP
está desconfigurado
Se a replicação estiver criando índices automaticamente, provavelmente você não poderá evitá-la. A única maneira de fazer isso pode ser criar um índice correspondente no assinante.
Tente executar o agente de mesclagem na linha de comando com um nível de log mais detalhado e veja quais informações ele retorna. Pode estar esbarrando em algo que não está sendo retornado como um erro.
Certifique-se de que seu banco de dados de assinaturas seja novo. O problema será resolvido se você usar um novo banco de dados para assinatura. Isso funcionou para mim.