Makale Özeti

Selamlar; Aşağıda anlatacaklarımı yapmadan önce mutlaka yedek almanızı öneririm. Bir müşterimizin sunucusunu yeni sunucuya migrate ederken 35-40 dk süren bu database (AsyncOperationBase) temizlik işlemi sonucu DB boyutunu 11 Gb'dan 3,5 Gb'a düşürebildik.

Makale

Selamlar;

Aşağıda anlatacaklarımı yapmadan önce mutlaka yedek almanızı öneririm.

Bir müşterimizin sunucusunu yeni sunucuya migrate ederken 35-40 dk süren bu database  (AsyncOperationBase) temizlik işlemi sonucu DB boyutunu 11 Gb'dan 3,5 Gb'a düşürebildik.

Gözle görülür bir hız artışı olduğu kesin.

--1.adım // Database yedeği alındıktan sonra çalıştırılacak

CREATE NONCLUSTERED INDEX CRM_AsyncOperation_CleanupCompleted

ON [dbo].[AsyncOperationBase] ([StatusCode],[StateCode],[OperationType])

GO

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)

GO


--2.adım // Crm async servisi durdurulduktan sonra çalıştırılacak


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


--3.adım //DeleteRowCount'taki sayı kadar kayıtları silme işlemini gerçekleştiriyor.Aktif olan son kayıda geldiğinde işlemi bitiriyor

declare @DeleteRowCount int

Select @DeleteRowCount = 1000

declare @DeletedAsyncRowsTable table (AsyncOperationId uniqueidentifier not null)

declare @continue int, @rowCount int

select @continue = 1

while (@continue = 1)

begin

      begin tran

      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 @rowCount = 0

      Select @rowCount = count(*) from @DeletedAsyncRowsTable

      select @continue = case when @rowCount <= 0 then 0 else 1 end

        if (@continue = 1)

        begin

            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 AsyncOperationBase From AsyncOperationBase A, @DeletedAsyncRowsTable d

            where A.AsyncOperationId = d.AsyncOperationId

            delete @DeletedAsyncRowsTable

      end

      commit

end

Sağlıcakla kalın.
 

Volkan KORKMAZ
Microsoft Certified Business Management Solutions Specialist
volkankorkmaz@gmail.com
http://www.volkankorkmaz.net