Microsoft Dynamics Crm kullanıcıya daha iyi bir kullanım sunabilmek için bir çok işlemi async olarak arkaplanda yapmaktadır. Yapılan bu işlemler AsyncOperation tablosunda tutulmaktadır. Tamamlanan işlemlerin bu tabloda tutumasına pek gerek bulunmamaktadr. Uzun vadeli loglamalara ihtiyacınız varsa silmenize gerek yoktur. Ancak gereksiz yere bu dataları biriktirmeniz size performans konusunda sorunlar doğurabilir. Bu sebepten dolayı Microsoft Dynamics CRM Async Temizlik işlemleri belli aralıklarla gerçekleştirmeniz gerekmektedir.
Microsoft Dynamics CRM aync işlemlerin listesi hakkındaki yazıda paylaşmış olduğum sorguyu çalıştırdığınızda Başarılı, Başarısız Oldu ve İptal Edildi statüsündeki işlemler olumlu ya da olumsuz olarak tamamlanan işlemlerdir. Bu işlemleri veritabanından kaldırmak performans anlamında size olumlu yönde yansıyacaktır.
Microsoft Dynamics CRM Async Temizlik İşlemleri Sorgusu
Bu işlemleri temizlemek için Microsoft tarafından paylaşılan aşağıdaki sorguyu çalıştırmanızı öneririm:
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
Bu sorguyu belli aralıklarla çalıştırabileceğiniz bir SQL job oluşturabilirsiniz. Oluşturacağınız jobı aylık olarak çalıştırabilirsiniz. Bu jobı oluştururken sorgu üzerinde belli alanları da güncelleyip kendi durumunuza daha uygun hale getirebilirsiniz.
Microsoft tarafından paylaşılan bu SQL scripti ile temizlenen async işlemler Crm‘den silinmezler. Sadece çalışmasına ait logları SQL veritabanından silinir. Böylece eskiye dönük elinizde kalan çalıştırma kayıtlarınız gereksiz yere cihazınızda hafıza kaplamazlar. Tıpkı işlemi biten dosyaları çalıştırma loglarınızı bilgisayarınızdan temizlediğinizi düşünün.
Çocukluğumdan beri arabalara olan ilgim babam sayesinde başlamıştır. Araba manyağı seviyesinde bir ilgim var ancak bunu her ortamda dile getirmem. Teknolojiye ve bilgisayara olan ilgim kendimi tanımaya başladım başlayalı oldu. Şimdi ise kendimce kod yazabilen bir bilgisayar mühendisi olarak çalışıyorum.