Condividi tramite


Modalità di elaborazione di messaggi di grandi dimensioni in BizTalk Server

Informazioni sui messaggi di grandi dimensioni

Sfortunatamente, la risposta a questa domanda non è collegata direttamente a una dimensione specifica del messaggio, ma dipende piuttosto da colli di bottiglia specifici nel sistema microsoft BizTalk Server. I problemi associati ai messaggi di grandi dimensioni possono essere suddivisi nelle categorie seguenti:

  • Errori di memoria insufficiente Alcuni tipi di elaborazione dei messaggi, ad esempio mapping, convalida e promozione delle proprietà, caricano l'intero messaggio in memoria. Se le dimensioni del messaggio in memoria sono superiori alle risorse disponibili, si verificherà un errore di memoria insufficiente. La soglia relativa alle dimensioni per i messaggi che rientrano in questa categoria è molto inferiore rispetto a quella dei messaggi non caricati in memoria. Le dimensioni di un file flat di 10 MB analizzato in XML e quindi mappato possono ad esempio aumentare di dieci volte o più e utilizzare oltre 100 MB di memoria, laddove un documento XML di 100 MB non analizzato o mappato può utilizzare effettivamente solo 1 MB di memoria mentre viene inviato al database MessageBox.

  • Problemi di prestazioni per i messaggi non caricati in memoria I messaggi che non devono essere caricati in memoria vengono trasmessi al database MessageBox usando l'interfaccia XmlReader .NET. Sebbene non siano soggetti alle limitazioni di dimensioni dei messaggi che necessitano di essere caricati in memoria, esistono alcuni fattori importanti che influiscono sul modo in cui in BizTalk Server vengono elaborati i messaggi inviati al database MessageBox.

Fattori che influiscono sull'elaborazione dei messaggi di grandi dimensioni

Le dimensioni originali del messaggio, il formato del messaggio e il tipo di elaborazione del messaggio influiscono tutti sulla modalità di elaborazione dei messaggi di grandi dimensioni in BizTalk Server.

  • Dimensioni originali del messaggio La dimensione del messaggio ricevuto da BizTalk Server è l'indicazione più visibile della dimensione del messaggio quando viene elaborata da BizTalk Server. Le dimensioni originali di un messaggio hanno un impatto decisamente maggiore sulle prestazioni se l'intero messaggio viene caricato in memoria rispetto a se invece il messaggio viene inviato al database MessageBox.

  • Formato messaggio I messaggi vengono ricevuti in BizTalk Server in uno dei due formati principali: file XML o file flat.

    • File XML Affinché BizTalk Server eseguire qualsiasi elaborazione su un messaggio diverso dal routing pass-through, il messaggio deve essere nel formato di file XML. Se i file da elaborare sono ricevuti in formato XML, per la maggior parte conserveranno le dimensioni originali.

    • File flat I file flat devono essere analizzati in un formato XML prima che BizTalk Server possa eseguire qualsiasi elaborazione diversa dal routing pass-through. L'analisi di un file flat in un file XML può aumentare notevolmente le dimensioni del file. I file flat non contengono tag XML con informazioni descrittive sui relativi dati. I file XML, d'altro canto, racchiudono tutti i dati in tag XML descrittivi. In alcuni scenari l'analisi può aumentare le dimensioni di un file flat di dieci volte o più, a seconda della quantità di dati descrittivi contenuta nei tag XML per il file.

    • Documenti file flat di cui è stato eseguito il wrapping in un singolo nodo di sezione CDATA in un documento XML Questo tipo di documento è una combinazione di file XML e flat e può essere problematico perché BizTalk Server deve caricare l'intero documento di file flat di cui è stato eseguito il wrapping in memoria prima di elaborarlo.

  • Tipo di elaborazione dei messaggi In BizTalk Server esistono due tipi di elaborazione dei messaggi: solo routing e mapping. Le variabili delle prestazioni collegate al tipo di elaborazione del messaggio eseguita sono le dimensioni del messaggio e se il messaggio viene caricato in memoria.

    • Solo routing Se BizTalk Server viene usato solo per il routing dei messaggi in base alle proprietà dei messaggi alzate di livello, il messaggio viene trasmesso nel database Messagebox usando l'interfaccia XmlReader .NET e le parti del messaggio non vengono caricate singolarmente in memoria. In questo scenario, gli errori di memoria insufficiente non sono un problema e la considerazione principale è la quantità di tempo necessaria per scrivere messaggi di grandi dimensioni (superiori ai 100 MB) nel database Messagebox. Il team di sviluppo di BizTalk Server ha testato con successo l'elaborazione di messaggi con dimensioni fino a 1 GB quando veniva eseguito solo il routing.

      Il fattore principale che determina le prestazioni in questo scenario è la dimensione del frammento di messaggi di grandi dimensioni usata per suddividere i dati nel database. La dimensione del frammento di messaggi di grandi dimensioni è un'opzione configurabile nella pagina di configurazione Proprietà gruppo BizTalk e ha un valore predefinito di 102400 byte (100 KB). Se si aumenta questo valore si ridurrà il numero di percorsi di andata e ritorno necessari per inviare un messaggio al database MessageBox.

    • Mapping La trasformazione di un documento con una mappa può essere un'operazione a elevato utilizzo di memoria. Quando un documento viene trasformato mediante una mappa, BizTalk Server passa il messaggio alla classe .Net XSLCompileTransform che carica il foglio di stile XSL. Dopo il completamento del metodo Load, il metodo Transform può essere chiamato simultaneamente da più thread. La classe XslCompiledTransform fornisce altre informazioni sulla classe XSLCompiledTransform.

      BizTalk Server migliora significativamente la gestione della memoria per i documenti di grandi dimensioni implementando una soglia di dimensioni dei messaggi configurabili per il caricamento di documenti in memoria durante le trasformazioni. I messaggi con dimensioni inferiori alla soglia sono gestiti in memoria, mentre i messaggi di dimensioni superiori alla soglia sono memorizzati nel buffer del file system per ridurre i requisiti di memoria. La soglia predefinita per le dimensioni dei messaggi è pari a 1 MB.

