SQL2005 인덱스 재생성 저장 프로세스 sprebuild_index 오리지널

2671 단어
회사가 운영하고 있는 사이트는 데이터가 매우 많고 사이트는 상호작용적이다. 서너 달이 지나면 색인이 생성된 조각이 매우 많다. 많은 부분의 페이지가 정태를 형성하지 못하기 때문에 사이트가 열리는 속도가 느려진다.
이전에는 수동으로 인덱스를 우클릭해서 다시 생성했지만 인덱스가 너무 많아서 조작하기가 힘들고 인덱스는 인터넷에서 저장 과정을 찾았습니다. 스스로 정리했습니다. 실행할 때 해당하는 데이터베이스를 선택하고 execsp 를 실행하면 됩니다.rebuild_index는 다음과 같습니다.

USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[sp_rebuild_index] 
(
  @Rebuild_Fragmentation_Percent smallint = 5  --          > 5%       
)
as
begin
  /*     :
  1.           :  exec sys.sp_MSforeachdb 'use ?;exec sp_rebuild_index'
  2.       :      exec sp_rebuild_index
  */
  
  --                     
  if (db_name() in ('master','model','msdb','tempdb')) return;  
  
  --      (       )     <= 5% ,                
  if not exists(select 1 from sys.dm_db_index_physical_stats(db_id(),null,null,null,null) a where a.index_id>0 and a.avg_fragmentation_in_percent > @Rebuild_Fragmentation_Percent) return
  
  
  print replicate('-',60)+char(13)+char(10)+replicate(' ',14)+N'     '+quotename(db_name())+N'       '+replicate(' ',20)+char(13)+char(10)  
    
  declare @sql nvarchar(2000),@str nvarchar(2000)
  
  declare cur_x cursor for 
    select 'alter index '+quotename(a.name)+' on '+quotename(object_schema_name(a.object_id))+'.'+quotename(object_name(a.object_id))+' rebuild;' as [sql]
        ,N'      :' +quotename(object_schema_name(a.object_id))+'.'+quotename(object_name(a.object_id))+'.'+quotename(a.name) as [str]
      from sys.indexes a
        inner join sys.dm_db_index_physical_stats(db_id(),null,null,null,null) b on b.object_id=a.object_id
          and b.index_id=a.index_id  
      where a.index_id>0  
        and b.avg_fragmentation_in_percent > @Rebuild_Fragmentation_Percent
      order by object_name(a.object_id),a.index_id
      
  open cur_x
  fetch next from cur_x into @sql,@str  
  
  while (@@fetch_status = 0)
  begin
 print @sql
    exec(@sql)
 
    print @str
    fetch next from cur_x into @sql,@str  
      
  end
  close cur_x
  deallocate cur_x 
    
end


이 가능하다, ~할 수 있다,...
메시지 195, 레벨 15, 상태 10, 프로세스 sprebuild_index, 24행'objectschema_name '은 식별할 수 있는 내장 함수 이름이 아닙니다.
걱정하지 마십시오. SQL Server SP4 패치가 설치되어 있지 않으므로 패치를 설치하면 됩니다.

좋은 웹페이지 즐겨찾기