Microsoft Dynamics CRM Async Temizlik İşlemleri

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.

tamamlanan iş akışını sil
İş akışları ayarlarında bulunan işlem tamamlanınca bu akışı sil seçeneği doğrudan bu kısımla alakalıdır ve tamamlanan iş akışlarını temizlemek performans anlamında kullanıcıya olumlu yönde yansımaktadır.

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.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir