Výkon je pomalý, pokud tabulka bázi asynchronních operací se stane příliš velký v aplikaci Microsoft Dynamics CRM

Příznaky

Při spuštění aplikace Microsoft Dynamics CRM 4.0, klienta Microsoft Dynamics CRM 2011, Microsoft Dynamics CRM 2013 nebo Microsoft Dynamics CRM 2015 tabulka bázi asynchronních operací roste velmi velké. Výkon je pomalý, pokud tabulka obsahuje milióny záznamů.

Chyby, které se podobají následující jsou zaznamenána v protokolu událostí aplikace na serveru se systémem Microsoft Dynamics CRM:
Typ události: Chyba

Zdroj události: MSCRMDeletionService

Kategorie události: žádný

ID události: 16387

Datum: 2009/01/26

Čas: 11:41:54 dop.

Uživatel: N/A

Počítač: CRMSERVER

Popis: Chyba: službě odstranění se nepodařilo vyčistit tabulku = CleanupInactiveWorkflowAssembliesProcedure Další informace naleznete v tématu nápovědy a odborné pomoci na http://go.microsoft.com/fwlink/events.asp.

Řešení

Chcete-li vyřešit tento problém, proveďte vyčištění bázi asynchronních operací tabulky spuštěním následujícího skriptu v databázi< název_organizace >_MSCRM, kde zástupný symbol< název_organizace > představuje skutečný název organizace.

Upozornění: Před čištěním dat Uvědomte si, že dokončené systémové úlohy mají obchodní hodnoty v některých případech a musí být uložena po dlouhou dobu. Proto je by diskutovat to s pracovníky vaší organizace správy nejprve.

Systémových úloh, které se týkají:
  • Shromažďování dat technologie SQM. Metriky kvality softwaru shromažďuje data pro program zkušeností zákazníků.
  • Úloha aktualizace smlouvy státy SQL. Tato úloha spouští jednou denně o půlnoci. Tato úloha nastaví stav neplatné smlouvy s ukončenou platností.
  • Organizace Index fulltextového katalogu. Naplní fulltextového indexu v databázi pro hledání článků znalostní báze Microsoft Knowledge Base v aplikaci CRM.

Opakované úlohy byly zrušeny, budou odebrány.

Poznámky
  • Pro aplikaci Microsoft Dynamics CRM Skript SQL v tomto článku znalostní báze Knowledge Base je pouze jednorázový úsilí. Můžete použít jako úlohu SQL ke spuštění na základě opakované noční, týdenní nebo měsíční. Při spuštění aplikace CRM, je nutné použít tento článek týdně, v závislosti na potřebách podniku nebo použít řešení napsáním vlastní úlohy HROMADNÉHO odstranění. (Viz naše CRM SDK dokumentaci o vlastnost BulkDeleteRequest.QuerySet třídy BulkDeleteRequest a provedl odstranění)
  • Ujistěte se, že budou odstraněny záznamy AsyncOperation pro pracovní postupy a odpovídající záznamy z objektu WorkflowLogBase .

  • Ujistěte se, že budou odstraněny všechny odpovídající chybou hromadného odstranění a operaci hromadného odstranění záznamů.

  • Ujistěte se, že pouze následující typy asynchronní operace budou odstraněny, pokud je kód stavu typy 3 a kód stavu typy je 30 nebo 32:
    • Workflow rozšiřující úloh (1)
    • Shromažďování dat technologie SQM (9)
    • PersistMatchCode (12)
    • FullTextCatalogIndex (25)
    • UpdateContractStates (27)
    • Pracovní postup (10)
IF EXISTS (SELECT name from sys.indexesWHERE 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

while(1=1)
begin
declare @DeleteRowCount int = 10000
declare @rowsAffected int
declare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null primary key)
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 @rowsAffected = @@rowcount
delete poa from PrincipalObjectAccess poa
join WorkflowLogBase wlb on
poa.ObjectId = wlb.WorkflowLogId
join @DeletedAsyncRowsTable dart on
wlb.AsyncOperationId = dart.AsyncOperationId
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 BulkDeleteOperationBase From BulkDeleteOperationBase O, @DeletedAsyncRowsTable d
where
O.AsyncOperationId = d.AsyncOperationId
delete WorkflowWaitSubscriptionBase from WorkflowWaitSubscriptionBase WS, @DeletedAsyncRowsTable d
where
WS.AsyncOperationId = d.AsyncOperationID
delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable d
where
A.AsyncOperationId = d.AsyncOperationId
/*If not calling from a SQL job, use the WAITFOR DELAY*/
if(@DeleteRowCount > @rowsAffected)
return
else
WAITFOR DELAY '00:00:02.000'
end


