From 954e1abfa71213e88536423eb6844d9859cca0c2 Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Thu, 15 Oct 2015 00:34:14 +0200 Subject: [PATCH 1/3] add @lockTimeout option --- indexes/dba_indexDefrag_sp.sql | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/indexes/dba_indexDefrag_sp.sql b/indexes/dba_indexDefrag_sp.sql index 8cd79a2..d0050bf 100644 --- a/indexes/dba_indexDefrag_sp.sql +++ b/indexes/dba_indexDefrag_sp.sql @@ -227,6 +227,8 @@ CREATE PROCEDURE dbo.dba_indexDefrag_sp /* time to wait between defrag commands */ , @debugMode BIT = 0 /* display some useful comments to help determine if/WHERE issues occur */ + , @lockTimeout INT = 3 + /* Specifies the number of milliseconds a statement waits for a lock to be released; expressed in minutes */ AS /********************************************************************************* Name: dba_indexDefrag_sp @@ -485,7 +487,8 @@ BEGIN , @allowPageLockSQL NVARCHAR(4000) , @allowPageLockSQL_Param NVARCHAR(4000) , @allowPageLocks INT - , @excludeMaxPartitionSQL NVARCHAR(4000); + , @excludeMaxPartitionSQL NVARCHAR(4000) + , @lockTimoutCommand NVARCHAR(4000); /* Initialize our variables */ SELECT @startdatetime = GETDATE() @@ -723,6 +726,8 @@ BEGIN IF @debugMode = 1 RAISERROR(@debugMessage, 0, 42) WITH NOWAIT; + SET @lockTimoutCommand = N'SET LOCK_TIMEOUT ' + CAST(@lockTimeout * 60 * 1000 AS NVARCHAR) + N' '; + /* Begin our loop for defragging */ WHILE (SELECT COUNT(*) FROM dbo.dba_indexDefragStatus @@ -857,7 +862,7 @@ BEGIN AND @allowPageLocks = 0 BEGIN - SET @sqlCommand = N'ALTER INDEX ' + @indexName + N' ON ' + @databaseName + N'.' + SET @sqlCommand = @lockTimoutCommand + N'ALTER INDEX ' + @indexName + N' ON ' + @databaseName + N'.' + @schemaName + N'.' + @objectName + N' REORGANIZE'; /* If our index is partitioned, we should always REORGANIZE */ @@ -890,7 +895,7 @@ BEGIN ELSE SET @rebuildCommand = @rebuildCommand + N')'; - SET @sqlCommand = N'ALTER INDEX ' + @indexName + N' ON ' + @databaseName + N'.' + SET @sqlCommand = @lockTimoutCommand + N'ALTER INDEX ' + @indexName + N' ON ' + @databaseName + N'.' + @schemaName + N'.' + @objectName + @rebuildCommand; END From dd1c456a8c2fe6b52a0d92d936b086940d2aa713 Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Thu, 15 Oct 2015 02:12:14 +0200 Subject: [PATCH 2/3] fix a typo --- indexes/dba_indexDefrag_sp.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indexes/dba_indexDefrag_sp.sql b/indexes/dba_indexDefrag_sp.sql index d0050bf..2cd3770 100644 --- a/indexes/dba_indexDefrag_sp.sql +++ b/indexes/dba_indexDefrag_sp.sql @@ -228,7 +228,7 @@ CREATE PROCEDURE dbo.dba_indexDefrag_sp , @debugMode BIT = 0 /* display some useful comments to help determine if/WHERE issues occur */ , @lockTimeout INT = 3 - /* Specifies the number of milliseconds a statement waits for a lock to be released; expressed in minutes */ + /* Specifies the number of minutes a statement waits for a lock to be released */ AS /********************************************************************************* Name: dba_indexDefrag_sp From 7c4282d78fffcc5aad6f9b876446b178da054f1a Mon Sep 17 00:00:00 2001 From: Clement Wong Date: Fri, 13 Nov 2015 16:07:11 +0100 Subject: [PATCH 3/3] change the unit to second on timeout, and only timeout when @lockTimeout is bigger than 0 --- indexes/dba_indexDefrag_sp.sql | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/indexes/dba_indexDefrag_sp.sql b/indexes/dba_indexDefrag_sp.sql index 2cd3770..030ed6b 100644 --- a/indexes/dba_indexDefrag_sp.sql +++ b/indexes/dba_indexDefrag_sp.sql @@ -227,8 +227,8 @@ CREATE PROCEDURE dbo.dba_indexDefrag_sp /* time to wait between defrag commands */ , @debugMode BIT = 0 /* display some useful comments to help determine if/WHERE issues occur */ - , @lockTimeout INT = 3 - /* Specifies the number of minutes a statement waits for a lock to be released */ + , @lockTimeout INT = 180 + /* Specifies the number of seconds a statement waits for a lock to be released */ AS /********************************************************************************* Name: dba_indexDefrag_sp @@ -726,7 +726,10 @@ BEGIN IF @debugMode = 1 RAISERROR(@debugMessage, 0, 42) WITH NOWAIT; - SET @lockTimoutCommand = N'SET LOCK_TIMEOUT ' + CAST(@lockTimeout * 60 * 1000 AS NVARCHAR) + N' '; + IF @lockTimeout > 0 + SET @lockTimoutCommand = N'SET LOCK_TIMEOUT ' + CAST(@lockTimeout * 1000 AS NVARCHAR(4000)) + N' '; + ELSE + SET @lockTimoutCommand = N''; /* Begin our loop for defragging */ WHILE (SELECT COUNT(*)