본문 바로가기

IT Professional/Microsoft SQL Server

Microsoft SQL Server CPU 경합 방지 옵션

SQL  서버를 운영하다 보면 개발 머신이 아닌 경우, 대부분의 서버에서 멀티 CPU 시스템을 사용하게 된다.

당연히 CPU  가 많은 경우가 CPU  가 적은 경우보다 빠르겠지만, 그렇지 않은 경우가 몇가지 있는데, 병렬 처리로 인한 Deadlock 발생,  그리고 동일한 자원의 사용을 위한 경합에 의한 장애가 발생하는 경우이다.

 

 먼저 CPU 의 병렬 처리로 인한 Deadlock 은 아래를 참고...

http://masterjoe.tistory.com/entry/Deadlock-의-진단과-해결

 

CPU Core 의 개수에 준하게 TempDB 의 파일을 만든다.

 

 그리고 일반적으로 해야 하는 설정이지만, 빼먹는 설정이 바로.... Temp DB  의 설정이다. 일단 설정의 방법 부터 알아 보자.

1. 각 서버의 CPU Core  의 개수에 준하게 TempDB 의 파일을 만든다. Hyper-Thread 에 대한 논리적 Core 수는 아니다. Htyper-Thread 와 Mutil Core 와의 관계는 다음 Article 에서 이야기 하도록 하자.

2. 각 TampDB 의 파일은 초기 크기를 넉넉하게 1GB 정도로 설정한다. 단, 이 때의 크기는 동일하게 설정되어야 한다.

 

CPU 별로 TempDB 의 파일을 할당해 주지 않은 경우 성능의 영향이 발생하게 된다.

 

 

 적지 않은 로직이 SQL 서버 상의 Stored Procedure 로 동작하는 현재, 실제로 복잡한 프로그램 로직에는 TempDB 의 사용 빈도가 적지 않다. 이 경우 CPU  별로 TempDB 의 파일을 할당해 주지 않은 경우 성능의 영향이 발생하게 된다.

 

 또한 추가적으로 사용 중 간간히 MS SQL 내부 오류로서 602 오류가 발생하는 경우가 있다.

 MS 에서는 패치로 해결하라고 하는 경우가 있는데, 이 패치는 아래를 살펴 볼 것...

 

http://support.microsoft.com/kb/937343/ko

 

로직 수행 중에 없어진 Table 을 Temp DB 내에서 찾는 형태의 오류 로그가 발생하는 경우를 볼 수 있다.

 

 

하지만 로그를 잘 살펴 면, SQL 서버의 로직 수행 중에 없어진 Table 을 Temp DB 내에서 찾는 형태의 오류 로그가 발생하는 경우를 볼 수 있다. 이 경우는 패치를 설치하는 Risk 와 서비스 다운을 감수하지 않고 단순히 TempDB 의 파일만 개수를 CPU Core 만큼 조정해 주므로서 문제를 해결할 수 있다.

 

 실제 사례로서 해당 이슈는 TempDB  의 파일 개수 조정으로 해결된 사례가 있다.

 

시스템의 성능 뿐만 아니라 가용성에도 매우 중요한 영향을 미치는 사례

 

 따라서 해당 설정은 시스템의 성능 뿐만 아니라 가용성에도 매우 중요한 영향을 미치는 사례 이므로, 필히 설정하도록 하자.