Mittwoch, 16. Februar 2011

Die Leistung ist schlecht/langsam, wenn die Microsoft Dynamics CRM 4.0 Tabelle "AsyncOperationBase" zu groß wird

Problembeschreibung
Wenn Sie Microsoft Dynamics CRM 4.0 ausführen, wächst die AsyncOperationBase-Tabelle sehr groß. Wenn die Tabelle mit Millionen von Datensätzen enthält, ist Leistung langsam.

Darüber hinaus sind Fehler, die etwa wie folgt auf dem Microsoft CRM-Server in das Ereignisprotokoll der Anwendung protokolliert:

Ereignistyp: Fehler
Ereignisquelle: MSCRMDeletionService
Ereigniskategorie: Keine
Ereignis-ID: 16387
Datum: 2009/01/26
Zeit: 11:41:54 AM
Benutzer: NV
Computer: CRMSERVER
Beschreibung: Fehler: Fehler löschen beim Bereinigen Tabelle = CleanupInactiveWorkflowAssembliesProcedure Weitere Informationen finden Sie im Hilfe- und Supportcenter
http://go.Microsoft.com/fwlink/events.ASP.s.asp.
Lösung
Führen Sie die Bereinigung der AsyncOperationBase-Tabelle um dieses Problem zu beheben, indem Sie das folgende Skript gegen die <OrgName> MSCRM-Datenbank, in dem <orgname> ein Platzhalter für den tatsächlichen Namen Ihrer Organisation ist.

Warnung: , bevor die Daten Bitte Hinweis aufräumen, die System abgeschlossen Aufträge Geschäftswert in einigen Fällen und müssen für einen langen Zeitraum gespeichert werden, also bitte zuerst mit Verwaltung Mitarbeiter Ihrer Organisation besprechen.

System-Projekte betroffen:

  • SQM-Datensammlung. -Software Quality Metrics, die Daten für den Debitor sammelt auftreten Programm.
  • SQL-Auftrag Update Contract States. Diese Auftrag werden einmal pro Tag um Mitternacht ausgeführt. Diese Auftrag legt die abgelaufene Verträge auf einen Zustand der abgelaufen.
  • Organisation Full Text Katalogfeldindex - füllt Volltextindex in Db kb-Artikeln in CRM durchsucht.

Wenn wiederkehrende Aufträge abgebrochen haben, werden Sie entfernt.

Notizen

  • Das SQL-Skript in diesem KB-Artikel ist nur einmal Aufwand. Sie können dies als eine SQL-Auftrag auf Grundlage entweder über Nacht, wöchentlich oder monatlich wiederholt ausführen hinzufügen. wie Ihre CRM-ausgeführt , , Sie müssen diesem KB-Artikel auf wöchentlich abhängig von Ihrem Unternehmen anwenden muss oder anwenden die Lösung von Writting benutzerdefinierte BULK DELETE Aufträge (Bitte finden Sie in unserem CRM SDK-Dokumentation auf der BulkDeleteRequest.QuerySet-Eigenschaft, BulkDeleteRequest-Klasse und Reihenfolge der löschen).
  • Stellen Sie sicher, dass die AsyncOperation-Datensätze für Workflows und die entsprechenden Datensätze aus dem WorkflowLogBase -Objekt gelöscht werden.
  • Stellen Sie sicher, dass alle entsprechenden Bulkdeletefailure Datensätze gelöscht sind.
  • Stellen Sie sicher, dass nur die folgenden asynchronen Operation Typen gelöscht werden, wenn das Bundesland der Typen 3 ist und der Statuscode der Typen 30 oder 32 ist:
    • Workflow Erweiterung Vorgang (1)
    • SQM-Datensammlung (9)
    • PersistMatchCode (12)
    • FullTextCatalogIndex (25)
    • UpdateContractStates (27)
    • Workflow (10)

IF EXISTS (SELECT name from sys.indexes
                  WHERE name = N'CRM_AsyncOperation_CleanupCompleted')
      DROP Index AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted
GO
CREATE NONCLUSTERED INDEX CRM_AsyncOperation_CleanupCompleted
ON [dbo].[AsyncOperationBase] ([StatusCode],[StateCode],[OperationType])
GO

declare @DeleteRowCount int
Select @DeleteRowCount = 2000
declare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null primary key)
declare @continue int, @rowCount int
select @continue = 1
while (@continue = 1)
begin
      begin tran
      insert into @DeletedAsyncRowsTable(AsyncOperationId)
      Select top (@DeleteRowCount) AsyncOperationId
      from AsyncOperationBase
      where OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode in (30, 32)     
 
      Select @rowCount = 0
      Select @rowCount = count(*) from @DeletedAsyncRowsTable
      select @continue = case when @rowCount <= 0 then 0 else 1 end     
 
        if (@continue = 1)
        begin
            delete WorkflowLogBase from WorkflowLogBase W, @DeletedAsyncRowsTable d
            where W.AsyncOperationId = d.AsyncOperationId
            
delete BulkDeleteFailureBase From BulkDeleteFailureBase B, @DeletedAsyncRowsTable d
            where B.AsyncOperationId = d.AsyncOperationId
 
            delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable d
            where A.AsyncOperationId = d.AsyncOperationId            
 
            delete @DeletedAsyncRowsTable
      end
 
      commit
end

--Drop the Index on AsyncOperationBase

DROP INDEX AsyncOperationBase.CRM_AsyncOperation_CleanupCompleted
 
 

