Jõudlus on aeglane, kui tabel AsyncOperationBase muutub Microsoft Dynamics CRM liiga suureks

Rakenduskoht
Dynamics CRM 4.0 Microsoft Dynamics CRM 2011 Dynamics CRM 2013 Dynamics CRM 2015

Sümptomid

Kui käivitate Microsoft Dynamics CRM 4.0, Microsoft Dynamics CRM 2011, Microsoft Dynamics CRM 2013 või Microsoft Dynamics CRM 2015, kasvab tabel AsyncOperationBase väga suureks. Kui tabel sisaldab miljoneid kirjeid, on jõudlus aeglane.

Lisaks logitakse rakenduse sündmuselogis serveris, kus töötab Microsoft Dynamics CRM tõrked, mis sarnanevad järgmisega:

Märkus.

Sündmuse tüüp: tõrge

Sündmuse allikas: MSCRMDeletionService

Sündmuse kategooria: Pole

Sündmuse ID: 16387

Kuupäev: 2009/01/26

Aeg: 11:41:54

Kasutaja: pole

Arvuti: CRMSERVER

Kirjeldus: Tõrge: kustutusteenus ei saanud tabelit puhastada=CleanupInactiveWorkflowAssembliesProcedure Lisateabe saamiseks lugege http://go.microsoft.com/fwlink/events.asp spikri- ja tugikeskust.

Lahendus

Selle probleemi lahendamiseks puhastage tabel AsyncOperationBase, käivitades järgmise skripti andmebaasi**<OrgName>_MSCRM suhtes, kus kohatäide<OrgName>** tähistab teie ettevõtte tegelikku nime.

Hoiatus. Enne andmete puhastamist arvestage, et lõpetatud süsteemitöödel on mõnel juhul äriline väärtus ja neid tuleb talletada pika aja jooksul. Seetõttu peaksite seda kõigepealt arutama oma ettevõtte administreerimispersonaliga.

Mõjutatud süsteemitööd:

  • SQM-i andmete kogumine. Tarkvarakvaliteedi mõõdikud koguvad andmeid kliendikogemuse programmi kohta.

  • Lepingu olekute värskendamise SQL-töö. See töö kestab üks kord päevas keskööl. See töö määrab aegunud lepingute olekuks Aegunud.

  • Organisatsiooni täistekstikataloogi indeks. Asustab crm-is Microsofti teabebaasi artiklite otsimiseks täistekstiindeksi db-st.

Kui korduvad tööd tühistati, eemaldatakse need.

Märkmed

  • Microsoft Dynamics CRM Selle teabebaasi artikli SQL-i skript on ainult ühekordne toimimine. Saate selle lisada SQL-tööna, et see töötaks korduval ööl, nädalas või kuus. CRM-i käitamisel peate artiklit rakendama kord nädalas, olenevalt oma ettevõtte vajadustest, või rakendama lahenduse, kirjutades kohandatud HULGIKUSTUTAMISE tööd. (Lugege meie CRM-i SDK dokumentatsiooni atribuudi BulkDeleteRequest.QuerySet, klassi BulkDeleteRequest ja kustutamise järjekorra kohta)

  • Veenduge, et töövoode AsyncOperation-kirjed ja vastavad kirjed kustutatakse objektist WorkflowLogBase.

  • Veenduge, et kõik vastavad hulgideletefailure- ja hulgidelegeerimiskirjed kustutatakse.

  • Veenduge, et kustutatakse ainult järgmised Asünkroonse toimingu tüübid, kui tüübi olekukood on 3 ja tüübi olekukood on 30 või 32.

    • Töövoo laiendamisülesanne (1)
    • SQM-i andmete kogumine (9)
    • PersistMatchCode (12)
    • FullTextCatalogIndex (25)
    • UpdateContractStates (27)
    • Töövoog (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

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

        
      

Kustutamisskripti jõudluse parandamine

  • Üldise Microsoft Dynamics CRM jõudluse parandamiseks ajastage Microsoft Dynamics CRM kustutamisteenus, et see töötaks Microsoft Dynamics CRM tipptunnivälisel ajal. Vaikimisi töötab teenus Microsoft Dynamics CRM installimise ajal. Siiski saate määrata, et teenus käivituks vaikeaja asemel kell 10.00. Selleks kasutage Microsoft Dynamics CRM ScaleGroupi tööredaktorit. Lisateabe saamiseks külastage järgmist CodePlexi veebisaiti:
    http://crmjobeditor.codeplex.com/ Märkmed

    1. See toiming ei mõjuta otseselt skripti jõudlust.
    2. Microsoft Dynamics CRM 4.0 tööredaktor on kasutuselt kõrvaldatud ja pole enam saadaval.
  • Selles artiklis leiduvate kustutusskriptide jõudluse parandamiseks ja sarnaste kustutamiste käivitamiseks Microsoft Dynamics CRM kustutamisteenuse koodi täiustamiseks lisage enne selles artiklis kustutamistskripti käivitamist OrganizationName_MSCRM andmebaasi järgmised kolm indeksit.

    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
    
    

    Märkus. Kui te neid indekse ei lisa, võib kustutusskripti käivitamiseks kuluda tunde.

  • Peatage selle skripti käitamise ajal Microsoft Dynamics CRM asünkroonse töötlemise teenus.

  • Soovi korral koostage uuesti järgmised indeksid ja värskendusstatistika:

    -- 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
    
  • Valikuline värskendusstatistika koos täieliku kontrolliga kõigis selle päringuga seotud tabelites, kasutades järgmisi käske (eelistatavalt tipptunnivälisel ajal):

    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
    
  • Valikuline. Microsofti SQL Server logide liigse loomise vältimiseks muutke MSCRM-andmebaasi taastemudel lihtsaks. Versioonis SQL Server 2005 logige sisse Microsofti SQL Server Management Studio administraatorina, paremklõpsake oma <org_name>_MSCRM andmebaasi, klõpsake käsku Atribuudid, nuppu Suvandid ja seejärel käsku Taastemudel. Märgi lihtmärgistus ja seejärel klõpsake nuppu OK. Pärast selle skripti esmakordset <käivitamist tuleks org_name>_MSCRM andmebaasitaastemudel parima andmetaastemudeli jaoks aktiveerida uuesti FULL.

  • Skripti @DeleteRowCount jõudluse suurendamiseks saab 10 000 väärtust vähendada

            
Selles artiklis skriptis kustutatavate kirjete arvu määramiseks käivitage OrganizationName_MSCRM andmebaasis järgmine loendusskript:


Select Count(AsyncOperationId)from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10) 
AND StateCode = 3 AND StatusCode IN (30,32) 

