Tünetek
A Microsoft Dynamics CRM 4.0, a Microsoft Dynamics CRM 2011, a Microsoft Dynamics CRM 2013 vagy a Microsoft Dynamics CRM 2015 futtatásakor az AsyncOperationBase tábla nagyon nagyra nő. Ha a tábla több millió rekordot tartalmaz, a teljesítmény lassú.
Ezenkívül a következőhöz hasonló hibák is bekerülnek a Microsoft Dynamics CRM rendszert futtató kiszolgálón az események naplójába:
Megjegyzés
Eseménytípus: Hiba
Esemény forrása: MSCRMDeletionService
Eseménykategória: Nincs
Eseménykód: 16387
Dátum: 2009/01/26
Időpont: 11:41:54 de.
Felhasználó: – N/A
Számítógép: CRMSERVER
Leírás: Hiba: A törlési szolgáltatás nem tudta eltávolítani a table=CleanupInactiveWorkflowAssembliesProcedure További információt a http://go.microsoft.com/fwlink/events.asp webhely Súgó és támogatás központjában talál.
Megoldás
A probléma megoldásához végezze el az AsyncOperationBase tábla karbantartását úgy, hogy futtatja a következő parancsfájlt az **<OrgName>_MSCRM adatbázison, ahol azOrgName>** helyőrző <a szervezet tényleges nevét jelöli.
Figyelmeztetés Az adatok törlése előtt vegye figyelembe, hogy a befejezett rendszerfeladatok bizonyos esetekben üzleti jelentőséggel bírnak, illetve hosszú ideig kell tárolni őket. Ezért ezt először a szervezet adminisztrátorával érdemes megbeszélnie.
Érintett rendszerfeladatok:
SQM adatgyűjtés. A szoftverminőségi mutatók az ügyfélélmény programhoz gyűjtenek adatokat.
Szerződésállapotok frissítése SQL-feladat. Ez a feladat naponta egyszer, éjfélkor fut. Ez a feladat a lejárt szerződéseket Lejárt állapotúra állítja.
Szervezet teljes szöveges katalógusindexe. Teljes szöveges index kitöltése adatváltozatban a Microsoft Tudásbázis-cikkekben való kereséshez a CRM rendszerben.
Az ismétlődő feladatok megszakítása után a rendszer eltávolítja őket.
Megjegyzések
A Microsoft Dynamics CRM esetén A jelen tudásbáziscikkben szereplő SQL-parancsfájl egyszeri feladat. Ezt hozzáadhatja SQL-feladatként, amely ismétlődően éjszakai, heti vagy havi rendszerességgel fut. A CRM futásakor az üzleti igényektől függően hetente kell alkalmaznia ezt a cikket, vagy egyéni TÖMEGES TÖRLÉSI feladatok írásával alkalmaznia kell a megoldást. (A BulkDeleteRequest.QuerySet tulajdonságról, a BulkDeleteRequest osztályról és a törlés sorrendjéről tekintse meg a CRM SDK dokumentációját.)
Győződjön meg arról, hogy a munkafolyamatok AsyncOperation rekordjai és a kapcsolódó rekordok törlődtek a WorkflowLogBase objektumból.
Győződjön meg arról, hogy az összes kapcsolódó bulkdeletefailure és bulkdeleteoperation rekord törlődött.
Győződjön meg arról, hogy csak a következő aszinkron művelettípusok törlődnek, ha a típusok állapotkódja 3, állapotkódja pedig 30 vagy 32:
- Munkafolyamat-bővítési feladat (1)
- SQM adatok gyűjtése (9)
- PersistMatchCode (12)
- FullTextCatalogIndex (25)
- UpdateContractStates (27)
- Munkafolyamat (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
A törlési parancsfájl teljesítményének javítása
A Microsoft Dynamics CRM általános teljesítményének javítása érdekében ütemezze a Microsoft Dynamics CRM Törlési szolgáltatást csúcsidőn kívüli időre a Microsoft Dynamics CRM számára. Alapértelmezés szerint a szolgáltatás a Microsoft Dynamics CRM telepítésekor fut. Beállíthatja azonban, hogy a szolgáltatás az alapértelmezett időpont helyett este 10:00 órakor fusson. Ehhez használja a Microsoft Dynamics CRM ScaleGroup feladatszerkesztőjét. További információért látogasson el a CodePlex következő webhelyére:
http://crmjobeditor.codeplex.com/ Megjegyzések- Ez a művelet nincs közvetlen hatással a parancsprogram teljesítményére.
- A Microsoft Dynamics CRM 4.0 feladatszerkesztője már nem érhető el.
A cikkben ismertetett törlési parancsfájlok teljesítményének javítása, valamint a hasonló törléseket futtató Microsoft Dynamics CRM törlési szolgáltatáskód javítása érdekében vegye fel az alábbi három indexet a OrganizationName_MSCRM adatbázisba, mielőtt futtatná a cikkben szereplő törlési parancsfájlt:
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) GOMegjegyzés: Ha nem veszi fel ezeket az indexeket, a törlési parancsfájl futtatása akár órákig is eltarthat.
A parancsfájl futtatása közben állítsa le a Microsoft Dynamics CRM aszinkron feldolgozási szolgáltatását.
Nem kötelező: Építse újra az alábbi indexeket, és frissítse a statisztikákat:
-- 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) GONem kötelező: Frissítse a statisztikát teljes vizsgálattal a lekérdezésben érintett összes táblán a következő parancsok használatával (lehetőleg csúcsidőn kívül):
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 FULLSCANNem kötelező: Módosítsa az MSCRM-adatbázis helyreállítási modelljét Egyszerű értékre, hogy elkerülje a Microsoft SQL Server naplók túlzott létrehozását. SQL Server 2005 esetén jelentkezzen be rendszergazdaként a Microsoft SQL Server Management Studio-ba, kattintson a jobb gombbal a org_name_MSCRM> adatbázisra, kattintson a <Tulajdonságok parancsra, válassza a Beállítások parancsot, majd kattintson a Helyreállítási modell parancsra. Jelölje meg az Egyszerű jelölést, majd kattintson az OK gombra. A parancsprogram első futtatásakor az org_name>_MSCRM adatbázis-helyreállítási <modellt vissza kell állítani FULL értékre a legjobb adat-helyreállíthatósági modell érdekében.
A parancsfájl teljesítményének növelése érdekében a @DeleteRowCount 10 000-es érték csökkenthető
A cikkben szereplő parancsfájl által törölendő rekordok számának meghatározásához futtassa a következő számláló parancsfájlt a OrganizationName_MSCRM adatbázison:
Select Count(AsyncOperationId)from AsyncOperationBase WITH (NOLOCK)
where OperationType in (1, 9, 12, 25, 27, 10)
AND StateCode = 3 AND StatusCode IN (30,32)
Parancsfájlhiba
A karbantartási parancsfájl futtatásakor a következőhöz hasonló hibaüzenet jelenhet meg:
Megjegyzés
A DELETE utasítás ütközött a "asyncoperation_workflowwaitsubscription" REFERENCE megkötéssel. Az ütközés a(z) "Contoso_MSCRM adatbázisban", a "dbo" táblában lépett fel. WorkflowWaitSubscriptionBase", AsyncOperationId" oszlop. Az utasítás lezárult.
Ha megjelenik ez a hibaüzenet, állítsa le a karbantartási parancsfájlt, majd az alábbi lépéseket követve távolítsa el a befejezett vagy megszakított munkafolyamatokhoz tartozó fennmaradó WorkflowWaitSubscription rekordokat. Ezeknek a rekordoknak már nem kellene létezniük, mert a munkafolyamatok befejezésekor vagy megszakításakor törölni kellett volna őket. Nem szabadna megjelennie a lekérdezés által visszaadott rekordoknak. A lekérdezésben megjelenő WorkflowWaitSubscriptionBase táblában csak árva rekordok maradnak. Ezeket a rekordokat nem lehet a felhasználói felületen keresztül törölni, mert a Microsoft CRM aszinkron folyamata megszakított vagy befejezett állapotban van.
A következő parancsfájl ellenőrzi, hogy hány árva WorkflowWaitSubscriptionBase rekord létezik a befejezett és megszakított munkafolyamat-rekordokhoz:
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))
A következő parancsfájl törli a befejezett és megszakított munkafolyamat-rekordok elakadt WorkflowWaitSubscriptionBase rekordjainak WorkflowWaitSubscriptionBase rekordjait:
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))
A delete utasítás végrehajtása után az AsyncoperationBase és a munkafolyamat-karbantartási parancsfájl sikeresen befejeződik.
További információ
További információ a Microsoft Tudásbázis következő számú cikkeiben olvasható (a cikkek megnyitásához kattintson a sorszámra):
954929 Az AsyncOperation entitás felhasználja a(z) [Org]_MSCRM adatbázis jelentős részét, és gyenge teljesítményt okoz a Microsoft Dynamics CRM
957871 A munkafolyamat-bővítési feladatrekordok miatt az MSCRM adatbázisában az AsyncOperationBase tábla túl nagyra nő a Microsoft Dynamics CRM 4.0-s verziójában. A szoftverfrissítésekkel kapcsolatos terminológiáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
824684 A Microsoft szoftverfrissítéseinek leírására használt szabványos terminológia A Microsoft Business Solutions CRM szoftverekkel kapcsolatos gyorsjavítási és frissítési csomagokkal kapcsolatos terminológiájáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
887283 Microsoft Business Solutions CRM szoftver gyorsjavítási és frissített csomagelnevezési szabványok