Interfaccia di copia bulk di Raccolta eventi

AppFabric fornisce un provider di copia bulk predefinito per SQL Server in grado di migliorare le prestazioni quando si scrivono grandi quantità di dati eventi nell'archivio di monitoraggio. Tuttavia, è possibile che i dati di monitoraggio degli eventi vengano archiviati in un archivio non SQL Server. In questo caso, sarà necessario sviluppare un provider di copia bulk specifico per il database per supportare la copia bulk di dati eventi nell'archivio non SQL Server in uso. Se per uno specifico archivio dati non è stato registrato un plugin di copia bulk idoneo, Servizio di raccolta eventi ritorna alla modalità di inserimento batch di ADO.NET per scrivere gli eventi nell'archivio di monitoraggio.

Per creare un provider di copia bulk specifico per il database, la classe di oggetti .NET Framework 4 implementa l'interfaccia Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy come parte della funzionalità del provider di copia bulk. A questo punto il provider viene registrato nel file di configurazione radice Web.config. La registrazione del provider di copia bulk comunica a Servizio di raccolta eventi di richiamare l'interfacciaIBulkCopy del provider quando è necessario scrivere eventi nell'archivio. Solo Servizio di raccolta eventi è in grado di accedere a questa interfaccia a livello di programmazione. Quando richiamato, il provider di copia bulk trasferisce grandi quantità di dati evento memorizzati nella cache da una sessione di Event Tracing for Windows (ETW) all'archivio monitoraggio.

Configurazione di un provider di copia bulk

Di seguito viene fornito un esempio di come un provider di copia bulk SQL Server predefinito, System.Data.SqlClient, fornito da AppFabric, viene registrato con Servizio di raccolta eventi. La registrazione del provider di copia bulk specifico del database verrà eseguita in modo simile.

<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.SqlServerBulkCopy è il tipo di classe di provider che implementa l'interfaccia IBulkCopy. L'operazione di copia bulk si verifica quando viene soddisfatta una delle seguenti condizioni:

  • Il numero di eventi nel buffer degli eventi di Servizio di raccolta eventi supera l'attributo eventBufferSize. In questo esempio, è impostato per la scrittura quando viene raggiunto il limite di 10.000 eventi.

  • L'intervallo di tempo dell'attributo maxWriteDelay è scaduto. In questo esempio, è impostato per la scrittura ogni 5 secondi.

Per ulteriori informazioni sulla configurazione di Servizio di raccolta eventi e di un a provider di copia bulk, fare riferimento a Configurare il servizio Raccolta eventi.

Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy (interfaccia)

Di seguito viene fornita una definizione dell'interfaccia IBulkCopy. Il metodo WriteServer viene implementato per gestire l'attività specifica del database di scrittura dei dati eventi tramite la classe di provider specifica del database.

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);
    }
}

Per ulteriori informazioni sulla classe DataTable, vedere Classe DataTable (https://go.microsoft.com/fwlink/?LinkId=168571).

  2011-12-05