SQL Server 이야기

SQL Server 2005/2008에서 작업 진행률을 확인하는 방법

늘푸르른나 2010. 6. 20. 00:46

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초) 단위로 보여 줍니다. 하지만, 모든 쿼리문 실행 작업에 대해서 진행률을 확인해 볼 수 있는 것은 아닙니다. 일반적인 쿼리문에 대해서는 진행률이 표시되지 않으며 다음의 작업들에 대해서만 진행률이 표시됩니다. 

  • BACKUP
  • RESTORE
  • ALTER INDEX ... REORGANIZE (not REBUILD)
  • ROLLBACK
  • DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKFILEGROUP
  •  

    상기에 열거된 작업들이 실행되고 있을 때 작업의 진행률을 확인해 보는 방법은 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를 통해 표시되는 작업의 진행률과 예상 소요 시간은 어디까지나 추정치일뿐 절대적인 값이 아니라는 것입니다. 따라서, 작업의 진행 상태를 대략적으로 참고해 본다는 개념으로 사용해야지 절대적인 값으로 맹신하는 우를 범하지 말아야 하겠습니다.