[MANUAL] Реиндекс базы данных mssql

Тема в разделе "Установка и настройка (Setup and configuration)", создана пользователем root, 30 сен 2014.

  1. root

    root Administrator Команда форума Administrator Moderator Developers Team

    Регистрация:
    23 авг 2014
    Сообщения:
    254
    Симпатии:
    58
    Баллы:
    11
    Если у вас слишком большой Pending Write (можно посмотреть в окне l2server справа вверху), более 500.000, то для снятия нагрузки необходимо сделать реиндексацию базы lin2world, да и для профилактики не помешает делать это раз в неделю.

    Создаем в процедурах базы lin2world новую процедуру под названием lin_Reindex, далее выполняем запрос в базу lin2world следующего вида:
    Код:
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    
    
    
    
    ALTER PROCEDURE [dbo].[lin_Reindex]     
    AS
    BEGIN
         -- SET NOCOUNT ON added to prevent extra result sets from
         -- interfering with SELECT statements.
         SET NOCOUNT ON;
    
    
    DECLARE @TableName varchar(255)
    
    
    DECLARE TableCursor CURSOR FOR
    SELECT table_name FROM information_schema.tables
    WHERE table_type = 'base table'
    
    
    OPEN TableCursor
    
    
    FETCH NEXT FROM TableCursor INTO @TableName
    WHILE @@FETCH_STATUS = 0
    BEGIN 
    DBCC DBREINDEX(@TableName,' ',90)
    FETCH NEXT FROM TableCursor INTO @TableName
    END
    
    
    CLOSE TableCursor
    
    
    DEALLOCATE TableCursor
    END
    После чего, в момент когда Вы решили сделать реиндекс базы, вызываем процедуру на выполнение следующим запросом:
    Код:
    USE lin2world
    
    
    DECLARE @RC int
    EXECUTE @RC = [lin2world].[dbo].[lin_Reindex]
    ВНИМАНИЕ! Сервер и кешед в этот момент должны быть выключены