Skriptitõrge

Puhastusskripti käivitamisel võidakse kuvada tõrketeade, mis sarnaneb järgmisega:

Märkus.

Lause DELETE on vastuolus viitekitsendusega "asyncoperation_workflowwaitsubscription". Konflikt ilmnes andmebaasis "Contoso_MSCRM", tabelis "dbo". WorkflowWaitSubscriptionBase" – veerg AsyncOperationId. Lause on lõpetatud.

            
Kui kuvatakse see tõrketeade, peatage puhastusskript ja seejärel järgige neid juhiseid, et eemaldada ülejäänud TöövooWaitSubscriptioni kirjed, mis on lõpuleviidud või tühistatud töövoogude jaoks olemas. Neid kirjeid ei tohiks enam olemas olla, kuna need oleksid pidanud kustutama töövoogude lõpetamisel või tühistamisel. Sellest päringust tagastatud kirjeid ei tohiks kuvada. Kõik selles päringus kuvatavas tabelis WorkflowWaitSubscriptionBase on orbkirje. Neid kirjeid ei saa kasutajaliidese kaudu kustutada, kuna Microsoft CRM asünkroonne protsess on tühistatud või lõpule viidud olekus.

Järgmine skript kontrollib, mitu orb-workflowWaitSubscriptionBase'i kirjet on lõpuleviidud ja tühistatud töövookirjete jaoks olemas:

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

Järgmine skript kustutab workflowWaitSubscriptionBase'i kirjed luhtunud WorkflowWaitSubscriptionBase'i kirjete kohta lõpuleviidud ja tühistatud töövookirjete kohta:

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

Pärast selle kustutamislause käivitamist viiakse asyncoperationBase'i ja töövoo puhastusskript edukalt lõpule.

Veel teavet

Microsofti teabebaasi artiklite vaatamiseks klõpsake järgmisi artiklinumbreid.

954929 Olem AsyncOperation kasutab olulist osa andmebaasist [Org]_MSCRM ja põhjustab Microsoft Dynamics CRM

957871 Töövoo laiendamise toimingukirjed põhjustavad andmebaasi MSCRM tabeli AsyncOperationBase liiga suurenemise Microsoft Dynamics CRM 4.0 Tarkvaravärskenduse terminoloogia kohta lisateabe saamiseks klõpsake Microsofti teabebaasi artikli kuvamiseks järgmist artiklinumbrit:

824684 Microsofti tarkvaravärskenduste kirjeldamiseks kasutatava standardse terminoloogia kirjeldus.Lisateabe saamiseks Microsoft Business Solutions CRM-i tarkvara kiirparanduse ja värskenduspaketi terminoloogia kohta klõpsake Microsofti teabebaasi artikli vaatamiseks järgmist artiklinumbrit:

887283 Microsoft Business Solutions CRM-i tarkvara kiirparanduse ja värskenduspaketi nimetamisstandardid