BizTalk Server 런타임이 MessageBox 또는 관리 데이터베이스와 통신할 수 없는 경우 DBNetLib(데이터베이스 네트워크 라이브러리) 오류가 발생합니다. 이 경우 예외를 catch하는 BizTalk Server 런타임 인스턴스가 종료된 후 매 분마다 순환하여 데이터베이스를 사용할 수 있는지 확인합니다.
DBNetLib 오류의 가장 일반적인 원인은 MessageBox 데이터베이스 서버 중 하나가 매우 사용량이 많고 통신을 추가로 시도하면 시간이 초과되어 DBNetLib 예외가 발생하는 경우입니다.
MessageBox 데이터베이스가 매우 바쁜 경우 외에도 더 많은 MessageBox 데이터베이스 중 하나를 호스팅하는 BizTalk 데이터베이스 서버가 I/O(입력/출력) 바인딩될 때 프로덕션 환경에서 DBNetLib 오류가 발생할 수 있습니다.
이 항목에서는 DBNetLib 오류로 이어질 수 있는 조건 및 이러한 오류를 방지하기 위한 권장 사항에 대해 설명합니다.
DBNetLib 오류의 원인 및 해결 방법
DBNetLib 오류의 증상
Microsoft BizTalk Server 호스트 인스턴스가 종료되고 다시 시작되며, 다음과 유사한 오류가 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."
MessageBox 데이터베이스를 호스팅하는 BizTalk 데이터베이스 서버가 I/O 바인딩됨
BizTalk 서버는 MessageBox 데이터베이스를 호스팅하는 데이터베이스 서버와 통신하고 직접 작동합니다. MessageBox 데이터베이스를 호스트하는 데이터베이스 서버가 너무 많이 사용되어 I/O(입력/출력) 바인딩된 상황에 빠지면 응답하지 않을 수 있습니다. BizTalk 서버 중 하나가 해당 데이터베이스 서버 중 하나와의 연결이 끊어질 수 있으며 DBNetLib 오류가 발생합니다.
테스트 결과, 고부하 데이터베이스 서버는 실제 디스크의 "%Idle 시간"이 계속 감소하여 10%미만으로 떨어지면 I/O 한계에 다다르게 됩니다. "%Idle 시간"이 계속해서 해당 수준 아래로 떨어지면 데이터베이스 서버가 응답하지 않는 것일 수 있음을 나타냅니다.
원인
MessageBox 데이터베이스를 호스트하는 데이터베이스 서버가 I/O 바인딩될 수 있는 몇 가지 이유가 있습니다. 그 중 일부는 다음과 같습니다.
MessageBox 데이터베이스를 호스트하는 데이터베이스 컴퓨터가 낮은 메모리, 프로세서 수 및 속도 등과 같은 낮은 하드웨어 사양에 바인딩된 경우
MessageBox 데이터베이스를 호스팅하는 데이터베이스 컴퓨터의 실제 디스크가 다른 고가용성 데이터베이스에서 공유되는 경우 여러 데이터베이스(MessageBox 포함)가 동시에 많이 사용되는 경우 실제 디스크는 I/O 바인딩된 상황에 들어갈 수 있습니다.
이러한 상황의 예는 다음과 같습니다.
테스트 결과 BizTalkDTADb 및/또는 BAM 데이터베이스를 호스트하는 데이터베이스 서버가 때때로 실제 디스크의 %Disk 읽기 및 쓰기 시간의 높은 비율을 사용하는 것으로 나타났습니다. MessageBox 데이터베이스를 호스트하는 데이터베이스 서버 디스크가 BizTalkDTADb 또는 BAM과 같이 많이 사용되는 다른 데이터베이스에서 공유되는 경우 두 데이터베이스가 동시에 많이 사용되는 경우 데이터베이스 서버 물리적 디스크가 I/O 바인딩된 다음 응답하지 않을 수 있습니다.
BizTalkDTADb 및 하나 이상의 MessageBox 데이터베이스가 데이터베이스 서버에서 동일한 실제 디스크를 공유하는 경우 보관 및 제거가 자주 실행되지 않는 경우 디스크가 I/O 바인딩될 수 있습니다.
해결 방법
BizTalk MessageBox를 호스트하는 데이터베이스 서버가 많이 소비되고 응답하지 않는 상황에 처하지 않도록 합니다.
서버 디스크가 많이 사용되는 주요 원인 중 일부는 이 문제를 완화하는 방법에 대한 권장 사항과 함께 아래에 나열되어 있습니다.
낮은 하드웨어 사양
테스트 결과, 하드웨어 사양이 처리하려는 로드 양을 따라갈 수 없을 때 서버가 더 많이 소비되기 시작합니다. 하드웨어 사양이 낮을수록 데이터베이스에서 발생하는 작업의 양에 따라 시스템이 빠르게 압도됩니다. 이로 인해 서버의 %Disk 읽기 및 쓰기 시간이 안정화되지 않고 계속 증가할 수 있으며 디스크의 %Idle 시간이 계속 줄어들고 10%보다 낮아질 수 있으며 이로 인해 데이터베이스 서버가 응답하지 않을 수 있습니다.
BizTalk 배포에 있는 활동 및 부하의 양에 따라 높은 부하 동안 응답하지 않는 데이터베이스 서버를 가져오는 경우 데이터베이스 서버에서 CPU 수, 메모리 수 및 SAN에 연결하는 부분을 업그레이드하는 것이 좋습니다. 물론 하드웨어에서 업그레이드해야 하는 병목 상태인 부분(메모리, CPU 수 등)을 파악하기 위해 적절한 진단을 수행해야 합니다.
둘 이상의 BizTalk 데이터베이스 그룹에 대해 하나의 서버 또는 디스크 공유
앞에서 설명한 것처럼 BizTalk Tracking(BizTalkDTADb) 데이터베이스 및 BAM 데이터베이스와 같은 MessageBoxes 이외의 데이터베이스는 서버의 실제 디스크에서 높은 주기를 사용할 수 있습니다. 따라서 이러한 데이터베이스가 MessageBox 데이터베이스와 동일한 실제 디스크를 공유하는 경우, 디스크에 과부하를 일으켜 응답하지 않을 수 있으며, 이로 인해 BizTalk 서버가 MessageBox 데이터베이스와의 연결을 잃게 되어 DBNetLib 오류를 발생시킬 수 있습니다.
서버의 실제 디스크 사용량이 높을 것으로 예상되는 데이터베이스를 BizTalk MessageBox와 분리하여 서로 다른 실제 디스크를 공유하거나 다른 서버에서 분리하는 것이 좋습니다. BizTalkDTADb 및 BAM 데이터베이스를 고유한 드라이브/서버의 MessageBox와 분리하는 것이 좋습니다. 또한 각 MessageBox 데이터베이스(둘 이상이 있는 경우)를 자체 디스크에 두는 것이 좋습니다.
보관 및 제거
동일한 서버에서 동일한 디스크를 공유하는 BizTalkDTADb 및 MessageBox 데이터베이스가 있는 경우 BizTalkDTADb 데이터베이스를 정기적으로 보관하고 제거해야 합니다. 그렇지 않으면 무기한 증가합니다.
테스트는 주기적으로 보관하고 제거하는 것이 좋지만, 평소보다 높은 부하로 실행하는 경우 보관 및 제거를 더 자주 고려할 수 있습니다. BizTalkDTADb 데이터베이스 증가가 정기적으로 유지되지 않는 경우 이러한 작업이 마지막으로 수행되면 상당한 시간이 소요되고 실행되는 동안 사용 가능한 대부분의 데이터베이스 서버 리소스를 사용할 수 있습니다.