다음을 통해 공유


이벤트 컬렉션 대량 복사 인터페이스

AppFabric은 대량의 이벤트 데이터를 모니터링 저장소에 기록할 때 더 나은 성능을 제공하는 SQL Server의 기본 대량 복사 공급자를 제공합니다. 그러나 이벤트 모니터링 데이터를 SQL Server가 아닌 저장소에 저장하려 할 수도 있습니다. 이 경우에는 데이터베이스별 대량 복사 공급자를 개발하여 SQL Server가 아닌 저장소에 대한 이벤트 데이터의 대량 복사를 지원해야 합니다. 특정 데이터 저장소에 적합한 대량 복사 플러그 인이 등록되어 있지 않은 경우 이벤트 컬렉션 서비스는 ADO.NET 일괄 삽입 모드로 돌아가서 이벤트를 모니터링 저장소에 기록합니다.

데이터베이스별 대량 복사 공급자를 만들기 위해 .NET Framework 4 개체 클래스는 대량 복사 공급자 기능의 일부로 Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy 인터페이스를 구현합니다. 그러면 사용자는 루트 Web.config 파일에 공급자를 등록합니다. 대량 복사 공급자를 등록하면 이벤트 컬렉션 서비스는 이벤트를 저장소에 기록해야 할 때 공급자의 IBulkCopy 인터페이스를 호출합니다. 이벤트 컬렉션 서비스만 이 인터페이스에 프로그래밍 방식으로 액세스할 수 있습니다. 이 인터페이스가 호출되면 대량 복사 공급자는 대량의 캐시된 이벤트 데이터를 ETW(Windows용 이벤트 추적) 세션에서 모니터링 저장소로 전송합니다.

대량 복사 공급자 구성

다음 예제는 AppFabric에서 제공하는 기본 SQL Server 대량 복사 공급자인 System.Data.SqlClient를 이벤트 컬렉션 서비스에 등록하는 방법을 보여 줍니다. 데이터베이스별 대량 복사 공급자를 등록하는 방법도 이와 유사합니다.

<microsoft.applicationServer>
  <monitoring lockElements="bulkCopyProviders, collectors">
    <bulkCopyProviders>
        <bulkCopyProvider providerName="System.Data.SqlClient" type="Microsoft.ApplicationServer.Monitoring.EventCollector.SqlServerBulkCopy, Microsoft.ApplicationServer.Monitoring, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </bulkCopyProviders>
    <collectors>
        <collector name="" session="0">
        <settings retryCount="10" eventBufferSize="10000" retryWait="00:00:15" maxWriteDelay="00:00:05" />
        </collector>
    </collectors>
    <default enabled="true" connectionStringName="DefaultMonitoringConnectionString" monitoringLevel="HealthMonitoring" />
  </monitoring>
</microsoft.applicationServer>
    
<connectionStrings>
    <add connectionString="Data Source=localhost;Initial Catalog=ApplicationServerMonitoring;Integrated Security=True" name="DefaultPersistenceConnectionString" providerName="System.Data.SqlClient" />
    <add connectionString="Data Source=localhost;Initial Catalog=ApplicationServerMonitoring;Integrated Security=True" name="DefaultMonitoringConnectionString" providerName="System.Data.SqlClient" />
</connectionStrings>

Microsoft.ApplicationServer.Monitoring.EventCollector.SqlServerBulkCopyIBulkCopy 인터페이스를 구현하는 공급자 클래스의 유형입니다. 대량 복사 작업은 다음 조건 중 하나가 충족될 때 수행됩니다.

  • 이벤트 컬렉션 서비스 이벤트 버퍼의 이벤트 수가 eventBufferSize 특성을 초과합니다. 이 예제에서는 이벤트 제한 10,000에 도달할 경우 기록하도록 설정되어 있습니다.

  • maxWriteDelay 특성에서 시간 간격이 만료되었습니다. 이 예제에서는 5초마다 기록하도록 설정되어 있습니다.

이벤트 컬렉션 서비스 및 대량 복사 공급자를 구성하는 방법에 대한 자세한 내용은 이벤트 컬렉션 서비스 구성을 참조하십시오.

Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy(인터페이스)

다음은 IBulkCopy 인터페이스에 대한 정의입니다. 데이터베이스별 공급자 클래스를 사용하여 이벤트 데이터를 기록하는 데이터베이스별 작업을 처리하려면 WriteServer 메서드를 구현합니다.

Namespace: Microsoft.ApplicationServer.Monitoring.EventCollector
namespace Microsoft.ApplicationServer.Monitoring.EventCollector
{
    using System;
    using System.Data;
    using System.Data.Common;


    public interface IBulkCopy
    {
        //Number of rows in each batch. At the end of each batch, the rows in the batch are written to store
        int BatchSize { get; set; }
      
        //The destination table name in the store to write the rows
        string DestinationTableName { get; set; }

        //The database connection to the store to which the rows are written
        DbConnection Connection { get; set; }

        //Copies all rows from the supplied IDataReader to the destination table specified by the DestinationTableName property, on the store specified by the Connection property
        void WriteToServer(IDataReader dataReader);
    }
}

DataTable 클래스에 대한 자세한 내용은 DataTable 클래스(https://go.microsoft.com/fwlink/?LinkId=168571)를 참조하십시오.

  2011-12-05