Performanse su spore ako tabela AsyncOperationBase postane prevelika u softveru Microsoft Dynamics CRM

Simptomi

Kada pokrenete Microsoft Dynamics CRM 4.0, Microsoft Dynamics CRM 2011, Microsoft Dynamics CRM 2013 ili Microsoft Dynamics CRM 2015 tabela AsyncOperationBase postaje veoma velika. Kada tabela sadrži milione zapisa, performanse su spore. Pored toga, greške koje su slične sledećoj evidentiraju se u evidenciji događaja aplikacije na serveru na kojem je pokrenut Microsoft Dynamics CRM:

Tip događaja: ErrorEvent Izvor: MSCRMDeletionServiceEvent Category: NoneEvent ID: 16387Date: 2009/01/26Time: 11:41:54 AMUser: N/AComputer: CRMSERVERDescription: Greška: Usluga brisanja nije uspela da očisti tabelu=CleanupInactiveWorkflowAssembliesProcedure Za više informacija pogledajte Centar za pomoć i podršku na http://go.microsoft.com/fwlink/events.asp.

Rešenje

Da biste rešili ovaj problem, izvršite čišćenje tabele AsyncOperationBase pokretanjem sledeće skripte u odnosu na bazu podataka<OrgName>_MSCRM, gde čuvar mesta<OrgName> predstavlja stvarno ime vaše organizacije.Upozorenje Pre nego što očistite podatke, imajte na umu da dovršeni sistemski poslovi u nekim slučajevima imaju poslovnu vrednost i da moraju da se skladište na duži period. Zbog toga bi o tome prvo trebalo da razgovarate sa administrativnim osobljem vaše organizacije. Sistemski poslovi na koje to utiče:

  • Prikupljanje SQM podataka. Metrika kvaliteta softvera prikuplja podatke za program korisničkog iskustva.

  • Ažuriraj SQL posao stanja ugovora. Ovaj posao traje jednom dnevno u ponoć. Ovaj posao postavlja istekle ugovore na stanje u kojem je istekao rok važenja.

  • Indeks kataloga celog teksta organizacije. Popunjava ceo indeks teksta u db za pretraživanje članaka Microsoft baze znanja u CRM-u.

Ako su periodični poslovi otkazani, biće uklonjeni. Napomene

  • Za Microsoft Dynamics CRM SQL skripta u ovom članku baze znanja je samo jedan napor. Ovo možete dodati kao SQL posao koji ćete pokrenuti na periodičnoj noćnoj, sedmičnoj ili mesečnoj osnovi. Kako se CRM pokreće, morate da primenite ovaj članak sedmično, u zavisnosti od poslovnih potreba ili da primenite rešenje pisanjem prilagođenih MASOVNIH BRIS POSLOVA. (Pogledajte našu CRM SDK dokumentaciju o svojstvu BulkDeleteRequest.QuerySet,na bulkDeleteRequest klasi i po redosledu brisanja)

  • Uverite se da su zapisi asincOperacije za tokove posla i odgovarajući zapisi izbrisani iz objekta WorkflowLogBase.

  • Uverite se da su svi odgovarajući bulkdeletefailure i zapisi masovnedeleteoperacije izbrisani.

  • Uverite se da se brišu samo sledeće vrste Asinc operacija ako je šifra stanja vrsta 3, a šifra statusa vrsta 30 ili 32:

    • Zadatak proširenja toka posla (1)

    • Prikupljanje SQM podataka (9)

    • PersistMatchCode (12)

    • FullTextCatalogIndex (25)

    • UpdateContractStates (27)

    • Tok posla (10)

