Интерфейс массового копирования сбора событий
AppFabric предоставляет поставщика массового копирования по умолчанию для SQL Server, который обеспечивает лучшую производительность при записи больших объемов данных событий в хранилище данных наблюдения. Однако возможно сохранение данных наблюдения за событиями в хранилище, отличном от хранилища SQL Server. В этом случае потребуется разработать поставщика массового копирования для конкретной базы данных, поддерживающего массовое копирование данных событий в хранилище, отличное от хранилища SQL Server. Если подходящий подключаемый модуль массового копирования не зарегистрирован для конкретного хранилища данных, то Служба сбора событий возвращается в режим пакетной вставки ADO.NET для записи событий в хранилище данных наблюдения.
Чтобы создать поставщика массового копирования для конкретной базы данных, класс объектов Платформа .NET Framework 4 реализует интерфейс Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy
как часть функциональности поставщика массового копирования. Затем этого поставщика следует зарегистрировать в корневом файле Web.config. Регистрация поставщика массового копирования указывает Служба сбора событий вызывать интерфейс IBulkCopy поставщика, когда потребуется записать события в хранилище. Только Служба сбора событий имеет программный доступ к этому интерфейсу. Когда эта служба вызывается, поставщик массовых копий передает большие объемы кэшированных данных событий из сеанса трассировки событий Windows (ETW) в хранилище данных наблюдения.
Настройка поставщика массового копирования
Далее приводится пример регистрации поставщика массового копирования SQL Server по умолчанию, System.Data.SqlClient
, предоставляемого AppFabric, с помощью Служба сбора событий. Поставщика массового копирования для конкретной базы данных можно регистрировать аналогично.
<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
– это тип класса поставщика, который реализует интерфейс IBulkCopy. Операция массового копирования вызывается при выполнении одного из следующих условий.
Количество событий в буфере событий Служба сбора событий превысило значение, заданное в атрибуте
eventBufferSize
. В данном примере установлено, что запись следует начинать, когда будет достигнуто ограничение в 10000 событий.Интервал времени, заданный в атрибуте
maxWriteDelay
, истек. В данном примере установлено значение 5 секунд.
Дополнительные сведения о настройке Служба сбора событий и поставщика массового копирования см. в разделе Настройка службы сбора событий.
Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy (Interface)
Это определение интерфейса 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).
2012-03-05