Linee guida per l'elaborazione di messaggi di grandi dimensioni

Le indicazioni seguenti consentono di migliorare le prestazioni durante l'elaborazione di messaggi di grandi dimensioni in BizTalk Server:

  1. Regolare la soglia delle dimensioni dei messaggi al di sopra della quale i documenti saranno memorizzati nel buffer del file system durante il mapping. Per modificare la soglia delle dimensioni, creare un valore DWORD denominato TransformThreshold nel percorso seguente nel Registro di sistema BizTalk Server:

    HKLM\Software\Microsoft\BizTalk Server\3.0\Administration\TransformThreshold
    

    Dopo aver creato questo valore, immettere un valore decimale con il numero di byte su cui impostare la nuova soglia. Immettere ad esempio il valore decimale 2097152 per aumentare la soglia delle dimensioni dei messaggi a 2 MB (dall'impostazione predefinita di 1 MB). Aumentare questo valore su sistemi con una grande quantità di memoria disponibile per migliorare la velocità effettiva. La memorizzazione dei documenti nel buffer del disco consente di conservare la memoria con un costo minimo a vantaggio della velocità effettiva globale.

    Nota

    Per impostazione predefinita, i documenti memorizzati nel buffer nel file system durante il mapping vengono scritti nella directory %temp% del computer BizTalk Server. Modificare l'impostazione per la variabile di ambiente %temp% in un disco non di sistema per migliorare le prestazioni durante il buffering di messaggi di grandi dimensioni nel file system durante il mapping.

  2. Ridurre al minimo l'utilizzo delle mappe nelle orchestrazioni:

    • Se si utilizza una mappa per estrarre o impostare le proprietà utilizzate con la logica di business in un'orchestrazione, utilizzare invece campi differenzianti o proprietà innalzate di livello. Quando si estraggono o si impostano valori con una mappa il documento viene caricato in memoria. Quando si utilizzano campi differenzianti o proprietà innalzate di livello, il motore dell'orchestrazione accede al contesto del messaggio e non carica il documento in memoria.

    • Se si utilizza una mappa per aggregare più campi in un solo campo, utilizzare campi differenzianti o proprietà innalzate di livello con una variabile dell'orchestrazione per accumulare il set di risultati.

    • Non configurare un'orchestrazione con più input in forme Trasforma. Un'orchestrazione con più input in forme Trasforma non viene infatti inviata al file system durante il mapping. Questo limite determina il caricamento in memoria dell'intero documento mappato se le relative dimensioni superano il valore del Registro di sistema TransformThreshold specificato. Una soluzione al problema può essere l'applicazione delle trasformazioni a livello della porta di ricezione in modo che l'orchestrazione non accetti mai più di un singolo input per forme Trasforma.

  3. Modificare la proprietà Large message fragment size esposta nella pagina di configurazione Proprietà gruppo BizTalk :

    Se le dimensioni in memoria di un messaggio ricevuto superano il numero di byte specificati per dimensioni di frammenti di messaggi di grandi dimensioni , il messaggio viene suddiviso in frammenti delle dimensioni specificate e i frammenti vengono scritti nel MessageBox nel contesto di una transazione Microsoft Distributed Transaction Coordinator (MSDTC) come indicato di seguito:

    1. Se il messaggio in ingresso sarà pubblicato sotto il contesto di una transazione MSDTC esistente, questa transazione sarà utilizzata per la scrittura dei frammenti del messaggio nel MessageBox. Se ad esempio il messaggio in ingresso sarà pubblicato da un adapter transazionale configurato per richiedere transazioni, la transazione esistente sarà utilizzata per la scrittura dei frammenti del messaggio nel MessageBox.

    2. Se il messaggio in ingresso non sarà pubblicato sotto il contesto di una transazione MSDTC esistente, verrà creata una nuova transazione MSDTC per la scrittura dei frammenti del messaggio.

    • Aumentare il valore per dimensioni del frammento di messaggi di grandi dimensioni per ridurre la frequenza con cui i messaggi di grandi dimensioni vengono frammentati e ridurre l'incidenza della creazione delle transazioni MSDTC associate. L'uso eccessivo delle transazioni MSDTC è infatti onerosa dal punto di vista delle prestazioni. Se si aumenta questo valore è possibile che venga aumentata anche la quantità di memoria disponibile utilizzata.

    • Se per scrivere un messaggio nel MessageBox è necessario più tempo del timeout massimo consentito per le transazioni MSDTC di 60 minuti, si verificherà il timeout della transazione, verrà generato un errore e il tentativo di scrittura del messaggio non riuscirà e sarà eseguito il rollback. Il valore di dimensioni del frammento di messaggi di grandi dimensioni deve essere aumentato abbastanza per evitare questo problema durante l'elaborazione di messaggi di grandi dimensioni. A seconda della memoria disponibile, questo valore dovrà essere aumentato a un valore massimo pari a 1000000 byte.

    • Per ciascun frammento di messaggio in un messaggio viene creato uno o più blocchi di database SQL Server a fronte del database MessageBox. Quando il numero di blocchi supera diverse centinaia di migliaia, è possibile che SQL Server inizi a generare errori di "blocchi insufficienti". Se si verifica questo problema, aumentare le dimensioni del frammento di messaggio di grandi dimensioni per ridurre il numero di blocchi di database SQL Server eseguiti sul database MessageBox.

  4. Considerare l'utilizzo di una versione a 64 bit di SQL Server per il database MessageBox se si verificano errori di "blocchi insufficienti". Il numero di blocchi disponibili è significativamente più alto nella versione a 64 bit di SQL Server.

  5. Modificare la proprietà Soglia messaggi di grandi dimensioni esposta nella pagina di configurazione Proprietà gruppo BizTalk :

    Durante l'elaborazione di un batch di messaggi, se le dimensioni in memoria di un batch di messaggi raggiungono il numero di byte specificati per la soglia dei messaggi di grandi dimensioni , la parte del batch di messaggi elaborata viene scritta in MessageBox prima dell'elaborazione del resto del batch di messaggi. Tale operazione verrà eseguita nel contesto di una transazione MSDTC come segue:

    1. Se il batch di messaggi sarà pubblicato sotto il contesto di una transazione MSDTC esistente, questa transazione sarà utilizzata per la scrittura della parte elaborata del batch di messaggi nel MessageBox. Se ad esempio il batch di messaggi in ingresso sarà pubblicato da un adapter transazionale configurato per richiedere transazioni, la transazione esistente sarà utilizzata per la scrittura della parte elaborata del batch di messaggi nel MessageBox.

    2. Se il batch di messaggi non sarà pubblicato sotto il contesto di una transazione MSDTC esistente, dovrà essere creata una nuova transazione MSDTC per la scrittura delle parti del batch di messaggi nel MessageBox. La transazione MSDTC viene utilizzata per assicurarsi che tutte le parti di un determinato batch di messaggi siano scritte correttamente nel database MessageBox.

      L'impostazione Soglia messaggi di grandi dimensioni è direttamente applicabile ai batch di messaggi, ma poiché un batch di messaggi può essere impostato su un valore pari a uno, l'impostazione Soglia messaggi di grandi dimensioni può anche essere applicabile indirettamente ai singoli messaggi. Ad esempio, quando un batch di messaggi di un messaggio supera il parametro soglia messaggio di grandi dimensioni specificato , viene applicata solo al singolo messaggio nel batch.

    • Il parametro Soglia messaggi di grandi dimensioni deve essere modificato per attenuare la creazione di transazioni MSDTC usate per suddividere i batch di messaggi in MessageBox. L'uso eccessivo delle transazioni MSDTC è infatti onerosa dal punto di vista delle prestazioni. Usare il calcolo seguente per determinare quale valore minimo per l'impostazione Soglia messaggi di grandi dimensioni deve essere per evitare inutilmente la creazione di transazioni MSDTC:

      Batch Size * Average size (in bytes) of each message in the batch after being processed by the receive pipeline < Large message threshold
      

      Se le dimensioni totali in byte di un batch di messaggi non superano il valore specificato per la soglia dei messaggi di grandi dimensioni , non è necessario che BizTalk avvii una transazione MSDTC per suddividere il batch di messaggi nel database MessageBox.