IF EXISTS (SELECT name from sys.indexesWHERE name = N'CRM_AsyncOperation_CleanupCompleted')      DROP Index AsyncOperationBase.CRM_AsyncOperation_CleanupCompletedGOCREATE NONCLUSTERED INDEX CRM_AsyncOperation_CleanupCompletedON [dbo].[AsyncOperationBase] ([StatusCode],[StateCode],[OperationType])GOwhile(1=1)begindeclare @DeleteRowCount int = 10000declare @rowsAffected intdeclare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null primary key)insert into @DeletedAsyncRowsTable(AsyncOperationId)Select top (@DeleteRowCount) AsyncOperationId from AsyncOperationBasewhere   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.AsyncOperationIddelete WorkflowLogBase from WorkflowLogBase W, @DeletedAsyncRowsTable dwhere   W.AsyncOperationId = d.AsyncOperationId              delete BulkDeleteFailureBase From BulkDeleteFailureBase B, @DeletedAsyncRowsTable dwhere   B.AsyncOperationId = d.AsyncOperationIddelete BulkDeleteOperationBase From BulkDeleteOperationBase O, @DeletedAsyncRowsTable dwhere   O.AsyncOperationId = d.AsyncOperationIddelete WorkflowWaitSubscriptionBase from WorkflowWaitSubscriptionBase WS, @DeletedAsyncRowsTable dwhere   WS.AsyncOperationId = d.AsyncOperationID  delete AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable dwhere   A.AsyncOperationId = d.AsyncOperationId/*If not calling from a SQL job, use the WAITFOR DELAY*/if(@DeleteRowCount > @rowsAffected)  returnelse  WAITFOR DELAY '00:00:02.000'end

Poboljšavanje performansi skripte brisanja

  • Da biste poboljšali ukupne performanse programa Microsoft Dynamics CRM, planirajte pokretanje usluge brisanja u softveru Microsoft Dynamics CRM tokom van špica za Microsoft Dynamics CRM. Usluga se podrazumevano pokreće u trenutku kada je instaliran Microsoft Dynamics CRM. Međutim, uslugu možete da podesite da se pokrene u 22:00 umesto u podrazumevano vreme. Da biste to uradili, koristite Microsoft Dynamics CRM ScaleGroup uređivač posla. Za više informacija posetite sledeću Web lokaciju CodePlex:

    http://crmjobeditor.codeplex.com/Napomene

    1. Ova radnja ne utiče direktno na performanse skripte.

    2. Uređivač posla za Microsoft Dynamics CRM 4.0 je oskrnavljen i više nije dostupan.

  • Da biste poboljšali performanse skripti brisanja u ovom članku i poboljšali microsoft Dynamics CRM kod usluge brisanja koji pokreće slična brisanja, dodajte sledeća tri indeksa u bazu podataka OrganizationName_MSCRM pre nego što pokrenete skriptu brisanja u ovom članku:

    CREATE NONCLUSTERED INDEX CRM_WorkflowLog_AsyncOperationID ON [dbo].[WorkflowLogBase] ([AsyncOperationID])GO CREATE NONCLUSTERED INDEX CRM_DuplicateRecord_AsyncOperationID ON [dbo].[DuplicateRecordBase] ([AsyncOperationID])GOCREATE NONCLUSTERED INDEX CRM_BulkDeleteOperation_AsyncOperationID ON [dbo].[BulkDeleteOperationBase](AsyncOperationID)GO

    Napomena Ako ne dodate ove indekse, izvršavanje skripte brisanja može potrajati satima.

  • Zaustavite Microsoft Dynamics CRM asinhronu uslugu obrade dok pokrenete ovu skriptu.

  • Opcionalno Ponovo napravite sledeće indekse i ažurirajte statistiku:

    -- 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
  • Opcionalno Ažurirajte statistiku potpunim skeniranjem na svim tabelama koje su uključene u ovaj upit pomoću sledećih komandi (poželjno u špicu):

    UPDATE STATISTICS [dbo].[AsyncOperationBase] WITH FULLSCANUPDATE STATISTICS [dbo].[DuplicateRecordBase] WITH FULLSCANUPDATE STATISTICS [dbo].[BulkDeleteOperationBase] WITH FULLSCANUPDATE STATISTICS [dbo].[WorkflowCompletedScopeBase] WITH FULLSCANUPDATE STATISTICS [dbo].[WorkflowLogBase] WITH FULLSCANUPDATE STATISTICS [dbo].[WorkflowWaitSubscriptionBase] WITH FULLSCAN
  • Opcionalno Promenite model oporavka MSCRM baze podataka u Jednostavno da biste izbegli višak generacije Microsoft SQL Server evidencija. Za SQL Server 2005 prijavite se u Microsoft SQL Server Management Studio kao administrator, kliknite desnim tasterom miša na <org_name>_MSCRM bazu podataka, izaberite stavku Svojstva, izaberite stavku Opcije, a zatim izaberite stavku Model oporavka. Označi jednostavno , azatim kliknite na dugme U redu. Kada prvi put pokrenete ovu skriptu, model za <org_name>_MSCRM baze podataka trebalo bi da bude prebačen u FULL za najbolji model za oporavak podataka.

  • Da bi se povećale performanse skripte, @DeleteRowCount vrednost od 10.000 može biti smanjena

