본문 바로가기

Database

(123)
X-event X-event 장점 : - 앞의 쿼리스토어보다 성능에 부하가 덜 되도록 한다. (최대 1% 미만) - 시스템에 큰 부하없이 지속적 추적 가능 형식 : CREATE EVENT SESSION[이름] ON SERVER ADD EVENT 이벤트를 할 항목 WHERE( 필터링 ) ADD TARGET package0.event_file(SET FILENAME='파일이름') WITH (STARTUP_STATE=ON) ALTER EVENT SESSION [이름] ON SERVER STATE = START; ALTER EVENT SESSION [이름] ON SERVER STATE = STOP; [EX, 자동튜닝 코드] CREATE EVENT SESSION [Not Plan] ON SERVER ADD EVENT QDS.A..
SQL 서버의 튜닝 - 튜닝이란... ** 대부분의 튜닝은 인덱스에 문제가 있다.(병목현상을 찾아서 해결 하는 경우가 대부분이다) -> 병목현상 해결은 하드웨어는 한계가 있으므로 튜닝을 해야한다. 튜닝은 인덱스(색인)을 잘 타서 통제하는 것이라고 볼 수 있다. 튜닝을 쓰는 이유!!!!!!!!!! : DB서버의 응답시간과 처리량에 대하여 요구사항에 맞게 빠르게 처리하기 위해서 튜닝을 한다. 튜닝방법 1. 네트워크 : 성능좋은 것과 트래픽(전달해주는 데이터라고 봄)을 줄인다. 랜케이블은 에러가 많이나므로 서버 랜케이블은 아주 좋은것을 쓰는경우가 많음 2. 디스크 속도 및 I/O 속도(낮춤) 3. CPU 처리량(낮춤) - 튜닝을 하는 방법 1. SQL Server Profiler -> 쿼리 튜닝/잠금 을 실행함 2. Window..
쿼리저장소 쿼리스토어는? 명령문을 컴파일/분석한다 -> 컴파일 후에 각 명령어를 실행하고 통계 알람을 받는다. -> 해당되는 통계를 메모리에 캐시하고 쿼리와 실행 계획을 집계한다. -> 정기적으로 설정에 따라 데이터를 새로 고친다. SQL프로파일러보다 성능에 부화를 조금밖에 주지 않는 이유는? 비동기로 실행이 된다. - 3~0.5% 정도의 성능에 영향 - 프로파일러는 40~15%이상의 성능에 영향을 준다. 옵티마이저는 통계를할떼 테이블정보와 인덱스정보를 수집한다. 쿼리 저장소는 변경전, 후의 값을 가지고있어 분석하기 더 편하다. 장점 : 실행계획이 변경되서 성능 저하 원인을 찾기 편함. 인덱스 변경, 컬럼 속성이 변경 된 다음 쿼리속도(실행계획 등)을 확인하고 비교 가능하다. 즉 변경 전/후를 비교해서 무엇때문에 ..
GUI로 sql 쿼리 자동 튜닝 설정, 강제계획 실행, 추적(쿼리저장소) 쿼리튜닝 자동모드는 1. 데이터베이스 옵션에서 작동모드를 읽기/쓰기로 바꿈 2. 모니터링은 15분에 한번씩 통계수집은 1시간. 30일 지난녀석은 날려버림으로 셋팅이 변경됨 -- 데이터베이스를 새로고침을 해줘야 '쿼리저장소'가생김 새로고침 한 후 해당 데이터베이스의 뷰에 들어가 1000개행 보기를 다 눌러버린다 쿼리저장소 -> 회귀된 쿼리 로 15분 뒤에 확인한다. 하기 전 하고난 후 이렇게 쿼리저장소의 목록을에서 그래프가 생긴다. 고변형 쿼리에서 쿼리아이디에 따른 막대를 클릭 한 후 '계획 강제 적용'을 누르면 강제적용이 된다. 테이블을 새로고침하고 인덱스의 비율/페이지 등 다른점을 확인한다 '강제계획이 포함된쿼리'를 열어보면 아까 선택한 쿼리id와 강제 계획된 sql텍스트를 볼 수 있다. 이 외에도 추..
SQL 자동튜닝 설정 코드 -- 10초에 한번씩 사용자가 던지는 쿼리문들을 자동으로 튜닝을 할지 말지 확인을 한다. 지금 자동튜닝되는 쿼리가 있는지 확인하는거 SELECT reason, score, script = JSON_VALUE(details, '$.implementationDetails.script'), planForceDetails.*, estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount) * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage)/1000000, error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCo..
PLAN CACHE에대해 (예상실행계획)내부 결과를 반환하는 캐시쿼리 -- 그림을 표로 표시해줌. ;WITH XMLNAMESPACES(DEFAULT N'http://schemas.microsoft.com/sqlserver/2004/07/showplan') SELECT cp.query_hash,cp.query_plan_hash, PhysicalOperator= operators.value('@PhysicalOp','nvarchar(50)'), LogicalOp= operators.value('@LogicalOp','nvarchar(50)'), AvgRowSize= operators.value('@AvgRowSize','nvarchar(50)'), EstimateCPU= operators.value('@EstimateCPU','nvarchar(50)'), EstimateIO=..
한번 썼던 PLAN CACHE 쿼리들을 삭제하는 명령어 주기적으로 유지보수 할 때 싹 삭제함... DECLARE @MB decimal(19,3) , @Count bigint, @StrMB nvarchar(20) SELECT @MB = sum(cast((CASE WHEN usecounts = 1 AND objtype IN ('Adhoc', 'Prepared') THEN-- 범위를 정해줌 size_in_bytes ELSE 0 END) as decimal(12,2)))/1024/1024 ,@Count = sum(CASE WHEN usecounts = 1 AND objtype IN ('Adhoc', 'Prepared') THEN 1 ELSE 0 END) ,@StrMB = convert(nvarchar(20), @MB) FROM sys.dm_exec_cached_pl..
PLAN CACHE에서 단일 사용계획에 사용되는 메모리양을 확인 할 때 사용하는 쿼리 SELECT objtype AS [CacheType] , count_big(*) AS [Total Plans] , sum(cast(size_in_bytes as decimal(18,2)))/1024/1024 AS [Total MBs] , avg(usecounts) AS [Avg Use Count] , sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(18,2)))/1024/1024 AS [Total MBs - USE Count 1] , sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1] FROM sys.dm_exec_cached_pl..