파워쉘이 포함된 예약작업 만들기
robocopy 소스 경로 타겟 경로 /r:1 /s /z /j /LOG:"로그파일.log"
경로\InsertLogFile.ps1 "시스템 이름"
robocopy을 이용하여 백업 파일들을 이관하는 스크립트를 작성하였고 robocopy에서 발생하는 로그 파일을 모니터링하고자 하는 데이터베이스에 로그를 기록하도록 InsertLogFile이라는 ps 파일을 작성하였습니다. 이 cmd를 이용하여 각 시스템마다의 백업 파일을 관리하려고 Agent에 등록하였습니다.
그러나 작업을 병렬로 처리하기 위해 시스템마다 작업을 등록하였고 이를 동시에 수행하려고 하였습니다. 네트워크 및 I/O의 한개치까지 사용하려고 하였는데 문제가 발생하였습니다.
동시 작업 갯수 제한
powershell 이 포함된 예약작업을 여러개 수행할 경우 2개까지는 Executing 상태가 되지만 그 이후의 작업들은 Waiting for worker thread 상태가 되며 대기하게 됩니다.
이 제약은 msdb.dbo.syssubsystems 에 설정되어 있습니다.
SELECT s.subsystem_id,
s.subsystem,
m.[text] AS [description],
s.max_worker_threads
FROM msdb.dbo.syssubsystems s
INNER JOIN msdb.sys.messages m
ON s.description_id = m.message_id
AND m.language_id = 1033 --English
PowerShell 항목에 max_worker_threads 컬럼을 보면 현재는 5로 설정이 되어 있지만 기본값이 2입니다. 2로 설정이 되어 있기 때문에 PowerShell으로 작성된 예약작업은 동시에 2개까지만 수행이 되고 있었던 것입니다. 이 값을 수정해 주면 동시에 수행되는 작업을 늘릴 수가 있습니다.
수정방법은 아래와 같습니다. msdb.dbo.syssubsystems 테이블을 수정하고 subsystems_id 가 12인 즉, PowerShell 항목의 max_worker_threads 값을 2에서 5로 수정하는 스크립트입니다.
UPDATE msdb.dbo.syssubsystems
SET max_worker_threads = 5
WHERE subsystem_id = 12
이렇게 수정하고 작업을 수행하면 동시에 5개까지 수행되는 것을 확인할 수 있습니다.
'운영 > 운영 업무 자동화' 카테고리의 다른 글
curl을 이용하여 Teams에 메시지 보내기 (0) | 2022.03.29 |
---|---|
SSMS에서 제공하는 기본리포트(Standard Reports) 구독 (0) | 2019.07.04 |
Job Scheduler Script 생성하기 (0) | 2014.08.27 |
Mail sending problem from sql server (0) | 2014.05.29 |
SQL Server Database Mail 삭제 프로시저 (0) | 2014.03.25 |