Da biste utvrdili broj zapisa koje će skripta izbrisati u ovom članku, pokrenite sledeću skriptu za prebrojavanje u odnosu na OrganizationName_MSCRM podataka:

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

Greška u skriptiKada pokrenete skriptu čišćenja, možete dobiti poruku o grešci koja je slična sledećoj:

Izjava DELETE je neusaglašena sa ograničenjem REFERENCE "asyncoperation_workflowwaitsubscription". Do neusaglašenosti je došlo u bazi podataka "Contoso_MSCRM", tabeli "dbo". WorkflowWaitSubscriptionBase", kolona "ID asyncOperation". Izjava je prekinuta.

Ako dobijete ovu poruku o grešci, zaustavite skriptu čišćenja, a zatim sledite ove korake da biste uklonili preostale zapise toka poslaWaitSubscription koji postoje za dovršene ili otkazane tokove posla. Ovi zapisi više ne bi trebalo da postoje jer je trebalo da budu izbrisani kada su tokovi posla dovršeni ili otkazani. Ne bi trebalo da vidite zapise koji su vraćeni iz ovog upita. Sve što je ostalo u tabeli "Baza podataka toka posla" koja se pojavljuje u ovom upitu je zapis bez dece. Ove zapise ne možete izbrisati putem UI jer je proces Microsoft CRM Async u otkazanom ili dovršenom stanju. Sledeća skripta će proveriti koliko zapisa baze tokova posla koji su siročići Postoji za dovršene i otkazane zapise toka posla:

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

Sledeća skripta će izbrisati zapise baze podataka WorkflowWaitSubscriptionBase za nasukane zapise baze tokova posla za dovršene i otkazane zapise toka posla:

delete from workflowwaitsubscriptionbase where asyncoperationid in(Select asyncoperationidfrom AsyncOperationBasewhere OperationType in (1, 9, 12, 25, 27, 10) AND StateCode = 3 AND StatusCode IN (30,32))

Nakon što se ova izjava o brisanju izvrši, skripta "AsyncoperationBase" i "Čišćenje toka posla" će se uspešno dovršiti.

Više informacija

Za više informacija kliknite na sledeće brojeve članaka da biste videli članke u Microsoft bazi znanja:

954929 Entitet AsyncOperation troši značajan deo baze podataka [Org]_MSCRM uzrokuje loše performanse u softveru Microsoft Dynamics CRM

957871 Zapisi zadatka proširenja toka posla uzrokuju preveliki rast tabele AsyncOperationBase u MSCRM bazi podataka u softveru Microsoft Dynamics CRM 4.0 Za više informacija o terminologiji softverskih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

824684 Opis standardne terminologije koja se koristi za opisivanje Microsoft softverskih ispravkiZa više informacija o Microsoft Business Solutions CRM softverskoj hitnoj ispravki i terminologiji paketa ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

887283 Microsoft Business Solutions CRM softverska hitna ispravka i standardi imenovanja paketa za ažuriranje

Potrebna vam je dodatna pomoć?

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Microsoft insajdere

Da li su vam ove informacije koristile?

Hvala vam na povratnim informacijama!

Hvala za povratne informacije! Izgleda da će biti od pomoći ako vas povežemo sa našim agentima Office podrške.

×