Zlepšení výkonu odstranění skriptu

  • Chcete-li zlepšit celkový výkon aplikace Microsoft Dynamics CRM, naplánujte službu Microsoft Dynamics CRM odstranění spustit špičku pro aplikaci Microsoft Dynamics CRM. Ve výchozím nastavení je služba spuštěna v době, která byla nainstalována aplikace Microsoft Dynamics CRM. Však můžete nastavit službu v 10:00 hodin místo na výchozí čas spuštění. To provedete pomocí editoru Microsoft Dynamics CRM ScaleGroup úlohy. Další informace naleznete na následujícím webu CodePlex:Poznámky
    1. Tato akce neovlivní přímo provádění skriptu.
    2. Editor projektu pro aplikaci Microsoft Dynamics CRM 4.0 byl depecrated a již není k dispozici.
  • Zlepšení výkonu odstranění skripty v tomto článku a zlepšení odstranění služba aplikace Microsoft CRM kód, který běží podobné odstranění, přidejte následující tři indexy Názevorganizace_mscrm databáze před spuštěním skriptu odstranění v tomto článku:
    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

    Poznámka: Pokud není přidat tyto indexy, odstranění skriptu může trvat hodiny spustit.

  • Zastavte službu Microsoft Dynamics CRM asynchronní zpracování při spuštění tohoto skriptu.
  • Volitelná Následující indexy znovu vytvořit a aktualizovat statistické údaje:
    -- 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
  • Volitelná Aktualizovat statistiky úplné prohledávání na všechny tabulky, které se zabývá tento dotaz pomocí následujících příkazů (přednostně při vypnutí špičky):
    UPDATE STATISTICS [dbo].[AsyncOperationBase] WITH FULLSCANUPDATE 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
  • Volitelná Změňte model obnovení databáze MSCRM jednoduché, aby se zabránilo nadměrné generování protokolů Microsoft SQL Server. Pro SQL Server 2005, Microsoft SQL Server Management Studio jako správce, přihlaste se < org_name > _MSCRM databáze klepněte pravým tlačítkem myši, klepněte na příkaz Vlastnosti, klepněte na příkaz Možnostia klepněte na Model obnovení. Označit Simplea potom klepněte na tlačítko OK. Po prvním spuštění tohoto skriptu < org_name > model obnovení databáze _MSCRM by měly přepnout zpět do celé pro nejlepší model obnovitelnost data.
  • Pro zvýšení výkonu skriptu, lze snížit hodnotu 10 000 @DeleteRowCount


Chcete-li určit počet záznamů, které mají být odstraněny skriptem v tomto článku, spusťte následující skript počet Názevorganizace_mscrm databázi:
Select Count(AsyncOperationId)from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3 AND StatusCode IN (30,32)

Chyba skriptu

Při spuštění skriptu vyčištění, může se zobrazit chybová zpráva podobná následující:

Příkaz DELETE konfliktu s omezením odkaz "asyncoperation_workflowwaitsubscription". Konflikt došlo v databázi "Contoso_MSCRM" tabulky "dbo. WorkflowWaitSubscriptionBase", sloupec"AsyncOperationId". Příkaz byl ukončen.


Pokud se zobrazí tato chybová zpráva, vyčištění skript zastavit a potom postupujte podle následujících kroků odeberte zbývající WorkflowWaitSubscription záznamy, které existují pro dokončené nebo zrušené pracovní postupy. Tyto záznamy by neměly existovat, protože by byly odstraněny při pracovní postupy byly splněny, nebo zrušena. Byste neměli vidět všechny záznamy, které jsou vráceny z dotazu. Nic v tabulce WorkflowWaitSubscriptionBase, který se zobrazí v tomto dotazu je osiřelých záznamů. Tyto záznamy prostřednictvím uživatelského rozhraní nelze odstranit, protože aplikace Microsoft CRM asynchronní proces je ve stavu dokončené nebo zrušené.

Následující skript ověří, kolik osiřelých záznamů WorkflowWaitSubscriptionBase pro pracovní postup dokončené a zrušené záznamy existují:

select count(*) from workflowwaitsubscriptionbase WITH (NOLOCK) 
where asyncoperationid in

(Select asyncoperationid from AsyncOperationBase WITH (NOLOCK)

where OperationType in (1, 9, 12, 25, 27, 10)

AND StateCode = 3 AND StatusCode IN (30,32))

Následující skript odstraní záznamy WorkflowWaitSubscriptionBase izolované WorkflowWaitSubscriptionBase záznamů pro pracovní postup dokončené a zrušené záznamy:

delete from workflowwaitsubscriptionbase where asyncoperationid in(Select asyncoperationidfrom AsyncOperationBase
where OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3 AND StatusCode IN (30,32))
Po provedení tohoto příkazu Odstranit skript vyčištění bázi asynchronních operací a pracovní postup úspěšně dokončena.



Další informace

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
954929 entity AsyncOperation spotřebovává významnou část databáze _MSCRM [společnost] a způsobuje snížení výkonu v aplikaci Microsoft Dynamics CRM
957871 záznamy úkolu pracovního postupu rozšiřující způsobit bázi asynchronních operací tabulky v databázi MSCRM růst příliš velký v aplikaci Microsoft Dynamics CRM 4.0
Pro další informace o terminologii používané v aktualizacích softwaru, klepněte na následující číslo článku k zobrazení článku v databázi Microsoft Knowledge Base:
824684 Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft
Další informace o aplikaci Microsoft Business Solutions CRM software aktualizace a opravy hotfix balíček terminologie klepnutím na následující číslo článku databáze Microsoft Knowledge Base:

887283 aktualizace a opravy hotfix aplikace Microsoft Business Solutions CRM software balíček standardy používání názvů

Vlastnosti

ID článku: 968520 - Poslední kontrola: 13. 1. 2017 - Revize: 2

Microsoft Dynamics CRM 4.0, Microsoft Dynamics CRM 2011, Microsoft Dynamics CRM 2013, Microsoft Dynamics CRM 2015

Váš názor