分享方式:


事件收集大量複製介面

AppFabric 為 SQL Server 提供預設的大量複製提供者,在將大量事件資料寫入監控儲存區時,可提供較佳的效能。但是,您可能會在非 SQL Server 儲存區中儲存事件監控資料。在此情況下,您需要開發資料庫的專屬大量複製提供者,以支援將事件資料大量複製到非 SQL Server 儲存區。若尚未註冊適當的大量複製外掛程式以用於特定資料儲存區,「事件收集」服務 會還原成 ADO.NET 批次插入模式,以將事件寫入監控儲存區。

為建立資料庫的專屬大量複製提供者,您的 .NET Framework 4 物件類別須實作 Microsoft.ApplicationServer.Monitoring.EventCollector.IBulkCopy 介面,做為大量複製提供者功能的一部分。接著,您必須在根 Web.config 檔案中註冊該提供者。註冊大量複製提供者以告知 「事件收集」服務 在需要將事件寫入儲存區時,叫用提供者的 IBulkCopy 介面。只有 「事件收集」服務 能利用程式設計方式來存取此介面。此介面被叫用時,大量複製提供者會將從「Windows 事件追蹤」(ETW) 工作階段快取的大量事件資料傳輸到監控儲存區。

設定大量複製提供者

下列範例說明如何向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.SqlServerBulkCopy 是實作 IBulkCopy 介面的提供者類別類型。符合下列任一條件時,即會進行大量複製操作:

  • 「事件收集」服務事件緩衝區中的事件數目超過 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) (可能為英文網頁)。

  2012-03-05