mssql latch_ex 와 cpu 점유율 증가에 의한 내부 매커니즘 질문입니다. 0 0 2,669

by 하라 [SQLServer] latch lock 래치 cpu 성능 퍼포먼스 performance [2018.05.29 00:23:36]


시스템 구성 설명

시스템 구성 3군대의 어플리케이션 서버에서 (always on 2 db server (primary > stand by) 프라이머리 DB 쪽으로 업무처리가 들어옵니다.

이 중 19시에서 21시 사이쯤에 일괄 집계 처리가(4만건 정도 oltp 제외) 들어오는데요

isolation level 은 read commited 이며

select 도중 변경작업을  막기위해 단발성 sql 이지만 해당 로우에 대해서 lock 을 걸고 select를 합니다.

집계쿼리는 특정 단말기를 기준으로 하루 판매량을 집계한 일판매총액이며 시간대별로 자동 배치와 수동집계가 함께 들어옵니다.

 

증상 및 로그분석 내용

특정날에만 sql 서버의 cpu 사용률이 비정상적으로 증가를 하였습니다.

메모리 사용률, 피지컬리드, 로지컬리드, 네트웍 트래픽은 정상적인 날과 비교하였을 경우 전부 정상입니다만

cpu 점유대기시간, cpu 사용률 만 증가한 로그를 확인하였습니다.

확장 이벤트 로그만 봤을경우는 정상적인 전날과 동일한 시간대로 비교했을 시 약 10배의 [latch_ex(exclusive) 배타적 래치 와] --래치의 CPU  점유시간

락이걸린 대상 단일 object(테이블)에 대해서 shared lock 대상은(page(블럭)) 이 관찰이 되었습니다.

 

정확한 로그를 올려야지 맞는 상황이지만.. 보안 때문에 올릴수가 없네요...

 

질문

1. mssql 에서 latch_ex 와 shared lock(page) 핫페이지의 반복 액세스에 따른 latch spin이 cpu 의 점유율을 올올린게 아닌가 하는 결론을 내리고 있습니다만 latch_ex 와 shared_lock(page)가  cpu 점유율에 미치는 연관성에 대해서 자세히 아시는분이 있으시면 조언을 구합니다.

 

2. 오라클에서 처럼

select * from 

(select child#, gets, sleeps from v$latch_children

    where name = 'cache buffer chains'

    order by sleeps desc

) where rownum <= 20;

 

select hladdr, obj,

(select object_name from dba_objects where

    (data_object_id is null and object_id = x.obj) or

    data_object_id = x.obj and rownum = 1) as object_name,

    dbarfil, dbablk, tch from x$bh x

where hladdr in

    ('C0000000CDFF24F0','C0000000CE3ADDF0','C0000000CDF18A98')

order by hladdr, obj;

핫블럭을 조회할 수 있는지요?

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입