Maximum job history Log의 크기로 SQL Blocking이 발생할 수 있다.

아래의 블로그 글에 약간의 살을 붙여서 글을 올립니다.

 

Blocking on sql can occur if the Maximum job history log size is greater than 1000 on the sql server agent

https://blogs.msdn.com/biztalkcpr/archive/2008/05/08/blocking-on-sql-can-occur-if-the-maximum-job-history-log-size-is-greater-than-1000-on-the-sql-server-agent.aspx

 

위의 글에서 언급하는 것과 같이 특별한 이유 없이 (즉, MessageBox나 DTADB의 크기나 부하에 크게 연관이 없이) 서비스 작동 중 BizTalk 서버의 메시지 전달 속도가 간헐적으로 현저하게 저하되는 문제가 발생하는 경우가 있습니다. 이때 문제 원인 확인을 위해서 SQL Profiler 로그를 확인한 결과 다음의 stored procedure에 의해서 SQL Blocking이 발생하고 있는 경우 아래의 내용을 참고하셔서 SQL Agent Job의 Maximum job history log의 size를 설정해 주시기 바랍니다.

 

CREATE PROCEDURE sp_jobhistory_row_limiter @job

SELECT @current_rows_per_job = COUNT(*) FROM msdb.dbo.sysjobhistory with (TABLOCKX) WHERE (job_id = @job_id) ...

 

위의 SP는 MsgBoxPerfCounters_GetPurgeJobInfo SP에 의해서 호출이되며 각각의 BizTalk Agent Job들이 얼마나 호출되었는지를 확인하는 위해서 사용 됩니다.

원본 블로그 글의 경우 이 SP가 만드는 Temp Table의 Row Count가 50000을 넘어가면서 문제가 나타났다고 합니다.

 

다음 내용은 SQL 2005서버에서의 설정 방법 입니다.

 

1. BizTalk Server가 사용하는 SQL Server 에서 아래의 그림과 같이 “SQL Server Management Studio”를 실행 하신 후 왼쪽의 Object Explorer에서 “SQL Server Agent”를 선택 하시고 오른쪽 마우스 버튼을 클릭 하신 후 속성창을 실행하세요.

 

clip_image002

 

2. 아래의 그림과 같은 SQL Server Agent Properties 창에서 왼쪽 항목의 마지막에 있는 “History” 를 선태하세요.

3. 아래의 그림에서 오른쪽의 붉은 박스 내용과 비교하셔서 “Limit size of history log” 항목을 선택하시고 “Maximum job history rows per job” 항목의 값이 1000을 넘지 않도록 설정해 주시기 바랍니다.

clip_image004