SQL Server 2000까지는 Backup/Restore, DBCC CHECKDB 등의 작업을 실행했을 때 작업의 진행률과 예상 소요 시간 등을 확인해 볼 수 있는 방법이 제공되지 않았습니다. SQL Server 2000이 처음 출시되던 때만해도 일반적으로 데이터베이스의 크기가 수십GB를 초과하지 않는 수준이었기 때문에 Backup/Restore, DBCC CHECKDB 등의 작업이 그리 오래 실행되지 않았으며 이런 제약 사항이 크게 문제가 되지는 않았습니다. 하지만, 오늘날처럼 데이터베이스의 크기가 수백GB 이상(경우에 따라서는 수TB까지)으로 커지는 상황에서는 Backup/Restore, DBCC CHECKDB 등의 실행 시간이 기하급수적으로 증가하여 몇 시간 이상 소요되는 경우가 비일비재하기 때문에 작업의 진행 상태를 확인해 볼 수 있는 방법이 없다는 것은 큰 취약점일 수밖에 없으며 이로 인해 많은 불편함을 겪어야 했습니다.
SQL Server 2005부터는 이런 불편함을 해소하기 위해 실행 시간이 많이 소요되는 주요 작업들에 대해서 진행률과 예상 소요 시간 등을 확인해 볼 수 있는 방법이 제공되는데 DMV(Dynamic Management View)의 하나인 sys.dm_exec_requests의 percent_complete, estimated_completion_time 칼럼 값을 통해 확인해 볼 수 있습니다. percent_complete 칼럼은 작업의 진행률을 % 단위로 보여 주고 estimated_completion_time 칼럼은 예상 소요 시간(작업 완료시까지 소요될 예상 시간)을 millisecond(1/1000초) 단위로 보여 줍니다. 하지만, 모든 쿼리문 실행 작업에 대해서 진행률을 확인해 볼 수 있는 것은 아닙니다. 일반적인 쿼리문에 대해서는 진행률이 표시되지 않으며 다음의 작업들에 대해서만 진행률이 표시됩니다.
상기에 열거된 작업들이 실행되고 있을 때 작업의 진행률을 확인해 보는 방법은 sys.dm_exec_requests DMV를 조회해 보는 것이며 해당 작업이 실행된 세션의 ID(SPID)를 알고 있다면 다음과 같은 형태의 쿼리문을 실행함으로써 진행률과 예상 소요 시간을 확인해 볼 수 있습니다.
select session_id, start_time, status, command, percent_complete, estimated_completion_time
from sys.dm_exec_requests
where session_id = 53
상기와 같은 형태의 쿼리문 실행시 다음과 같은 결과를 얻을 수 있는데, 다음의 예에서는 BACKUP 작업이 현재 28.37345% 진행된 상태이며 완료시까지 대략 18,352ms(약 18초)가 추가적으로 소요될 것으로 예상해 볼 수 있습니다.
지금까지 살펴본 기능은 참으로 매력적인 기능이 아닐 수 없습니다. 하지만, 사용시 주의할 점이 있는데 그것은 바로 sys.dm_exec_requests를 통해 표시되는 작업의 진행률과 예상 소요 시간은 어디까지나 추정치일뿐 절대적인 값이 아니라는 것입니다. 따라서, 작업의 진행 상태를 대략적으로 참고해 본다는 개념으로 사용해야지 절대적인 값으로 맹신하는 우를 범하지 말아야 하겠습니다.
'SQL Server 이야기' 카테고리의 다른 글
SQL Server 2005/2008에서 트랜잭션 로그 파일(.ldf)을 재생성하는 방법 (0) | 2010.06.24 |
---|---|
DBCC CHECKDB를 이용하여 손상된 데이터베이스를 복구하는 방법 (1) | 2010.06.22 |
SQL Server 클러스터 리소스의 상태 체크(LooksAlive/IsAlive Check) 방식 (0) | 2010.05.05 |
SQL Server 2008 클러스터에 Service Pack을 Rolling Update하는 방법 (0) | 2010.04.29 |
SQL Server 2008 업데이트(서비스 팩 포함) 제거 방법 (0) | 2010.04.25 |