Condividi tramite


Blocco, condizioni di deadlock o altri problemi di SQL Server quando ci si connette al database BizTalkMsgBoxDb in BizTalk Server

Questo articolo fornisce informazioni sulla risoluzione dei problemi di SQL Server quando ci si connette al BizTalkMsgBoxDb database in Microsoft BizTalk Server.

Versione originale del prodotto: BizTalk Server
Numero KB originale: 917845

Sintomi

In BizTalk Server si verificano problemi di blocco, deadlock o altri problemi di Microsoft SQL Server quando si tenta di connettersi al BizTalkMsgBoxDb database.

Causa

Questo problema può verificarsi se una o più delle seguenti condizioni sono vere:

  • L'opzione Creazione automatica statistiche è abilitata nel BizTalkMsgBoxDb database.
  • L'opzione Aggiornamento automatico statistiche è abilitata nel BizTalkMsgBoxDb database.
  • L'opzione max degree of parallelism è impostata su un valore diverso da 1 per il BizTalkMsgBoxDb database o l'istanza SQL che ospita questo database.
  • Si deframmenta o si ricompila un indice nel BizTalkMsgBoxDb database quando BizTalk Server elabora i dati.

Risoluzione 1: Disabilitare l'opzione Auto Create Statistics e l'opzione Auto Update Statistics

Per risolvere questo problema, disabilitare le opzioni Creazione automatica statistiche e Statistiche di aggiornamento automatico nel BizTalkMsgBoxDb database in SQL Server.

Risoluzione 2: impostare l'opzione max degree of parallelism su 1

Per risolvere questo problema, impostare l'opzione max degree of parallelism su 1 nell'impostazione del database o nell'istanza BizTalkMsgBoxDb SQL che ospita il database.

Risoluzione 3: Non ricompilare un indice quando BizTalk Server elabora i dati

Per risolvere questo problema, non eseguire la bts_RebuildIndexes stored procedure o alcun comando SQL che ricompila un indice in un database BizTalk Server quando BizTalk Server elabora i dati.

Note

La deframmentazione di un indice in un database BizTalk Server non è supportata.

Stored procedure bts_RebuildIndexes

L'unico metodo supportato per ricompilare un indice nel database consiste nell'eseguire BizTalkMsgBoxDb la bts_RebuildIndexes stored procedure. In BizTalk Server 2006 e versioni successive è possibile eseguire la dtasp_RebuildIndexes stored procedure per ricompilare gli indici nel BizTalkDTADb database.

La maggior parte degli indici BizTalk è basata su GUID. Molti test hanno dimostrato che, purché le tabelle non vengano analizzate, gli indici basati su GUID possono ottenere prestazioni migliori rispetto agli indici basati sull'identità per carichi di lavoro specifici di BizTalk. Ciò può causare frammentazione. Tuttavia, poiché i flussi di dati vengono inseriti e usciti dalle tabelle a un ritmo costante, la frammentazione potrebbe non causare problemi. Se si prevede che un numero elevato di dati venga compilato nel BizTalkMsgBox database, è possibile ricompilare periodicamente gli indici durante i tempi di inattività pianificati. Le stesse linee guida si applicano al database di rilevamento.

È possibile usare il DBCC DBREINDEX comando SQL per ricompilare un indice negli altri database BizTalk Server. Per un esempio di come usare il comando SQL, fare clic con il DBCC DBREINDEX pulsante destro del mouse sulla bts_RebuildIndexes stored procedure e quindi scegliere Proprietà.

Microsoft supporta solo la ricompilazione degli indici di database durante il tempo di inattività di BizTalk Server. Prima di ricompilare un indice, è consigliabile arrestare tutte le istanze host e SQL Server Agent. Quando si esegue la bts_RebuildIndexes stored procedure in BizTalk Server 2006 e versioni successive, è possibile che venga visualizzato uno dei messaggi di errore seguenti:

  • Messaggio di errore 1

    Messaggio 5239, Livello 16, Stato 1, Routine bts_RebuildIndexes, Riga 4 Impossibile elaborare l'ID oggetto 674101442 (oggetto 'TrackingData')
    Questo comando DBCC (Database Consistency Checker) non supporta questo tipo di oggetto.

  • Messaggio di errore 2

    Messaggio 5239, Livello 16, Stato 1, Routine bts_RebuildIndexes, Riga 4 Impossibile elaborare l'ID oggetto 722101613 (oggetto 'TrackingData') perché questo comando DBCC non supporta oggetti di questo tipo.

Questo problema si verifica perché l'oggetto TrackingData è una visualizzazione in BizTalk Server 2006 e versioni successive. Per risolvere questo problema, eseguire le operazioni seguenti e quindi eseguire la bts_RebuildIndexes stored procedure:

  1. Impostare come commento la riga seguente nella bts_RebuildIndexes stored procedure.

    DBCC DBREINDEX ('[dbo].[TrackingData]') WITH NO_INFOMSGS
    
  2. Aggiungere le righe seguenti alla bts_RebuildIndexes stored procedure.

    DBCC DBREINDEX ('[dbo].[TrackingData_0_0]') WITH NO_INFOMSGS
    DBCC DBREINDEX ('[dbo].[TrackingData_0_1]') WITH NO_INFOMSGS
    DBCC DBREINDEX ('[dbo].[TrackingData_0_2]') WITH NO_INFOMSGS
    DBCC DBREINDEX ('[dbo].[TrackingData_0_3]') WITH NO_INFOMSGS
    DBCC DBREINDEX ('[dbo].[TrackingData_1_0]') WITH NO_INFOMSGS
    DBCC DBREINDEX ('[dbo].[TrackingData_1_1]') WITH NO_INFOMSGS
    DBCC DBREINDEX ('[dbo].[TrackingData_1_2]') WITH NO_INFOMSGS
    DBCC DBREINDEX ('[dbo].[TrackingData_1_3]') WITH NO_INFOMSGS