[dba-Tech] SQL Question
Martin Reid
mwp.reid at qub.ac.uk
Mon Jul 16 07:49:39 CDT 2018
It's an available MS script Their engineer told us only supported way to do this. Full Script is
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
-----Original Message-----
From: dba-Tech <dba-tech-bounces at databaseadvisors.com> On Behalf Of Stuart McLachlan
Sent: 16 July 2018 13:47
To: Discussion of Hardware and Software issues <dba-tech at databaseadvisors.com>
Subject: Re: [dba-Tech] SQL Question
I assume that it looks like:
WHILE (1=1)
BEGIN
....
IF..... BREAK;
....
END
It's a common way to create an infinite loop since SQL doen't have an absolute. DO_LOOP
construct. But it s inefficent because (1=1) has to be evaluated on every iteration.
Again, without knowing what's in the BEGIN... END loop, it's hard to tell, but from how long it takes, I'd suspect that it is using a cursor, stepping through a large recordset and deleting records one at a time. This is often called RBAR programming ( "Row By Agonising Row") and is notoriously slow with large recordsets. Far better to try using one or a series of set based deletions i.e DELETE FROM.... WHERE...
It may be worth googling SQL RBAR for lots of discussion on the subject. :-)
On 16 Jul 2018 at 8:02, Susan Harkins wrote:
> From what I've read, it's for testing -- a placeholder of sorts. I'd
> delete it and try again.
>
> Susan H.
>
>
> We are running a script to delete a few million records from a CRM SQL
> Server. This bit is confusing us "While 1 =1" . We can't understand
> how this would ever evaluate to anything other than 1 =1?
>
> 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
>
> We also ran the full script for 34 hours and it ran successfully but
> turns out left 22million records undeleted all of which meet the
> deletion criteria!
>
> It's a Microsoft script. Confusing.
>
> Martin
>
>
> _______________________________________________
> dba-Tech mailing list
> dba-Tech at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-tech
> Website: http://www.databaseadvisors.com
>
> _______________________________________________
> dba-Tech mailing list
> dba-Tech at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-tech
> Website: http://www.databaseadvisors.com
>
_______________________________________________
dba-Tech mailing list
dba-Tech at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/dba-tech
Website: http://www.databaseadvisors.com
More information about the dba-Tech
mailing list