안녕하세요.
현재 타 외주맡긴 업체가 개발완료한 부분 중 DB를 맡았는데...
요게
Windows Server 2008R2
Xeon X7560 2.26Ghz 인데
상황에 따라선 장비들이 실시간 붙어서 쿼리하는 수가 수백대 이상도 대긴 하는데...
SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
상기 쿼리를 통해 실시간으로 작업중인 내역을 때려보면
상기 내역정도만 돌아도 CPU가
위와 같습니다.
저렇다 보니...CPU Spike가 상당히 심하고 붙은 장비대수에 따라선 90%대에서 머물렀다가 뚝 떨어지는데...
쿼리들을 보니 상황상 계층 컬럼을 써서 IsDescendantOf 등으로 확인하는 부분들이 좀 있어서 크게 수정은 어려워
최소한으로 STATISTICS IO 및 TIME정보로 최소한으로 줄인다고 줄여보기 및
INDEX SCAN 타는 부분들을 SEEK으로 최소한 바꿔보아도 크게 주는 감이 없네요.
또 살펴볼만한게 뭐가 있을까요...
근데 실시간으로 살펴봐도 Spike가 심해서 60%대 일때 실행중인 쿼리가 4~5개 뿐일때 몇개를 보니
Index도 타고 결과도 빨리 나오고...STATISTICS IO Load수도 크리 크지 않으면서도 CPU 사용률이 높은 경우가 있는데...
CPU가 그정도로 처리량이 낮은 건 아닌데...
뭘 살펴봐야 할려나요...
하하..
[추가 : CPU 50일때 상황]
Comment 6
-
항해자™
2016.03.31 21:18
-
dontcryme
2016.04.01 08:25
100%프로 프로시저 환경은 아니긴 한데...
Adhoc 쿼리가 일부 있으나 프로파일러로 실시간 살펴보면
그리 큰 문제요소는 되지 않아 보였습니다.(SP Cache 및 Adhoc에 대한 프로파일러로 보면 CPU가 튈때 전혀 발생하지 않는 경우가 많더라구요)
cpu time에 의한 요소는 저 쿼리를 통한 부분이랑 크게 다를게 없어 보이고...
SQL 버전은 SQL 2008 R2(RTM) x64 사용중입니다.
메모리는 Max설정을 해놓은 상황이며
최소 5~6개 모든 쿼리가 running 상태인 경우에도 50%를 육박하는 경우가 생겨버리네요
-
항해자™
2016.04.01 08:54
시스템 자원 특히 cpu를 순간적 혹은 지속적으로 많이 사용하게 되는 경우는 다양합니다,,
어떤 쿼리가 병렬로 실행되거나 인덱스를 잘 못 타거나 플랜이 예상대로 풀리지 않았거나 디스크 읽기가 대량으로 발생했거나 등등 정확한 분석을 위해 자료를 수집해 봐야 합니다,,
수집 방법은 위에 기록한 방법 이외에 몇가지가 더 있을 수 있겠으나, 분석과 튜닝을 위해 자료 수집은 필수입니다,,, -
항해자™
2016.04.01 08:56
그리고 max memory가 다소 높은 듯 합니다,,
최소 4기가 이상 여유를 두어야 합니다,, -
dontcryme
2016.04.01 09:02
우선 현상황이 그나마 좋은 건? 10개 미만의 쿼리가 실행중에도 50%이상을 육박하기에
STATISTICS IO 를 통해 DISK IO상태를 살펴보고 튜닝작업을 해봤었는데(불필요한 Scan은 seek으로 바꾸고 테이블 갯수가 얼마 되지 않은 경우의 index scan은 그대로 나둠) 크게 나아지는 느낌은 들지 않아서요~ 놓친 부분도 있을 수 있지만..
(Perfmon으로 봤을땐 DISK 병목현상은 정상수치에 해당되더라구요)
일단은 추출한 쿼리들 기준으로 튜닝을 좀더 해봐야겠네요.
답변감사합니다.
p.s : 메모리는 아래 기준으로 맞춰진 상태입니다.
(다른세션 사용자가 붙어서 다른 걸 작업하고있는게 있어 OS메모리가 현재는 좀 높습니다.)
Physical RAM MaxServerMem Setting
2GB 1500
4GB 3200
6GB 4800
8GB 6400
12GB 10000
16GB 13500
24GB 21500
32GB 29000
48GB 44000
64GB 60000
72GB 68000
96GB 92000
128GB 124000 -
minsouk
2016.04.01 09:40
병렬처리...
waitstat을 수집하거나, xevent를 수집해서 문제가 되는 포인트를 잡아내야 할것 같습니다,,,
cpu에 비해 메모리가 적은 것 같아 보이기도 하구요,,, 자세한건 봐야 알겠네요,,,,
100% 프로시저 환경인가요??
sql server 버전은 어떻게 되나요??