Database/MSSQL work
쿼리저장소
웨이칭
2020. 11. 25. 17:01
쿼리스토어는?
명령문을 컴파일/분석한다 -> 컴파일 후에 각 명령어를 실행하고 통계 알람을 받는다.
-> 해당되는 통계를 메모리에 캐시하고 쿼리와 실행 계획을 집계한다. -> 정기적으로
설정에 따라 데이터를 새로 고친다.
SQL프로파일러보다 성능에 부화를 조금밖에 주지 않는 이유는? 비동기로 실행이 된다.
- 3~0.5% 정도의 성능에 영향
- 프로파일러는 40~15%이상의 성능에 영향을 준다.
옵티마이저는 통계를할떼 테이블정보와 인덱스정보를 수집한다. 쿼리 저장소는 변경전, 후의 값을 가지고있어 분석하기 더 편하다.
장점 : 실행계획이 변경되서 성능 저하 원인을 찾기 편함. 인덱스 변경, 컬럼 속성이 변경 된 다음 쿼리속도(실행계획 등)을 확인하고 비교 가능하다.
즉 변경 전/후를 비교해서 무엇때문에 늦어지는지를 확인 가능하다는 것.
그리고 문제가 발생 할 때 그에 따른 쿼리 목록을 보여주면서 해당 자원 사용량도 보여준다.
실행계획 변경을 모니터링 가능하다.
쿼리튜닝 자동모드는
1. 데이터베이스 옵션에서 작동모드를 읽기/쓰기로 바꿈
2. 모니터링은 15분에 한번씩 통계수집은 1시간. 30일 지난녀석은 날려버림으로 셋팅이 변경됨
-- 데이터베이스를 새로고침을 해줘야 '쿼리저장소'가생김
--쿼리 저장소 설정 옵션 보기
SELECT * FROM SYS.database_query_store_options
-- 실행계획 확인하는 쿼리문
SELECT
qsqt.query_text_id,
qsqt.query_sql_text,
qsp.plan_id,
qsq.*
FROM SYS.query_store_plan AS qsp
INNER JOIN SYS.query_store_query AS qsq
ON qsp.query_id = qsp.query_id
INNER JOIN SYS.query_store_query_text AS qsqt
ON qsq.query_text_id = qsqt.query_text_id