Pazīmes
Palaižot Microsoft Dynamics CRM 4.0, Microsoft Dynamics CRM 2011, Microsoft Dynamics CRM 2013 vai Microsoft Dynamics CRM 2015, tabula AsyncOperationBase kļūst ļoti liela. Ja tabulā ir miljoniem ierakstu, veiktspēja ir lēna.
Turklāt kļūdas, kas līdzīgas šīm, tiek reģistrētas lietojumprogrammas notikumu žurnālā serverī, kurā darbojas Microsoft Dynamics CRM:
Piezīme
Notikuma tips: Kļūda
Notikuma avots: MSCRMDeletionService
Notikuma kategorija: Nav
Notikuma ID: 16387
Datums: 2009/01/26
Laiks: 11:41:54
Lietotājs: Neattiecas
Dators: CRMSERVER
Apraksts: Kļūda: dzēšanas pakalpojumam neizdevās iztīrīt table=CleanupInactiveWorkflowAssembliesProcedure Papildinformāciju skatiet palīdzības un atbalsta centrā vietnē http://go.microsoft.com/fwlink/events.asp.
Risinājums
Lai novērstu šo problēmu, veiciet tabulas AsyncOperationBase tīrīšanu, palaižot tālāk norādīto skriptu datu bāzē**<OrgName>_MSCRM, kur vietturis<OrgName>** norāda faktisko jūsu organizācijas nosaukumu.
Brīdinājums Pirms datu tīrīšanas ņemiet vērā, ka pabeigtajiem sistēmas darbiem dažos gadījumos ir biznesa vērtība, un tie ir jāglabā ilgu laika periodu. Tāpēc vispirms tas jāapspriež ar organizācijas administrācijas darbiniekiem.
Ietekmētie sistēmas darbi:
SQM datu apkopošana. Programmatūras kvalitātes metrika apkopo datus klientu pieredzes programmai.
Atjaunināt līguma stāvokļus SQL darbs. Šis darbs tiek izpildīts vienu reizi dienā pusnaktī. Šis darbs iestata līgumus, kuriem beidzies derīgums, pozīcijā Beidzies derīgums.
Organizācijas pilna teksta kataloga indekss. Aizpilda pilna teksta indeksu datubāzē, lai meklētu Microsoft zināšanu bāzes rakstus CRM.
Ja periodiskie darbi tika atcelti, tie tiks noņemti.
Piezīmes
Pakalpojumam Microsoft Dynamics CRM SQL skripts šajā zināšanu bāzes rakstā ir tikai vienreizējs darbs. Varat pievienot to kā SQL darbu izpildei periodiski katru nakts, nedēļu vai mēnesi. Kad jūsu CRM darbojas, jums šis raksts ir jālieto katru nedēļu atkarībā no jūsu biznesa vajadzībām vai jāpiemēro risinājums, rakstot pielāgotus lielapjoma dzēšanas darbus. (Skatiet mūsu CRM SDK dokumentāciju par rekvizītu BulkDeleteRequest.QuerySet, par BulkDeleteRequest klasi un dzēšanas secību)
Pārliecinieties, vai AsyncOperation ieraksti darbplūsmām un atbilstošie ieraksti tiek izdzēsti no objekta WorkflowLogBase.
Pārliecinieties, vai visi atbilstošie BulkDeleteFailure un BulkDeleteOperation ieraksti ir izdzēsti.
Ja tipu stāvokļa kods ir 3 un tipu statusa kods ir 30 vai 32, pārliecinieties, vai tiek izdzēsti tikai tālāk norādītie asinhrono operāciju tipi.
- Darbplūsmas paplašināšanas uzdevums (1)
- Apkopot SQM datus (9)
- PersistMatchCode (12)
- FullTextCatalogIndex (25)
- UpdateContractStates (27)
- Darbplūsma (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
Dzēšanas skripta veiktspējas uzlabošana
Lai uzlabotu kopējo Microsoft Dynamics CRM veiktspēju, ieplānojiet Microsoft Dynamics CRM dzēšanas pakalpojuma palaišanu Microsoft Dynamics CRM laikā, kad tas ir ārpus noslogotā. Pēc noklusējuma pakalpojums darbojas laikā, kad tika instalēts Microsoft Dynamics CRM. Tomēr varat iestatīt, lai pakalpojums darbotos plkst. 22:00, nevis noklusējuma laikā. Lai to izdarītu, izmantojiet Microsoft Dynamics CRM ScaleGroup darbu redaktoru. Lai iegūtu vairāk informācijas, apmeklējiet šo CodePlex vietni:
http://crmjobeditor.codeplex.com/ Piezīmes- Šī darbība tieši neietekmē skripta veiktspēju.
- Microsoft Dynamics CRM 4.0 darba redaktors ir novecojis un vairs nav pieejams.
Lai uzlabotu šajā rakstā minēto dzēšanas skriptu veiktspēju un uzlabotu Microsoft Dynamics CRM dzēšanas pakalpojuma kodu, kas veic līdzīgas dzēšanas, pirms šajā rakstā minētā dzēšanas skripta izpildes OrganizationName_MSCRM datu bāzei pievienojiet tālāk norādītos trīs indeksus.
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) GOPiezīme Ja nepievienosit šos indeksus, dzēšanas skripta izpilde var ilgt vairākas stundas.
Apturiet Microsoft Dynamics CRM asinhronās apstrādes pakalpojumu, kamēr izpildāt šo skriptu.
Neobligāti: no jauna izveidojiet tālāk norādītos indeksus un atjauniniet 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) GONeobligāta statistikas atjaunināšana ar pilno skenēšanu visām tabulām, kas ir iesaistītas šajā vaicājumā, izmantojot tālāk norādītās komandas (vēlams mazāk noslogotajā laikā):
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 FULLSCANNeobligāts Mainiet MSCRM datu bāzes atkopšanas modeli uz Vienkāršs, lai izvairītos no pārmērīgas Microsoft SQL Server žurnālu ģenerēšanas. Attiecībā uz SQL Server 2005, piesakieties Microsoft SQL Server Management Studio kā administrators, ar peles labo pogu noklikšķiniet uz org_name<>_MSCRM datu bāzes, noklikšķiniet uz Rekvizīti, noklikšķiniet uz Opcijas un pēc tam noklikšķiniet uz Atkopšanas modelis. Atzīmējiet Vienkārši un pēc tam noklikšķiniet uz Labi. Kad pirmoreiz palaižat šo skriptu, org_name>_MSCRM datu bāzes atkopšanas <modelis ir jāpārslēdz atpakaļ uz FULL, lai iegūtu labāko datu atkopšanas modeli.
Lai palielinātu skripta veiktspēju, @DeleteRowCount vērtību 10 000 var samazināt
Lai noteiktu, cik ierakstus skripts šajā rakstā dzēš, OrganizationName_MSCRM datu bāzē izpildiet tālāk norādīto skaita skriptu.
Select Count(AsyncOperationId)from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3 AND StatusCode IN (30,32)
Skripta kļūda
Palaižot tīrīšanas skriptu, var tikt parādīts tālāk redzamajam līdzīgs kļūdas ziņojums.
Piezīme
Priekšraksts DELETE konfliktēja ar REFERENCE ierobežojumu "asyncoperation_workflowwaitsubscription". Konflikts radās datu bāzē "Contoso_MSCRM", tabulā "dbo. WorkflowWaitSubscriptionBase", kolonna "AsyncOperationId". Paziņojums ir izbeigts.
Ja saņemat šo kļūdas ziņojumu, apturiet tīrīšanas skriptu un pēc tam veiciet šīs darbības, lai noņemtu atlikušos pabeigtajām vai atceltajām darbplūsmām esošos WorkflowWaitSubscription ierakstus. Šiem ierakstiem vairs nevajadzētu pastāvēt, jo tiem vajadzētu būt izdzēstiem pēc darbplūsmu pabeigšanas vai atcelšanas. No šī vaicājuma atgrieztajiem ierakstiem nevajadzētu būt redzamiem. Viss, kas paliek tabulā WorkflowWaitSubscriptionBase, kas tiek parādīts šajā vaicājumā, ir pamestais ieraksts. Šos ierakstus nevar izdzēst, izmantojot lietotāja interfeisu, jo Microsoft CRM sinhronizācijas process ir atcelts vai pabeigts.
Tālāk redzamais skripts pārbaudīs, cik ir pabeigto un atcelto darbplūsmas ierakstu WorkflowWaitSubscriptionBase bāzes:
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))
Tālāk minētais skripts izdzēsīs WorkflowWaitSubscriptionBase ierakstus dzienotiem WorkflowWaitSubscriptionBase ierakstiem pabeigtajiem un atceltajiem darbplūsmas ierakstiem:
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ēc šī dzēšanas priekšraksta izpildes AsyncoperationBase un darbplūsmas tīrīšanas skripts tiks sekmīgi pabeigts.
Papildinformācija
Lai iegūtu papildinformāciju, noklikšķiniet uz tālāk norādītā raksta numura un lasiet Microsoft zināšanu bāzes rakstus:
954929 Entītija AsyncOperation patērē ievērojamu daļu no datu bāzes [Org]_MSCRM un izraisa sliktu veiktspēju programmā Microsoft Dynamics CRM
957871 Darbplūsmas paplašināšanas uzdevumu ierakstu dēļ MSCRM datu bāzes tabula AsyncOperationBase tiek palielināta pārāk lielā Microsoft Dynamics CRM 4.0 Lai iegūtu papildinformāciju par programmatūras atjaunināšanas terminoloģiju, noklikšķiniet uz tālāk norādītā raksta numura un lasiet Microsoft zināšanu bāzes rakstu:
824684 Standarta terminoloģijas apraksts, kas tiek izmantots Microsoft programmatūras atjauninājumu aprakstīšanaiLai iegūtu papildinformāciju par Microsoft Business Solutions CRM programmatūras labojumfailu un atjauninājumu pakotnes terminoloģiju, noklikšķiniet uz tālāk norādītā raksta numura un lasiet Microsoft zināšanu bāzes rakstu:
887283 Microsoft Business Solutions CRM programmatūras labojumfailu un atjauninājumu pakotņu nosaukumdošanas standarti