MS-SQL Server

테이블 컬럼 개수의 차이가 Insert/Update 쿼리의 CPU 부하에 영향을 줄까?

임현수 2011. 7. 23. 21:56


1. 개요
운영 중인 DB 서버 중 CPU 사용률이 높은 서버가 보여서 확인해보니 최근에 업데이트 쿼리가 추가되었더군요.
문제가 된 프로시져는 단순히 한 테이블에 업데이트하는 쿼리만 있었습니다. 단, 변경되는 컬럼수가 많다는 점이
눈의 띄였습니다. 쿼리의 실행수도 높기도 했지만 컬럼수가 많아서 CPU 사용량이 높아진 것은 아닌지 궁금해졌습니다.
그래서~ 아래와 같이 테스트를 진행해보았습니다.

2. 테스트 시나리오
 > 10만개의 데이터를 100개의 세션에서 1000개씩 처리하는 동안 CPU 사용률과 처리시간 비교 (SQLQueryStress를 사용)
 > 실제 사례와 유사하게 Insert/Update 대상 컬럼은 int 타입으로만 구성
 > Insert/Update 대상 테이블의 컬럼수는 1, 10, 50, 100, 150, 200, 300개로 변화를 줌
 > 각 테스트 종료 후 Checkpoint, DBCC DROPCLEANBUFFERS 수행을 통하여 다음 테스트에 영향을 안주도록 함

3. 테스트 내용
3-1. SQLQueryStress 실행 화면 (Insert/Update 에 대해서 컬럼별로 수행)
     



3-2. Update 테스트 결과
   


3-3. Insert 테스트 결과
   


4. 결론/의견
 > [L님] Insert/Update 쿼리는 변경대상 컬럼수에 큰 차이 없이 CPU 사용을 많이 사용함. CPU 사용률을 줄이고 싶을 경우, 
    업데이트 등 DML 쿼리의 호출수르 줄여야 함. 테이블 분할로는 큰 개선을 보기 힘듦.
 > [K님] 대상 컬럼수가 큰 영향을 안주는 이유는 레코드가 한 페이지내에 있기 때문에 컬럼수가 적거나 많은 것이 크게 영향을
    안주는 것으로 보임.

5. 참고
 > 고정형 컬럼인 int 만으로 테스트를 진행하였기 때문에 가변형 컬럼을 가지고 할 경우 다른 결과가 나올 수 있음
 > 테스트 스크립트