필드 가 3개가 있는 간단한 A 라는 테이블 이 있습니다.
프로시저에서 몇가지 단계를 거쳐
A 라는 테이블로 insert 작업이 2000 여번 일어납니다. 인덱스는 전혀 잡혀있지 않구요.
테스트 서버에서 진행할때는 경과시간이 1초가 채 되지 않았는데
운영서버에서 실행하니 무려 40초가 나옵니다..... ㅠㅠ
작업되는 대상 테이블은 이 insert 말고는 전혀 다른곳에서 사용되지 않으며
실서버가 그렇다고 사용량이 많은 서버인것도 아닙니다. cpu 사용률이 10%가 채 되지 않습니다.
실행계획상으로는 두 서버의 차이가 없습니다.
그래서 SET STATISTICS TIME ON 을 걸고 2만여건데이타를 insert into 로 실행해 해보았더니
테스트 서버는 CPU 시간 = 515밀리초, 경과 시간 = 514밀리초
실서버는 CPU 시간 = 734밀리초, 경과 시간 = 4009밀리초
라는 수치가 나옵니다. ...
또 단순 insert values 구문 10 여개를 실행하였더니
테스트 서버에서는 첫번째 구문에서만 경과시간이 잡히고 그 이후 실행구문은 모두 0인 반면
=====================
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 9밀리초
(1개 행이 영향을 받음)
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 0밀리초
(1개 행이 영향을 받음)
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 0밀리초
(1개 행이 영향을 받음)
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 0밀리초
(1개 행이 영향을 받음)
====================================
실서버에서는 10개의 구문 모두가 경과시간이 잡혀있었습니다.
====================================
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 38밀리초
(1개 행이 영향을 받음)
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 25밀리초
(1개 행이 영향을 받음)
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 17밀리초
(1개 행이 영향을 받음)
SQL Server 구문 분석 및 컴파일 시간:
CPU 시간 = 0ms, 경과 시간 = 0ms.
SQL Server 실행 시간:
CPU 시간 = 0밀리초, 경과 시간 = 30밀리초
(1개 행이 영향을 받음)
====================================
대체 왜 이럴까요.
어떤 부분을 확인해야할지 감도 안옵니다.
고수님들의 도움을 기다립니다. ㅠㅠㅠㅠㅠ.
Comment 1
-
History
2014.03.06 17:41
실서버에서 cpu는 낮더라도 실제로 많은 io가 일어날수도 있으니까여