Database/MS-SQL

SQL 전문가과정 5일차

99iberty 2016. 10. 14. 16:43

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 … 이런식으로 플랜을 아예 가이드해서 지정.

      • Plan8kb보다 크면 쓸 수 없다 저렇게 쿼리에.

    • 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 number1보다 큰 것들

그것을 통해서 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