“SQL Server를 X-ray로 들여다본다.”
SQLBigEyes Professional V7 출시
“보다 완성된 버전의 SQL Server 성능 모니터링, 진단 분석, 튜닝용 솔루션”
사용자 피드백 반영, 사용 편의 개선, 내부 성능 향상 그리고 SQL Tuning 및 Troubleshooting 기능을 보강한 SQLBigEyes Professional V7을 출시합니다. SQL Server를 중요한 업무의 DBMS로 운용하고 있는 고객들께 V7은 더 높은 투자 가치를 제공함과 동시에 실무자에게 보다 실질적인 도움을 줄 수 있는 솔루션입니다.
제품에 대한 소개나 데모가 필요하시면 홈페이지의 서비스 문의하기 혹은 왕눈이 아빠 김정선에게 연락 주십시오. 아래에서 V7의 새로운 핵심 기능들을 간단히 살펴볼 수 있습니다.
[ .NET Framework 4.5 이상 필요 ]
SQLBigEyes Professional V7은 특정 기능이 .NET Framework 4.5를 사용해서 구현되었으며 응답 속도 및 처리 성능에 도움을 주는 새로운 기능을 적극적으로 도입했습니다.
핵심 신 기능
Azure SQL 환경 지원
Azure의 SQL Managed Instance 환경도 지원합니다, V6에서 이미 고객사례가 나왔으며 V7부터 본격적으로 지원을 시작합니다. Azure의 SQL Database의 경우는 기본 환경 상 여러가지 제한이 있으나 지속적으로 반영을 해 나갈 계획입니다
메인 대시보드 변화
- 차트를 2D로 변경했습니다, 표시 공간을 더 넓게 사용해서 시각적으로 정보를 더 명확하게 나타내는 장점이 있습니다 (옵션으로 이전처럼 3D 차트도 지원됩니다) .
- 경고 발생 시 나타나는 폭탄 아이콘 색깔을 좀 더 명확하게 보이도록 변경했습니다.
- Scheduler(CPU) 차트와 고부하 쿼리 차트의 Y축 레이블을 표시합니다(이전에 고객들이 이 값에 의미를 몰라서 질문이 많았습니다)
경고
■ 경고별 Alarm 여부도 Config 지정
특정 경고의 Alarm을 해지하고 싶을 때 매번 메인 메뉴의 설정을 변경해야 했습니다, 영구적으로 반영하기 위해 Config에 미리 지정할 수 있도록 지원해달라는 요청을 받아 이를 적용했습니다.
아래 그림과 같이 Config 파일에서 경고 유형별로 Alarm 여부를 지정합니다.
■ 고부하 쿼리 발생현황 차트의 경고 조건 추가
기존에는 쿼리 실행 메모리 대기가 발생하거나 지정한 시간을 초과하는 쿼리에 대해서 경고가 발생했습니다. 여기에 추가로 이전 3번 수집된 쿼리 개수의 이동평균 값보다 N배수 이상 증가한 경우에도 경고가 발생하도록 설정할 수 있습니다.
아래 그림과 같이 <WarnHeavyQuery> 요소에 N배수 값을 지정합니다, 디폴트는 3배입니다.
SQLBigEyes 실행 중에 일시적으로 변경하고 싶은 경우 아래 그림과 같이 “경고 이력 및 관리” | “경고 기준 정의” 화면에서 조정할 수 있습니다.
■ Job 실패 경고(메뉴 옵션)
5분 단위로 Job 실패 이력을 확인하고 경고를 표시합니다.
참고. 기존에 표시되던 최근 Job 이력 화면은 V7에서 제거되었습니다.
중대(Critical) 경고 대시보드
■ 중대 경고 유형
① SQL Dump 발생(옵션 설정 필요)
② Drive 가용량 부족(옵션 설정 필요)
③ tempdb 공간 부족
④ Data Page(DB) 손상
⑤ 쿼리메모리 대기
⑥ Log DB 연결 실패
위와 같이 중대한 것으로 평가되는 경고 발생 시에 아래 그림과 같이 “중대 경고” 영역에 메시지를 표시합니다. 경고가 두 개 이상인 경우 강조 상태가 일정 시간 간격 순차적으로 이동됩니다.
Log DB 서버 중단/재시작 시 Log 저장 자동 재개
일반적으로 Log DB용 SQL Server가 중단되거나 서비스에 이상이 생기는 경우 Log 저장 작업이 실패합니다. SQLBigEyes는 일시적인 오류인 경우에도 처리가 되도록 일정 횟수(기본 3회)의 재시도 로직을 가지고 있습니다. 그러나 서비스가 중지되거나 재 시작되는 경우에는 재시도가 모두 실패하며(아래 그림 참조) 이후 “수동”으로 [Log DB 자동 저장] 옵션을 다시 켜주어야 했습니다. 특히 야간이나 새벽과 같이 운영자가 관리하지 않은 시간대에 운영 서버에 성능 이슈가 생기는 경우 Log 저장이 껴져 있으면 차후 Log 정보가 없어서 문제 분석에 어려움이 있었습니다.
SQLBigEyes Professional V7은 우선 1) Log 저장 재시도가 모두 실패하는 경우 “중대 경고” 영역에 아래 그림과 같이 표시되며 이후 2) 서비스 가용 여부를 주기적으로 체크해서 [Log 저장] 옵션을 자동으로 켜줄 수 있습니다. 다만 “경고 이력” 이나 “대기 이력”의 경우 시점에 따라 자동으로 켜지지 않을 수도 있습니다.
인덱스 Tipping Point(한계점) 범위 표시
인덱스 튜닝 시에 필요한 “열 통계 분석”에서 인덱스(Nonclustered)가 검색 조건으로 사용될 수 있는(반대로 스캔으로 전환되지 않는) 한계 행 수의 범위를 참조 정보로 제공합니다(아래 그림 참조). 예를 들어 아래 Sales.SalesOrderHeader의 경우 검색 행 수가 171~226 건 이하일 때 인덱스 검색이 될 수 있음을 의미합니다. (물론 오차 범위는 존재합니다)
또한 특정 “열 통계”의 [Analyze]를 수행하는 경우 아래 그림과 같이 “통계 히스토그램” 차트에서 Y축의 “TippingPoint_Upper/TippingPoint_Lower”로 한계 범위를 시각적으로 볼 수 있도록 제공합니다. 이와 같은 정보를 이용하면 특정 열에 인덱스를 생성/수정하는 경우 인덱스 검색으로 사용될 수 있는지를 사전 예측하는데 도움이 될 수 있습니다. 주의) 절대 기준은 아니며 오차를 감안해 참고 정보로 사용합니다.
고부하 쿼리 모니터링
■ Grid 출력 성능 개선
Grid에 새로운 데이터 출력이나 스크롤 시에 처리 속도가 느리고 깜빡임이 많이 있었습니다, 이런 부분을 많이 완화하고 성능이 개선되었습니다.
■ Window 위치 저장/복원 및 화면 자동 표시
“고부하 쿼리 모니터링” 화면을 상시 표시해 두는 경우 SQLBigEyes를 재 시작했을 때 자동으로 화면이 표시되고 이전 좌표로 복원해주면 좋겠다는 사용자 피드백에 따라 해당 동작을 지원합니다.
“고부하 쿼리 모니터링” 화면 자동 표시 여부는 아래와 같이 Config 파일의 “AutoShowHeavyQueryDetails” 요소를 true로 설정합니다
자동 표시 여부와 상관없이 “고부하 쿼리 모니터링” 화면이 처음 표시되면 이전 좌표로 복원됩니다.
■ 고부하 쿼리 임계값 Config 지정
고부하 쿼리 임계 값을 조정하고 싶다는 일부 고객들의 요구가 있었습니다. 이전까지는 화면에서 임시로 조정이 가능했습니다만 이제 아래와 같이 Config에 지정해서 영구적으로 조정이 가능합니다.
■ 쿼리 TOP 수 Config 지정 (디폴트 10)
고부하 쿼리 발생 시 각 유형(Duration, CPU, etc.)별로 10개씩(디폴트) 최대 50까지 검색이 됩니다. 고부하 쿼리가 대량으로 발생하는 경우 위 값을 상향 조정해서 더 많은 쿼리를 검색할 수 있습니다.
기존에는 아래 그림처럼 “고부하 쿼리 모니터링” 창의 “항목별 TOP 건 수”에서 조정할 수 있었습니다
그 값을 영구적으로 변경하고 싶은 경우 아래와 같이 Config 파일에서 수정하면 됩니다
■ SQL Agent 작업 표시 제외 (옵션)
Agent로 실행되는 작업을 화면에 표시하지 않도록(Log DB에는 저장) 옵션을 조정할 수 있습니다.
■ 논리적 쓰기 I/O 출력
기존의 쿼리 별 읽기I/O 뿐만 아니라 (논리적)쓰기 I/O도 표시됩니다. 쿼리에서 쓰기가 발생하는 경우와 그 대략적인 크기를 평가하는데 도움이 될 수 있습니다.
■ 세션 별 리소스 대기 정보 (2016 이상)
고부하 쿼리가 호출된 세션에 리소스 대기 유형별 집계 정보를 확인할 수 있습니다. 아래와 같이 [세션대기] 열에 [보기]를 클릭하면 상세 정보 화면이 표시됩니다.
■ 원격 쿼리 세션 정보
원격 쿼리가 잠금 등의 원인으로 대기(OLEDB)하는 경우 해당 쿼리가 원격 서버에서 어떻게 호출되고 실행 중인지 쉽게 파악할 수 있도록 지원합니다(참고. 원격 서버에도 SQLBigEyes 라이선스가 구성되어 있어야 합니다).
OLEDB 대기가 발생하면 아래와 같이 “대기리소스”에서 원격서버와 괄호()안에 원격 SPID 정보를 볼 수 있습니다
해당 세션의 [대기리소스] 값을 클릭하면, 아래 그림과 같이 “대기 중인 원격 세션 정보” 창이 표시됩니다. 여기서 원격 서버에의 해당 세션(쿼리)의 SPID, 성능정보, 대기정보, 차단세션ID, 해당쿼리 정보 등을 확인할 수 있으며 이를 통해 원격 쿼리가 어떻게 호출/실행되고 있고 어떤 대기 이슈가 있는지를 빠르게 파악할 수 있습니다
■ 화면 출력 일시 정지 후 해제 동작 변경
“화면 출력 일시 정지” 설정 후 다시 해제할 때 기존에 추가된 행들이 화면이 표시됩니다
차단 체인 정보
참고. 차단 발생 시 자동으로 생성된 정보 파일은 디폴트로 <SQLBigEyes설치폴더>\“BlockingLog”폴더에 저장됩니다.
■ 백그라운드 혹은 비동기 처리에 의한 차단 관계 표시
백그라운드 프로세스 혹은 비동기 처리에 의해서 수행되는 프로세스가 차단 관계에 포함되는 경우 해당 정보 전체가 표시되지 않는 문제를 조치했습니다. 차단 발생현황 차트도 반영되었습니다.
■ 차단 정보 저장 파일과 검색
기존의 xml로 저장된 차단 정보 파일은 편집기나 브라우저에서 xml 형태로 정보를 확인하는 방법이 불편했으며 내용 검색을 지원하지 않아 과거 정보 추적에 어려움이 있었습니다. V7에서는 아래와 같이 차단 정보 파일 목록을 제공하고 파일 내용 및 키워드 검색을 통해서 원하는 내용을 보다 쉽게 편하게 확인해 볼 수 있습니다.
■ 키워드 검색
특정 키워드(예. 테이블명 등) 검색을 통해 원하는 내용을 포함한 차단 파일을 검색할 수 있습니다. “총 검색 파일 수” 정보와 파일 목록의 선택 하이라이트를 통해서 해당 파일을 알 수 있습니다.
또한 [검출 빈도 출력] 옵션을 이용하면 각 파일에서 해당 키워드의 검출 빈도도 출력됩니다.
■ 차단 상세 정보 보기
차단 내용을 확인하고 싶은 파일을 선택하면 이전처럼 단순 xml이 아닌 차단 체인 정보 형태로 표시되므로 보다 편리하고 내용 분석도 용이해 졌습니다.
■ 잠금 테이블명 혹은 OBJECT명 확인
대기 분석
■ 경고 시 상세 정보 자동 수집 및 Log 저장(옵션)
대량 혹은 심각한 리소스 대기로 인해 경고가 발생하는 경우 상세 정보(쿼리 포함)를 Log DB에 자동 저장하도록 옵션을 설정할 수 있습니다.
Log DB에 저장된 과거 리소스 상세 정보는 아래와 같이 “고부하 쿼리 – 이력 분석” | “대기 경고 상세정보 검색” 창에서 검색 후 확인할 수 있습니다.
WaitInfoWarning 테이블에 Log가 저장됩니다. 테이블의 현재 용량도 아래와 같이 확인 가능합니다.
고부하 (쿼리/대기/경고) 이력 분석
■ Log 통합 뷰 지원
기존의 개별 창이나 화면으로 분리되어 있던 Log 이력 분석 화면을 단일 화면에서 전체를 보고 분석할 수 있도록 지원합니다. 성능 이슈가 발생한 과거 특정 시점에 어떤 이슈들이 있었는지 종합적으로 평가할 수 있습니다.
■ 특정 세션ID로 고부하 쿼리 이력 검색
서버 추적
■ Duration 필터 조건 지원
서버 추적에서 특정 기간과 최대용량 제한으로 전체 쿼리를 추적(수집)할 수 있습니다. V7은 여기에 추가로 Duration 조건을 필터로 지정해서 특정 시간 이상 실행된 쿼리들만 추적해서 파일(.trc)에 저장할 수 있습니다.
■ Trc 분석에 Drag&Drop 지원
서버 추적으로 수집된 파일을 가지고 분석을 할 때 [추적파일] 의 버튼을 클릭해서 파일 경로를 찾아서 지정할 필요없이 탐색기 등에서 바로 Drag&Drop으로 지정할 수 있습니다.
별첨. V6 후반에 추가되어 User Guide에 설명되지 않은 기능
현재 요청 작업 모니터링
■ 쿼리 (실행) 메모리 모니터링
Sort, Hash, Merge, Spool 과 같은 연산을 포함한 쿼리에서 실행 메모리를 얼마나 어떻게 사용하는지, 메모리 할당에 문제는 없는지, 전체 쿼리 실행 메모리의 상태는 어떻게 되는지 등을 모니터링할 수 있습니다. 이 기능을 이용하면 (고부하 쿼리 발생현황 차트에서) 쿼리 메모리 대기가 발생하거나, 대량의 쿼리 메모리 소비가 발생하는 경우 등에서 해당 이슈를 분석하는데 도움이 될 수 있습니다.
■ 트랜잭션 보유 휴면 세션 모니터링
“휴면(dormancy) 세션”이란 쿼리 실행이 완료되었음에도 연결이 종료되지 않고 sleeping 상태로 남아 있는 세션을 의미합니다. 만일 이 세션이 트랜잭션까지 종료되지 않은 상태라면 사용한 리소스에 잠금을 보유하고 있고 이로 인해 다른 세션의 잠금을 차단하는 부작용도 일으킬 수 있습니다.
참고. 왼쪽 그림과 같이 “차단 체인 정보” 화면에서는 세션특성 열에 “Tx 미완료”라는 표시를 통해서 트랜잭션을 포함한 휴면 세션임을 확인할 수 있습니다. |
트랜잭션을 보유한 휴면 세션 전체 리스트를 확인해서 만일 비정상적인 종료 및 호출로 인한 이슈라면 이를 해결하기 위한 자료로 참조할 수 있습니다, 더불어 해당 세션이 어떤 잠금을 보유하고 있는지, 차단을 유발하지 않는지 등을 추가로 분석하는데 도움이 됩니다.
이상입니다.