새소식

반응형
Database/MSSQL Server

DBA 업무시 필요한 쿼리

  • -
반응형

DBA를 하면서 점검 시 필요한 스크립트를 정리해봤습니다.

제가 정리한것과 퍼온글이 있으니 틀린 부분이 있을 수 있으니, 참고만 부탁드립니다.


틀린 부분은 메일로 문의 주시면 수정 하겠습니다 ^^


내용은 다음과 같습니다.

1. 인덱스 조각화 확인 및 리빌딩

2. 통계 확인 및 업데이트

3. CHECKDB 관련 체크 및 복구 


USE [데이터베이스명]

GO

 

/* 1. 인덱스

인덱스의 조각화 정도를 확인하고, 조각화가 많이 일어났으면 해당 인덱스 또는 해당 DB의 모든 인덱스를

리빌딩 해줘야 한다.

*/

/* =====================================================================================================

인덱스 조각화 확인

======================================================================================================*/

DBCC SHOWCONTIG ('테이블 명')

 

 

/* =====================================================================================================

인덱스 조각화 확인( dm_db_index_physical_stats 를 이용한 확인)

https://msdn.microsoft.com/ko-kr/library/ms188917.aspx

======================================================================================================*/

SELECT database_id as '데이터베이스 ID',B.name AS '테이블 명',C.NAME AS '인덱스 명',

A.index_type_desc AS '인덱스 타입',avg_fragmentation_in_percent AS '인덱스 논리 조각화 정도(%)',fragment_count AS '리프 수준 조각화 수'

FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(''), NULL, NULL, NULL) AS A

INNER JOIN SYS.tables AS B

ON A.object_id = B.object_id

INNER JOIN SYS.indexes AS C

ON A.index_id = C.index_id AND A.Object_id = C.Object_id AND A.index_id = C.index_id

ORDER BY avg_fragmentation_in_percent DESC

 

 

 

/* =====================================================================================================

인덱스 다시 리빌드(개별)

https://msdn.microsoft.com/ko-kr/library/ms189858.aspx

======================================================================================================*/

ALTER INDEX ALL ON [테이블명] REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90)

GO

 

 

/* =====================================================================================================

모든 인덱스 다시 리빌드

http://mdj1234.tistory.com/11

======================================================================================================*/

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

 

 

/* 통계정보 업데이트

통계정보가 업데이트 되지 않으면 옵티마이저가 잘못된 통계 정보를 참조하여, 성능에 영향을 미칠수 있으므로, 통계를 주기적으로

업데이트 해줘야 한다.

 

* 통계 업데이트는 플랜 생성 시 영향이 있을 수 있으므로, 필히 점검떄 진행해야 한다.

*/

/* =====================================================================================================

통계 확인

https://msdn.microsoft.com/ko-kr/library/ms174384.aspx

======================================================================================================*/

DBCC SHOW_STATISTICS ([테이블명],[인덱스 명])

 

 

 

/* =====================================================================================================

데이터베이스의 모든 통계 업데이트

======================================================================================================*/

SP_UPDATESTATS

 

 

 

/* =====================================================================================================

데이터베이스의 개별 통계 업데이트

======================================================================================================*/

UPDATE STATISTICS [테이블 이름]

 

 

 

 

 

/* 데이터베이스 무결성 체크

데이터베이스가 문제가 없는지 주기적으로 체크하여, 문제가 CHECK DB를 통해서 복구할 수 있다.

*/

/* =====================================================================================================

데이터베이스 무결성 체크

https://msdn.microsoft.com/ko-kr/library/ms176064.aspx

======================================================================================================*/

DBCC CHECKDB('데이터베이스 명')

 

 

 

/* =====================================================================================================

데이터베이스 복구

* 복구 옵션

             - REPAIR_FAST : 인덱스 재생성 없이도 수정 가능한 오류 복구

             - REPAIR_REBUILD : REPAIR_FAST의 작업 뿐만 아니라 인덱스 재생성 작업을 통해 복구

             - REPAIR_ALLOW_DATA_LOSS : 오류를 복구하지만 데이터 손실 가능성이 있음

 

옵션을 위부터 가장 작은 오류로 분류하며, 아래로 갈수록 크리티컬한 오류복구

https://msdn.microsoft.com/ko-kr/library/ms176064.aspx

======================================================================================================*/

-- 단일 사용자모드로 변경

ALTER DATABASE [데이터베이스 명] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

 

-- 복구시도

DBCC CHECKDB('데이터베이스 명',REPAIR_FAST)

 

-- 멀티 사용자모드로 변경

ALTER DATABASE [데이터베이스 명] SET MULTI_USER

 

 

반응형

'Database > MSSQL Server' 카테고리의 다른 글

MSSQL Server 설정  (0) 2015.06.25
MSSQL_테이블 복사,데이터 복사  (0) 2015.06.09
MS SQL Server_952 Error  (0) 2015.04.09
MSSQL_파일그룹 백업 및 복원  (0) 2015.04.09
MSSQL_DMV 모음(1)  (0) 2015.04.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.