-- DB 응급조치

-- 1. 캐쉬를 비운다.

       -- 프로시저 캐쉬에서 모든 요소를 제거할

       -- (프로시저 사용시 다시 사용하지 않고 다시 컴파일 하게 )

       DBCC FREEPROCCACHE

      

       -- 버퍼 풀에서 버퍼를 모두 제거할

       -- (서버를 종료하지 않아도 완전히 버퍼 캐쉬를 사용함)

       DBCC DROPCLEANBUFFERS

 

      

-- 2. 통계를 업데이트 한다.

       -- 하나의 테이블에 대하여 모든 통계를 업데이트 하는 방법

       UPDATE STATISTICS [table_name]

      

       -- 하나의 테이블에 대하여 원하는 인덱스에 대해서만 통계를 업데이트 하는 방법

       UPDATE STATISTICS [table_name] [index_name]

      

       -- 데이터베이스 전체에 대하여 통계를 업데이트 하는 방법

       USE [db_name];

       EXEC SP_UPDATESTATS

      

       -- 인덱스의 통계정보와 조각난 정도를 보는 경우

       -- (http://forfido.tistory.com/93)

       -- All density 값은 0.0043 이하일 NC INDEX 사용함

       DBCC SHOW_STATISTICS ([table_name], [index_name])

       EXEC SP_SPACEUSED [table_name]

      

       -- 만약 테이블의 인덱스 정보를 모른 다면

       EXEC SP_HELPINDEX [table_name]

      

            

-- 3. 인덱스 조각모음을 한다.

       -- 인덱스 파편화 정보보기(검색밀도, 평균 페이지 밀도가 크면 좋은 )

       DBCC SHOWCONTIG([table_name])

       DBCC SHOWCONTIG([table_name],[index_name])

       -- 또는

       SELECT A.INDEX_ID, NAME, AVG_FRAGMENTATION_IN_PERCENT

       FROM SYS.DM_DB_INDEX_PHYSICAL_STATS

       (DB_ID('db_name'), OBJECT_ID('table_name'), NULL, NULL, NULL)AS A

       JOIN SYS.INDEXES AS B

       ON A.OBJECT_ID = B.OBJECT_ID AND

       A.INDEX_ID = B.INDEX_ID

 

       -- 파편화가 일정이상 진행되었다면 인덱스 조각모음 실행

       -- (http://msdn.microsoft.com/ko-kr/library/ms189858.aspx)

       DBCC INDEXDEFRAG([db_name], [table_name], [index_name])

      

       -- 2005 이상에서는 아래와 같은 방법도 있다.(http://text.zpne.net/6)

       ALTER INDEX ALL ON [table_name] REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90)

      

       -- 모든 테이블에 하나씩 하기 힘들 때를 위해

       /*

       DECLARE @i int, @sql varchar(1000)

       DECLARE @tablename varchar(1000),@ownerName  varchar(1000)

       SET @i = 1

       DECLARE DB_Cursor CURSOR FOR

             SELECT TABLE_SCHEMA, TABLE_NAME

             FROM INFORMATION_SCHEMA.TABLES 

             WHERE TABLE_TYPE = 'BASE TABLE'

             ORDER BY TABLE_SCHEMA, TABLE_NAME

       OPEN DB_Cursor

       FETCH NEXT FROM DB_Cursor

       INTO @ownerName, @tablename

       WHILE @@FETCH_STATUS = 0

       BEGIN

             SET @sql = 'ALTER INDEX ALL ON ' + @ownerName + '.' + @tablename + ' REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90) '

             EXEC (@sql)

            PRINT CONVERT(VARCHAR, @i) + '__' + @ownerName + '.' + @tablename + '............ OK'

             SET @i = @i + 1

             FETCH NEXT FROM DB_Cursor

             INTO @ownerName, @tablename

       END

       CLOSE DB_Cursor

       DEALLOCATE DB_Cursor

       */




 

Posted by motolies
,