Selamlar ;

Aşağıda anlatacaklarımı yapmadan önce yedek almanızı mutlaka ö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

-- 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 // Son 2000 kayıt harici kayıtları siliyor

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

Sevgiler.

E2