Solved

rebuild process hangs..

Posted on 2014-10-22
7
142 Views
Last Modified: 2014-10-29
this code is automated to run everyday.. but only last 2 days it is hanging and thus locking other processes also.. could this code be made more efficient to avoid locks or graciously quit without locking other process, in a failure or delay?
(I believe this is public code from online, perhaps Microsoft)
~~~
USE ROSER
GO
SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname sysname;
DECLARE @objectname sysname;
DECLARE @indexname sysname;
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command varchar(8000);
 
SELECT
    object_id AS objectid,
    index_id AS indexid,
    partition_number AS partitionnum,
    avg_fragmentation_in_percent AS frag
INTO #CollectFragInfo
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0 and page_count>99;
-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #CollectFragInfo;
 
-- Open the cursor.
OPEN partitions;
 
-- Loop through the Indexes to be defragged.
FETCH NEXT
   FROM partitions
   INTO @objectid, @indexid, @partitionnum, @frag;
 
WHILE @@FETCH_STATUS = 0
    BEGIN;
        SELECT @objectname = o.name, @schemaname = s.name
        FROM sys.objects AS o
        JOIN sys.schemas as s ON s.schema_id = o.schema_id
        WHERE o.object_id = @objectid;
 
        SELECT @indexname = name
        FROM sys.indexes
        WHERE  object_id = @objectid AND index_id = @indexid;
 
        SELECT @partitioncount = count (*)
        FROM sys.partitions
        WHERE object_id = @objectid AND index_id = @indexid;
 
 
IF @frag >= 10.0
    BEGIN;
    SELECT @command = 'ALTER INDEX ' + @indexname +' ON ' + @schemaname + '.' + @objectname + ' REBUILD';
    IF @partitioncount > 1
        SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum);
    EXEC (@command);
    END;
 
FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag;
END;

CLOSE partitions;
DEALLOCATE partitions;
0
Comment
Question by:25112
  • 4
  • 3
7 Comments
 
LVL 45

Expert Comment

by:Vitor Montalvão
ID: 40398685
It's rebuilding indexes when fragmentation it's higher than 10% (IF @frag >= 10.0). Recommendation it's to rebuild only when fragmentation it's higher than 30%. Check the MSDN article about this.
You can also rebuild online. It will take longer but will avoid locks. Just add the ONLINE=ON option to the command.
(...)
IF @frag >= 30.0
     BEGIN;
     SELECT @command = 'ALTER INDEX ' + @indexname +' ON ' + @schemaname + '.' + @objectname + ' REBUILD 
WITH (ONLINE = ON)';
     IF @partitioncount > 1
         SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum);
     EXEC (@command);
     END;
(...)

Open in new window

0
 
LVL 5

Author Comment

by:25112
ID: 40403362
thank you.

now, this job had never failed for 6 weeks, and suddenly started this way for now 3 days in a row. what can cause this kind of locking to happen all of a sudden?
0
 
LVL 45

Expert Comment

by:Vitor Montalvão
ID: 40403815
There's some good reasons for that happens and I'll bet in one of the following:
- Database growth
- Another processes running in concurrence
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 5

Author Comment

by:25112
ID: 40404336
Vitor, I tried your 2 reco, but this morning it again failed.. any thoughts what we can try next?

the 2 steps we implemented:
>30
=ONLINE option.

there is no errors captured in error log.

the process behind this has to be manually killed by command to relieve the lock, and until then there is no relief.
0
 
LVL 45

Expert Comment

by:Vitor Montalvão
ID: 40404528
The process still fails or ends with success?
0
 
LVL 5

Author Comment

by:25112
ID: 40404806
still fails.. it causes lock that affects the application.. manual intervention is then needed to kill the process runs the above code and only then relief.. after 6 weeks, surprising this happens everyday.. pl suggest.
0
 
LVL 45

Accepted Solution

by:
Vitor Montalvão earned 500 total points
ID: 40405868
Depending on the fragmentation level you won't need to rebuild indexes every day. In 90% of the cases once by week it's enough, so I would recommend you to execute that job weekly on a day and hour where no one is working. Usually Sundays evening so it can take all night long if necessary.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

SQL Server engine let you use a Windows account or a SQL Server account to connect to a SQL Server instance. This can be configured immediatly during the SQL Server installation or after in the Server Authentication section in the Server properties …
In this article I will describe the Copy Database Wizard method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now