- DBA 업무시 필요한 쿼리2015년 06월 04일 14시 20분 14초에 업로드 된 글입니다.작성자: DE 군고구마반응형
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 다음글이 없습니다.이전글이 없습니다.댓글