Suggerimenti per evitare eccezioni DBNETLIB
Gli errori DBNetLib (Database Network Library) si verificano quando il runtime di BizTalk Server non è in grado di comunicare con il database MessageBox o il database di gestione. Quando si verifica ciò, l'istanza di runtime di BizTalk Server che rileva l'eccezione viene chiusa, per poi eseguire un ciclo di verifica della disponibilità del database ogni minuto.
La causa più frequente di errore DBNetLib si verifica quando uno o più server di database MessageBox risulta occupato fino al timeout dei tentativi che provoca un'eccezione DBNetLib.
Oltre al caso in cui il database MessageBox è occupato, l'errore DBNetLib può verificarsi in un ambiente di produzione quando i server di database BizTalk che ospitano uno dei database MessageBox eseguono il binding I/O (Input/Output).
In questo argomento vengono descritte le condizioni che possono provocare errori DBNetLib e i consigli per evitarli.
Causa e risoluzione dell'errore DBNetLib
Sintomi di un errore DBNetLib
Un'istanza di host Microsoft BizTalk Server termina e si riavvia autonomamente e gli errori simili al seguente vengono scritti nel registro dell'applicazione BizTalk Server:
Event Type:Warning
Event Source:BizTalk Server <version>
Event Category:BizTalk Server <version>
Event ID:5410
Computer:BIZTALKSERVER
Description:
An error occurred that requires the BizTalk service to terminate. The most common causes are the following:
1) An unexpected out of memory error.
OR
2) An inability to connect or a loss of connectivity to one of the BizTalk databases.
The service will shutdown and auto-restart in 1 minute. If the problematic database remains unavailable, this cycle will repeat.
Error message: [DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation.
Error source:
BizTalk host name: BizTalkHost
Windows service name: BTSSvc$BizTalkHost
---------------------------------------------------------
Event Type:Error
Event Source:BizTalk Server <version>
Event Category:BizTalk Server <version>
Event ID:6913
Computer:BIZTALKSERVER
Description:
An attempt to connect to "BizTalkMsgBoxDb" SQL Server database on server "SQLSERVER " failed.
Error: "[DBNETLIB][ConnectionWrite (send()).]General network error. Check your network documentation."
I server di database BizTalk che ospitano i database MessageBox eseguono il binding I/O (Input/Output)
I server BizTalk comunicano e interagiscono direttamente con i server di database che ospitano i database MessageBox. Se uno dei server di database che ospitano i database MessageBox viene utilizzato eccessivamente e si verifica una situazione di binding I/O (Input/output), potrebbe non rispondere. A sua volta, è possibile che la connettività di uno dei server BizTalk con uno di questi server di database si interrompa e che si verifichi un errore DBNetLib.
Le verifiche hanno rilevato che un server di database utilizzato in modo eccessivo esegue il binding I/O quando la percentuale di tempo di inattività del disco fisico scendere fino a raggiungere un livello inferiore al 10%. Una percentuale di tempo di inattività inferiore a tale livello indica che il server di database potrebbe non rispondere.
Causa
Sono diversi i motivi che possono causare il binding I/O di server di database che ospitano i database MessageBox. Di seguito ne vengono riportati alcuni:
Se il computer di database che ospita il database MessageBox è associato a specifiche hardware insufficienti quali: numero e velocità dei processori, memoria insufficienti e così via.
Se il disco fisico del computer di database che ospita un database MessageBox è condiviso con altri database utilizzati eccessivamente. Nei casi in cui alcuni database, compreso il database MessageBox, vengono contemporaneamente utilizzati in modo eccessivo, il disco fisico può eseguire il binding I/O.
Di seguito viene riportato un esempio di tale situazione:
Le verifiche hanno rilevato che il server di database che ospita il database BizTalkDTADb e/o i database BAM a volte ha elevate percentuali di tempi di lettura e scrittura di un disco fisico. Quando il disco del server di database che ospita un database MessageBox è condiviso con un altro database utilizzato eccessivamente, ad esempio BizTalkDTADb o BAM, e se entrambi i database vengono utilizzati in modo eccessivo contemporaneamente, è possibile che il disco fisico del server di database esegua il binding I/O per poi non rispondere.
Se il database BizTalkDTADb e uno o più database MessageBox condividono lo stesso disco fisico nell'ambito del server di database e se le operazioni di archiviazione e di eliminazione non vengono eseguite di frequente, il disco potrebbe eseguire il binding I/O.
Risoluzione
Assicurarsi che i server di database che ospitano i database MessageBox BizTalk non vengano utilizzati eccessivamente al punto di non rispondere.
Alcune delle cause principali di utilizzo eccessivo del disco del server vengono riportate di seguito, insieme ai consigli su come arginare tale problema.
Specifiche hardware insufficienti
Le verifiche hanno rilevato che il server inizia ad essere utilizzato in eccesso quando le specifiche hardware non sono in grado di sostenere il carico da elaborare. Con specifiche hardware insufficienti, in breve tempo il sistema non sarà in grado di sostenere il numero di attività svolte nei database. Ciò potrebbe causare il continuo aumento della percentuale dei tempi di lettura e scrittura e una contemporanea diminuzione della percentuale di tempo di inattività (al di sotto del 10%) facendo sì che il server di database non risponda.
A seconda del numero di attività e del carico BizTalk, se si rilevano database malfunzionanti a causa di carichi elevati, sarà necessario prendere in considerazione un aggiornamento dei seguenti componenti dei server di database: numero di CPU, memoria e connessione a una rete SAN. Naturalmente si dovrebbe effettuare una diagnosi corretta per capire quale componente (memoria, numero di CPU e così via) costituisce il collo di bottiglia e ha bisogno di essere aggiornato.
Condivisione di un server o di un disco per più di un gruppo di database BizTalk
Come indicato in precedenza, i database non MessageBox, ad esempio il database di rilevamento BizTalkDTADb e i database BAM possono avere un impatto elevato, in termini di utilizzo, del disco fisico di un server. Di conseguenza, se tali server devono condividere lo stesso disco fisico con i database MessageBox, potrebbero influire negativamente sul disco stesso provocando la perdita di connessione dei server BizTalk Server con i database MessageBox e causando un errore DBNetLib.
È consigliabile separare qualsiasi database che si prevede utilizzi in modo eccessivo il disco fisico del server dal database MessageBox BizTalk, in modo che possa condividere dischi fisici differenti (oppure separarlo in altri server). È consigliabile separare i database BizTalkDTADb e BAM nei rispettivi server/unità separati dal database MessageBox ed è, inoltre, consigliabile, avere ciascun database MessageBox (nel caso ve ne sia più di uno) sul proprio disco.
Archiviazione ed eliminazione
Nei casi in cui si dispone di database BizTalkDTADb e MessageBox che condividono lo stesso disco sullo stesso server, è necessario eseguire operazioni di archiviazione ed eliminazione dei database BizTalkDTADb regolarmente per evitarne la crescita esponenziale.
La verifica ha rilevato che è buona norma eseguire periodicamente operazioni di archiviazione ed eliminazione ma se si eseguono carichi superiori al normale sarà necessario prendere in considerazione l'esecuzione più frequente di tali operazioni. Se la crescita del database BizTalkDTADb non viene controllata regolarmente, quando tali operazioni vengono eseguite possono richiedere molto tempo e consumare la maggior parte delle risorse del server di database disponibili.