MSSQL 에서 조각 난 색인 을 자동 으로 재 구성 하 는 방법 공유

1.색인 조각의 생 성?
표 에 대량의 삽입,수정,삭제 작업 으로 인해 색인 페이지 가 분열 되 었 다.색인 에 높 은 조각 이 있 으 면 두 가지 경우 가 있 습 니 다.하 나 는 색인 을 검색 하 는 데 많은 시간 이 걸 리 고 다른 하 나 는 검색 할 때 색인 을 전혀 사용 하지 않 으 면 성능 이 떨 어 집 니 다.
2.파편 유형 은:
2.1 내부 파 쇄
색인 페이지 의 데이터 삽입 이나 수정 작업 으로 인해 발생 하고 데이터 가 희소 행렬 의 형식 으로 분포 되 어 끝나 면 데이터 페이지 의 증 가 를 초래 하여 조회 시간 을 증가 시 킬 것 이다.
2.2 외부 파 쇄
색인/데이터 페이지 의 데이터 삽입 이나 수정 으로 인해 발생 합 니 다.페이지 분리 와 파일 시스템 에 연결 되 지 않 은 새로운 색인 페이지 의 배분 으로 끝 납 니 다.데이터베이스 서버 는 미리 읽 기 작업 의 장점 을 이용 할 수 없습니다.다음 과 관련 된 데이터 페이지 가 가 깝 지 않 고 연 결 된 아래 페이지 는 데이터 파일 의 어느 곳 에 도 있 을 수 있 기 때 문 입 니 다.
조각 난 색인 자동 재 구축
데이터 에 새 조각 정리 저장 과정

-- ================================================
-- TEMPLATE GENERATED FROM TEMPLATE EXPLORER USING:
-- CREATE PROCEDURE (NEW MENU).SQL
--
-- USE THE SPECIFY VALUES FOR TEMPLATE PARAMETERS
-- COMMAND (CTRL-SHIFT-M) TO FILL IN THE PARAMETER
-- VALUES BELOW.
--
-- THIS BLOCK OF COMMENTS WILL NOT BE INCLUDED IN
-- THE DEFINITION OF THE PROCEDURE.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- AUTHOR:  <AUTHOR,,WUXIANGQIAN>
-- CREATE DATE: <CREATE DATE,2014-05-16>
-- DESCRIPTION: <DESCRIPTION, >
-- =============================================
ALTER PROCEDURE USP_IMS_DEFRAGMENT_INDEXES
AS
--
SET NOCOUNT ON
DECLARE @TABLENAME VARCHAR (128) -- ( )
DECLARE @EXECSTR VARCHAR (255) --
DECLARE @INDEXNAME CHAR(255) --
DECLARE @DBNAME SYSNAME --
DECLARE @DBNAMECHAR VARCHAR(20) --
DECLARE @TABLEIDCHAR VARCHAR(255) -- ( )

--
SELECT @DBNAME = DB_NAME()
IF @DBNAME IN ('master', 'msdb', 'model', 'tempdb')
BEGIN
PRINT 'THIS PROCEDURE SHOULD NOT BE RUN IN SYSTEM DATABASES.'
RETURN
END ELSE
BEGIN
SET @DBNAMECHAR = 'DBNAME'
END

-- 1 :
--
DECLARE TABLES CURSOR FOR
SELECT CONVERT(VARCHAR,SO.ID)
FROM SYSOBJECTS SO
JOIN SYSINDEXES SI
ON SO.ID = SI.ID
WHERE SO.TYPE ='U'
AND SI.INDID < 2
AND SI.ROWS > 0

--
CREATE TABLE #FRAGLIST (
TABLENAME CHAR (255),
INDEXNAME CHAR (255))

--
OPEN TABLES

-- DBCC SHOWCONTIG
FETCH NEXT
FROM TABLES
INTO @TABLEIDCHAR

WHILE @@FETCH_STATUS = 0
BEGIN
--
INSERT INTO #FRAGLIST

