다음을 통해 공유


BizTalk Server에서 큰 메시지를 처리하는 방법

큰 메시지 정의

아쉽게도 이 질문에 대한 대답은 특정 메시지 크기에 직접 연결되는 것이 아니라 Microsoft BizTalk Server 시스템의 특정 병목 현상에 따라 달라집니다. 큰 메시지와 관련된 문제를 다음 범주로 구분할 수 있습니다.

  • 메모리 부족 오류 매핑, 유효성 검사 및 속성 승격과 같은 특정 유형의 메시지 처리는 전체 메시지를 메모리에 로드합니다. 메모리에 있는 메시지 크기가 사용 가능한 리소스를 초과할 경우 메모리 부족 오류가 발생합니다. 이 범주에 속하는 메시지의 크기 임계값은 메모리에 로드되지 않는 메시지의 크기 임계값보다 훨씬 작습니다. 예를 들어 XML로 구문 분석된 다음 매핑되는 10MB 플랫 파일은 10배 이상으로 증가하여 100MB 이상의 메모리를 사용할 수 있습니다. 반면, 구문 분석되지 않거나 매핑되지 않는 100MB XML 문서는 MessageBox 데이터베이스에 스트리밍되므로 실제로 1MB의 메모리만 사용할 수 있습니다.

  • 메모리에 로드되지 않은 메시지의 성능 문제 메모리에 로드할 필요가 없는 메시지는 .NET XmlReader 인터페이스를 사용하여 MessageBox 데이터베이스로 스트리밍됩니다. 이러한 메시지는 메모리에 로드해야 하는 메시지의 크기 제한을 받지 않지만 MessageBox 데이터베이스에 스트리밍되는 메시지를 BizTalk Server에서 처리하는 방법에 영향을 주는 몇 가지 중요한 요인이 있습니다.

큰 메시지 처리에 영향을 주는 요인

원본 메시지 크기, 메시지 형식 및 메시지 처리 유형은 모두 BizTalk Server에서 큰 메시지를 처리하는 방법에 영향을 줍니다.

  • 원본 메시지 크기 BizTalk Server 받은 메시지의 크기는 BizTalk Server 처리할 때 메시지가 얼마나 커지는지를 가장 잘 나타냅니다. 전체 메시지가 메모리에 로드된 다음 메시지가 MessageBox 데이터베이스에 스트리밍될 경우 메시지의 원래 크기가 성능에 더 큰 영향을 줍니다.

  • 메시지 형식 메시지는 XML 파일 또는 플랫 파일의 두 가지 기본 형식 중 하나로 BizTalk Server 수신됩니다.

    • XML 파일 BizTalk Server 라우팅 통과 이외의 메시지에 대한 처리를 수행하려면 메시지가 XML 파일 형식이어야 합니다. 처리할 파일이 XML 형식으로 수신될 경우 이러한 파일은 대부분의 파트에서 원래 크기를 유지합니다.

    • 플랫 파일 BizTalk Server 라우팅 통과 이외의 처리를 수행하려면 플랫 파일을 XML 형식으로 구문 분석해야 합니다. 플랫 파일을 XML 파일로 구문 분석하면 파일의 크기가 크게 증가할 수 있습니다. 플랫 파일은 해당 데이터에 대한 설명 정보가 있는 XML 태그를 포함하지 않습니다. 반면, XML 파일은 설명 XML 태그에 모든 데이터를 래핑합니다. 일부 시나리오에서는 파일의 XML 태그에 포함되는 설명 데이터의 양에 따라 플랫 파일의 크기가 10배 이상으로 증가할 수 있습니다.

    • XML 문서의 단일 CDATA 섹션 노드에 래핑된 플랫 파일 문서 이 유형의 문서는 XML과 플랫 파일의 조합이며 BizTalk Server 처리하기 전에 전체 래핑된 플랫 파일 문서를 메모리에 로드해야 하므로 문제가 될 수 있습니다.

  • 메시지 처리 유형 BizTalk Server 메시지 처리에는 라우팅 전용 및 매핑의 두 가지 유형이 있습니다. 수행되는 메시지 처리 유형과 연관된 성능 변수는 메시지 크기 및 메시지가 메모리에 로드되는지 여부를 나타냅니다.

    • 라우팅만 BizTalk Server 승격된 메시지 속성을 기반으로 메시지를 라우팅하는 데만 사용되는 경우 메시지는 .NET XmlReader 인터페이스를 사용하여 Messagebox 데이터베이스로 스트리밍되고 메시지 부분은 메모리에 개별적으로 로드되지 않습니다. 이 시나리오에서는 메모리 부족 오류가 문제가 되지 않으며 매우 큰 메시지(100MB 이상)를 Messagebox 데이터베이스에 기록하는 데 필요한 시간을 기본적으로 고려해야 합니다. BizTalk Server 개발 팀은 라우팅만 수행할 경우에 최대 1GB 크기의 메시지가 처리된다는 것을 성공적으로 테스트했습니다.

      이 시나리오에서 성능을 결정하는 주요 요인은 데이터를 데이터베이스로 조각화하는 데 사용되는 큰 메시지 조각 크기 입니다. 큰 메시지 조각 크기BizTalk 그룹 속성 구성 페이지에서 구성할 수 있는 옵션이며 기본값은 102400바이트(100KB)입니다. 이 값을 늘리면 메시지를 MessageBox 데이터베이스에 스트리밍하는 데 필요한 왕복(round-trip) 수가 줄어듭니다.

    • 매핑 맵을 사용하여 문서를 변환하는 작업은 메모리를 많이 사용하는 작업일 수 있습니다. 맵에 의해 문서가 변환되면 BizTalk Server가 XSL 스타일시트를 로드하는 .Net XSLCompileTransform 클래스로 메시지를 전달합니다. Load 메서드가 완료되고 나면 여러 스레드에서 동시에 Transform 메서드를 호출할 수 있습니다. XslCompiledTransform 클래스 는 XSLCompiledTransform 클래스에 대한 자세한 정보를 제공합니다.

      BizTalk Server 변환하는 동안 문서를 메모리에 로드하기 위한 구성 가능한 메시지 크기 임계값을 구현하여 대용량 문서의 메모리 관리를 크게 개선합니다. 크기가 이 임계값보다 작은 모든 메시지는 메모리에서 처리되고 이 임계값보다 큰 모든 메시지는 메모리 요구 사항을 줄이기 위해 파일 시스템에 버퍼링됩니다. 기본 메시지 크기 임계값은 1MB입니다.