Verbesserung der Leistung des Skripts löschen

  • Um Microsoft CRM-Gesamtleistung zu verbessern, Planen Sie die Microsoft CRM-Löschdienst während der Spitzenzeiten für Microsoft CRM ausgeführt. Standardmäßig wird der Dienst zum Zeitpunkt von Microsoft CRM Installation ausgeführt. Allerdings können Sie das Ausführen um 10: 00 Uhr statt die Standardeinstellung zum Zeitpunkt des Dienstes ausführen. Verwenden Sie den Auftrag von Microsoft CRM ScaleGroup-Editor, um dies durchzuführen. Weitere Informationen der folgenden MSDN-Website:
    http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676 (http://code.msdn.microsoft.com/ScaleGroupJobEditor/Release/ProjectReleases.aspx?ReleaseId=676)
    Hinweis: Diese Aktion wirkt sich die Leistung des Skripts nicht direkt.
  • Zur Verbesserung der Leistung der löschen-Skripts in diesem Artikel den Microsoft CRM DeletionService Code zu verbessern, die ähnliche Löschvorgänge ausgeführt wird hinzufügen und, die folgenden three Indizes Organisationsname_mscrm-Datenbank, bevor Sie das Skript löschen in diesem Artikel ausführen:

    CREATE NONCLUSTERED INDEX CRM_WorkflowLog_AsyncOperationID ON [dbo].[WorkflowLogBase] ([AsyncOperationID])
    GO 
    
    CREATE NONCLUSTERED INDEX CRM_DuplicateRecord_AsyncOperationID ON [dbo].[DuplicateRecordBase] ([AsyncOperationID])
    GO
    
    CREATE NONCLUSTERED INDEX CRM_BulkDeleteOperation_AsyncOperationID ON [dbo].[BulkDeleteOperationBase]
    (AsyncOperationID)
    GO
    
    Hinweis Wenn Sie nicht diese Indizes hinzufügen, löschen-Skript kann zum Ausführen Stunden dauern.
  • Beenden Sie den Microsoft CRM Asynchronous Processing Dienst während Sie dieses Skript ausführen.
  • OPTIONAL: Wiederherstellen die folgenden Indizes und Statistiken aktualisieren:

    -- Rebuild Indexes & Update Statistics on AsyncOperationBase Table 
    ALTER INDEX ALL ON AsyncOperationBase REBUILD WITH (FILLFACTOR = 80, ONLINE = OFF,SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF)
    GO 
    -- Rebuild Indexes & Update Statistics on WorkflowLogBase Table 
    ALTER INDEX ALL ON WorkflowLogBase REBUILD WITH (FILLFACTOR = 80, ONLINE = OFF,SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF)
    
    GO
  • OPTIONAL: Aktualisieren der Statistiken mit vollständige Überprüfung auf alle mit dieser Abfrage beteiligten Tabellen die unten Befehle (vorzugsweise an Spitzenzeiten deaktivieren):

    UPDATE STATISTICS [dbo].[AsyncOperationBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[DuplicateRecordBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[BulkDeleteOperationBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[WorkflowCompletedScopeBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[WorkflowLogBase] WITH FULLSCAN
    UPDATE STATISTICS [dbo].[WorkflowWaitSubscriptionBase] WITH FULLSCAN
  • OPTIONAL : ändern, die MSCRM-Datenbank-Wiederherstellungsmodell Simple um überflüssige Generierung von SQL Server-Protokollen zu vermeiden. Für SQL Server 2005, Benutzername, der Microsoft SQL Server Management Studio als Administrator an, klicken Sie nach rechts Ihre <org_name> MSCRM-Datenbank, Eigenschaften , klicken Sie auf Optionen , und klicken Sie dann auf Wiederherstellungsmodell . Markieren Sie einfach und klicken Sie auf OK . nach dem Ausführen dieses Skripts der Anfangsdauer sollte das <org_name> MSCRM-Datenbank-Wiederherstellungsmodell an FULL für das beste Daten Wiederherstellbarkeit Modell umgestellt werden.
Um die Anzahl der Datensätze durch das Skript in diesem Artikel gelöscht werden, zu bestimmen, führen Sie das folgenden Count Skript gegen die Datenbank Organisationsname_mscrm:
Select Count(AsyncOperationId)
from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10) 
AND StateCode = 3 AND StatusCode IN (30,32) 
 
Quelle: http://support.microsoft.com/kb/968520
 
Weitere Informationen
 
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base: 
954929  (http://support.microsoft.com/kb/954929/ ) Die Entität AsyncOperation nutzt einen bedeutenden Teil der Datenbank _MSCRM [Organisation] und bewirkt, dass eine schlechte Leistung in Microsoft Dynamics CRM
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
957871  (http://support.microsoft.com/kb/957871/ ) Die Erweiterung Workflowaufgabe Datensätze führen die AsyncOperationBase-Tabelle in der MSCRM-Datenbank in Microsoft Dynamics CRM 4.0 zu groß
Weitere Informationen zur Terminologie für Softwareupdates finden Sie im folgenden Artikel der Microsoft Knowledge Base:
824684  (http://support.microsoft.com/kb/824684/LN/ ) Erläuterung von Standardbegriffen bei Microsoft Softwareupdates
Weitere Informationen zur Microsoft Business Solutions CRM Software Update und Hotfix-Paket Terminologie finden Sie im folgenden Artikel der Microsoft Knowledge Base:
887283  (http://support.microsoft.com/kb/887283/ ) Microsoft Business Solutions CRM-Softwarehotfix und Update Packen Namensstandards

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Free Samples By Mail