EXEC ('SELECT OBJECT_NAME(DT.OBJECT_ID) AS TABLENAME,SI.NAME AS INDEXNAME FROM '+
' (SELECT OBJECT_ID,INDEX_ID,AVG_FRAGMENTATION_IN_PERCENT,AVG_PAGE_SPACE_USED_IN_PERCENT '+
' FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID('''+@DBNAMECHAR+'''),object_id('''+@TABLEIDCHAR+''')'+
',NULL,NULL,''DETAILED'') WHERE INDEX_ID<>0)AS DT INNER JOIN SYS.INDEXES SI'+
' ON SI.OBJECT_ID=DT.OBJECT_ID AND SI.INDEX_ID=DT.INDEX_ID AND '+
' DT.AVG_FRAGMENTATION_IN_PERCENT>10'+
' AND DT.AVG_PAGE_SPACE_USED_IN_PERCENT<75 ORDER BY DT.AVG_FRAGMENTATION_IN_PERCENT DESC')
FETCH NEXT
FROM TABLES
INTO @TABLEIDCHAR
END

--
CLOSE TABLES
DEALLOCATE TABLES

-- ,
SELECT * FROM #FRAGLIST

-- 2 : ( )
DECLARE INDEXES CURSOR FOR
SELECT TABLENAME, INDEXNAME
FROM #FRAGLIST
--
SELECT 'STARTED DEFRAGMENTING INDEXES AT ' + CONVERT(VARCHAR,GETDATE())
--
OPEN INDEXES
--
FETCH NEXT
FROM INDEXES
INTO @TABLENAME, @INDEXNAME
WHILE @@FETCH_STATUS = 0
BEGIN
SET QUOTED_IDENTIFIER ON
SELECT @EXECSTR = 'ALTER INDEX '+@INDEXNAME+' ON '+@TABLENAME+' REBUILD WITH(FILLFACTOR=90,ONLINE=ON)'

SELECT 'Now executing: '
SELECT(@EXECSTR)
EXEC (@EXECSTR)
SET QUOTED_IDENTIFIER OFF
FETCH NEXT
FROM INDEXES
INTO @TABLENAME, @INDEXNAME
END
--
CLOSE INDEXES
DEALLOCATE INDEXES

--
SELECT 'FINISHED DEFRAGMENTING INDEXES AT ' + CONVERT(VARCHAR,GETDATE())

--
DROP TABLE #FRAGLIST
GO

GO

정시 실행 절차 설정
(1)[sql server Management Studio]를 시작 하고[대상 자원 관리자]창 에서[관리]―[유지 계획]옵션 을 선택 하 십시오.
(2)[유지보수 계획]을 우 클릭 하고 팝 업 단축 메뉴 에서[유지보수 계획 마법사]옵션 을 선택 하고 그림 과 같은[유지보수 계획 마법사]대화 상 자 를 팝 업 하고[다음]단 추 를 누 르 십시오.
(3)그림 에서 보 듯 이[대상 서버 선택]대화 상 자 를 팝 업 합 니 다.[이름]텍스트 상자 에 유지보수 계획 의 이름 을 입력 할 수 있 습 니 다.[설명]텍스트 상자 에 유지보수 계획 에 대한 설명 문 자 를 입력 할 수 있 습 니 다.[서버]텍스트 상자 에 사용 할 서버 이름 을 입력 할 수 있 습 니 다.마지막 으로 정확 한 신분증 정 보 를 선택 하고[다음]단 추 를 누 르 십시오.
(4)그림 에서 보 듯 이[유지 보수 작업 선택]대화 상 자 를 팝 업 합 니 다.이 대화 상자 에서 sql 유지 보수 작업 을 선택 하고 저장 프로시저 문 구 를 삽입 할 수 있 습 니 다.

USE [DBNAME]

GO

EXEC [dbo].[USP_IMS_DEFRAGMENT_INDEXES]

(5)지정 한 작업 수행 계획

좋은 웹페이지 즐겨찾기