큰 메시지 처리 지침

BizTalk Server에서 큰 메시지를 처리할 경우 다음 지침에 따라 성능을 향상시킵니다.

  1. 해당 임계값을 초과할 경우 매핑 중에 문서가 파일 시스템에 버퍼링되는 메시지 크기 임계값을 조정합니다. 크기 임계값을 수정하려면 BizTalk Server 레지스트리의 다음 위치에 TransformThreshold라는 DWORD 값을 만듭니다.

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

    이 값을 만든 후에 바이트 수를 10진수 값으로 입력하여 새 임계값을 설정합니다. 예를 들어 메시지 크기 임계값을 기본값인 1MB에서 2MB로 늘리려면 10진수 값 2097152를 입력합니다. 많은 양의 메모리를 사용할 수 있는 시스템에서 이 값을 늘려 처리량을 향상시킵니다. 문서를 디스크에 버퍼링하면 전체 처리량이 줄어드는 대신 메모리를 절약할 수 있습니다.

    참고

    기본적으로 매핑하는 동안 파일 시스템에 버퍼링되는 문서는 BizTalk Server 컴퓨터의 %temp% 디렉터리에 기록됩니다. 매핑하는 동안 파일 시스템에 큰 메시지를 버퍼링할 때 성능을 향상시키려면 %temp% 환경 변수에 대한 설정을 비시스템 디스크로 변경합니다.

  2. 오케스트레이션에서 맵 사용을 최소화합니다.

    • 맵을 사용하여 오케스트레이션에서 비즈니스 논리와 함께 사용되는 속성을 추출하거나 설정하려는 경우 고유 필드나 승격 속성을 대신 사용합니다. 맵을 사용하여 값을 추출하거나 설정할 경우 문서가 메모리에 로드됩니다. 고유 필드 또는 승격 속성을 사용할 경우 오케스트레이션 엔진은 메시지 컨텍스트에 액세스하고 문서를 메모리에 로드하지 않습니다.

    • 맵을 사용하여 여러 필드를 하나의 필드로 집계할 경우 오케스트레이션 변수와 함께 고유 필드 또는 승격 속성을 사용하여 결과 집합을 누적합니다.

    • Transform 셰이프에 대한 다중 입력으로 오케스트레이션을 구성하지 마십시오. Transform 셰이프에 대한 다중 입력이 포함된 오케스트레이션은 매핑하는 동안 파일 시스템으로 스트리밍되지 않습니다. 이 제한으로 인해 문서 크기가 지정된 TransformThreshold 레지스트리 값을 초과할 경우 매핑되는 전체 문서가 메모리로 로드됩니다. 이 문제에 대한 해결 방법 중 하나는 오케스트레이션에서 Transform 셰이프에 대해 둘 이상의 입력을 허용하지 않도록 수신 포트 수준에서 변환을 적용하는 것입니다.

  3. BizTalk 그룹 속성 구성 페이지에 표시되는 큰 메시지 조각 크기 속성을 조정합니다.

    받은 메시지의 메모리 내 크기가 대용량 메시지 조각 크기에 지정된 바이트 수를 초과하는 경우 메시지는 지정된 크기의 조각으로 분할되고 조각은 다음과 같이 MSDTC(Microsoft Distributed Transaction Coordinator) 트랜잭션의 컨텍스트에 따라 MessageBox에 기록됩니다.

    1. 들어오는 메시지가 기존 MSDTC 트랜잭션의 컨텍스트에서 게시될 경우 메시지 조각을 MessageBox에 기록할 때 이 트랜잭션이 사용됩니다. 예를 들어 트랜잭션이 필요하도록 구성된 트랜잭션 어댑터에 의해 들어오는 메시지가 게시될 경우 메시지 조각을 MessageBox에 기록할 때 기존 트랜잭션이 사용됩니다.

    2. 들어오는 메시지가 기존 MSDTC 트랜잭션의 컨텍스트에서 게시되지 않을 경우 메시지 조각을 기록하기 위해 새 MSDTC 트랜잭션이 만들어집니다.

    • 큰 메시지 조각 크기의 값을 늘려 큰 메시지가 조각화되는 빈도를 줄이고 연결된 MSDTC 트랜잭션을 만드는 발생률을 줄입니다. 성능상의 관점에서 보면 MSDTC 트랜잭션을 과도하게 사용하는 데 드는 비용이 크기 때문에 이 작업을 수행해야 합니다. 이 값을 늘리면 사용되는 사용 가능한 메모리의 양도 증가합니다.

    • MessageBox에 메시지를 기록하는 데 걸리는 시간이 최대 허용 MSDTC 트랜잭션 시간 제한인 60분보다 긴 경우에 트랜잭션 시간 제한이 초과되고 오류가 발생하며 메시지를 기록하려는 시도가 실패한 후 롤백됩니다. 대용량 메시지 조각 크기 값은 매우 큰 메시지를 처리할 때 이 문제를 방지할 수 있을 만큼 충분히 증가해야 합니다. 사용 가능한 메모리에 따라 이 값을 최대 1000000바이트까지 늘려야 합니다.

    • 메시지의 각 메시지 조각은 MessageBox 데이터베이스에 대해 하나 이상의 SQL Server 데이터베이스 잠금을 만듭니다. 잠금 수가 수십만 개를 초과할 경우 SQL Server에서 "잠금 초과" 오류를 생성하기 시작할 수 있습니다. 이 문제가 발생하면 큰 메시지 조각 크기를 늘려 MessageBox 데이터베이스에 대해 수행된 SQL Server 데이터베이스 잠금 수를 줄입니다.

  4. "잠금 초과" 오류가 발생할 경우 64비트 버전의 SQL Server에 MessageBox 데이터베이스를 두는 것을 고려하십시오. 64비트 버전의 SQL Server에서는 사용 가능한 잠금 수가 크게 증가합니다.

  5. BizTalk 그룹 속성 구성 페이지에 표시되는 큰 메시지 임계값 속성을 조정합니다.

    메시지 일괄 처리가 처리될 때 메시지 일괄 처리의 메모리 내 크기가 큰 메시지 임계값 에 지정된 바이트 수에 도달하면 처리된 메시지 일괄 처리의 일부가 메시지 일괄 처리의 나머지 부분이 처리되기 전에 MessageBox에 기록됩니다. 다음과 같이 이 작업은 MSDTC 트랜잭션의 컨텍스트에서 수행됩니다.

    1. 메시지 묶음이 기존 MSDTC 트랜잭션의 컨텍스트에서 게시될 경우 메시지 묶음의 처리된 부분을 MessageBox에 기록할 때 이 트랜잭션이 사용됩니다. 예를 들어 트랜잭션이 필요하도록 구성된 트랜잭션 어댑터에 의해 들어오는 메시지 묶음이 게시될 경우 메시지 묶음의 처리된 부분을 MessageBox에 기록할 때 기존 트랜잭션이 사용됩니다.

    2. 기존 MSDTC 트랜잭션의 컨텍스트에서 메시지 묶음이 게시되지 않을 경우 메시지 묶음의 일부를 MessageBox에 기록하려면 새 MSDTC 트랜잭션을 만들어야 합니다. MSDTC 트랜잭션은 지정된 메시지 묶음의 모든 부분이 MessageBox 데이터베이스에 성공적으로 기록되도록 하는 데 사용됩니다.

      큰 메시지 임계값 설정은 메시지 일괄 처리에 직접 적용할 수 있지만 메시지 일괄 처리를 하나의 값으로 설정할 수 있으므로 큰 메시지 임계값 설정은 개별 메시지에 간접적으로 적용할 수도 있습니다. 예를 들어 한 메시지의 메시지 일괄 처리가 지정된 큰 메시지 임계값 매개 변수를 초과하는 경우 실제로 큰 메시지 임계값 은 일괄 처리의 단일 메시지에만 적용됩니다.

    • 메시지 일괄 처리를 MessageBox에 할당하는 데 사용되는 MSDTC 트랜잭션 생성을 완화하도록 큰 메시지 임계값 매개 변수를 조정해야 합니다. 성능상의 관점에서 보면 MSDTC 트랜잭션을 과도하게 사용하는 데 드는 비용이 크기 때문에 이 작업을 수행해야 합니다. 다음 계산을 사용하여 MSDTC 트랜잭션을 불필요하게 만들지 않도록 큰 메시지 임계값 설정의 최소값을 결정합니다.

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

      메시지 일괄 처리의 총 크기(바이트)가 큰 메시지 임계값 에 대해 지정된 값을 초과하지 않는 한 BizTalk는 메시지 일괄 처리를 MessageBox 데이터베이스에 할당하기 위해 MSDTC 트랜잭션을 시작할 필요가 없습니다.