9장
Function
코드 재사용 측면에서는 좋다.
단점 : function이 코드 내 숨어있으면 function에 대한 비용 자체가 실행계획이나 set statics io에서 빠져버린다. 보이지 않는다. 만약 function이 들어간 select이 1천번이다 하면 1천번 실행계획에서 빠진다.
스칼라 function인 경우 스키마 바인딩 옵션을 주는 게 좋다.
function에서 데이터 액세스하지 않음에도 불구하고 가정할 수 있다.
스키마바인딩 : 이게 머라고?ㅋㅋ
Hints & Plan Guides
쿼리 힌트 : 쿼리 옵션절 통해 줄 수 있다.
OPTION OPTIMIZE FOR, FAST N, KEEP LAN 등
OPTION ( USE PLAN N’<ShowPlanXML … 이런식으로 플랜을 아예 가이드해서 지정.
Plan이 8kb보다 크면 쓸 수 없다 저렇게 쿼리에.
Recompile : 계속 컴파일 하겠다
Force order : from절에서 쭉 조회, optimizer 통해서가 아니라 force order에서 지정한 순서대로 조회하라 조인하라 이렇게 정할 수 있다.
테이블 힌트 : seek를 태워라 scan해라 이런 힌트를 줄 수 있다. 가급적이면 optimize 힌트로 넘기고..
Join hint : 조인절에 대해서 힌트…멀까
LOOP JOIN
MERGE JOIN
HASH JOIN 쓸 건지.. 조인방식을 지정해 줄 수 있다.
Plan guide : use plan과 비슷. 별도의 sp를 이용해서 plan을 아예 박는 것.
sys.plan_guides
sp는 문제가 있으면 바로 조치를 취하면 된다(힌트를 준다든가)
핸들값을 통해서 plan guide를 만들 수 있다.
모듈 10. T-SQL and programming
저장 프로시저가 실행되면 db에서 캐싱된다.
Dbcc Freeproccache : 캐쉬에 컴파일되어서 데이터베이스 객체에 담겨있는 플랜들을 초기화시켜라
플랜이 잘못 만들어져 있거나 cpu가 치고 있으면 dba들이 임시조치로 이걸 마니 씀.
캐쉬에 있던 실행계획들이 쫙 다 빠져버린다.
잘못된 실행계획들을 날려버리는 효과는 있다.
새로 실행계획이 만들어지므로 cpu가 순간 확 칠 수는 있다.
Dbcc dropcleanbuffers : 위에꺼랑 세트로 마니 쓴다. 버퍼캐쉬 영역에 있는 데이터 캐쉬 초기화
메모리 압박 있을 때 조치사항
메모리 버퍼에 올려놓은 데이터캐쉬 날리는 것.
저 위에 꺼 날리면 DB 재시작한 효과….
자주 하면 안 좋다. 효과가 있을만한 상황인지 파악하기 위해서 시도.
select * from sys.syscacheobjects
objtype 컬럼을 보면…
proc
prepared
adhoc ; 재사용 불가
1 : master
2 : tempdb
3 : modeldb
4 : msdb
위 database id 알고 싶으면 아래 쿼리 실행시키면 된다.
select * from sys.databases
보통 건수로 제한
5천간 미만으로 1분 미만으로 쓸거면 테이블 @로 쓰고
데이터 만 건 이상 담아서 join도 할거고 1분 이상 넘어가는 조인 업무 쓸거면 테이블 변수#
이런 현상 이상이면 테이블을 work_tmp 로 물리적으로 만들어서 index만들어서 써라.
이런 식으로 용도를 나눠서 쓰면 문제가 덜하다.
Ldf의 목적은 데이터를 복구목적으로 트랜잭션을 쌓기 때문에
Select * into #temp 로 만드는 거 보다
Create table #tmp( ) 이후 insert into tt with(TABLOCK) select * from table 이렇게 minimal logging으로 하는 게 성능이 훨씬 좋다.
Plan generation number가 1보다 큰 것들
그것을 통해서 recompile 을 찾아낼 수 있다.
dw상태에서 bulk logged 복구모델을 많이 씀.
차등백업이라도 받아야 한다.
Set statistics io on ; 피시컬 로지컬 io 출력
Set statistics Time on ; 구문분석에 ms단위로 시간소요 산정 가능 (cpu시간, 경과시간)
'Database > MS-SQL' 카테고리의 다른 글
sql 전문가 7일차 (0) | 2016.10.18 |
---|---|
SQL 전문가 과정 6일차 (0) | 2016.10.17 |
SQL 전문가 과정 3일차 (0) | 2016.10.13 |
sql전문가 과정 3일차 (0) | 2016.10.12 |
문제상황시 유용한 sql쿼리들 (0) | 2016.10.12 |