강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

T-SQL: Parameter Sniffing 쿼리 튜닝
작성자 : 99 단국강토
등록날짜 : 2009.01.05 10:46
3,047
T-SQL: Parameter Sniffing 쿼리 튜닝 DB 2007/07/17 00:54
SQL Server 의 장점 중의 하나는 Query Optimizer 가 있다는 것이다. 그런데 이 옵티마이저는 Parameter Sniffing 이 일어날 경우에 성능의 저하를 일으킬 수 있다는 것이다.

Parameter Sniffing 은 Stored Procedure 에서 파라미터를 사용하여 Value 를 Pass 할 경우에 전형적인 경우에서 발생하는 캐쉬가 저장되지 않고 비전형적인 Value 가 Pass 되었을 경우의 캐쉬가 저장되어 전형적인 경우에서도 계속적으로 캐쉬가 사용되어 비효율과 성능저하를 나타내는 경우를 말한다.

적어놓고도 말이 좀 어려운데 간단한 예를 들어 설명하겠다. 미국 쇼핑몰을 예를 들면, 물건을 주문했을 경우에 Country 라는 파라미터에는 전형적으로 "United States" 라는 Value 가 입력될 것이다. 이 경우에 생성되는 캐쉬는 Clustered Index Scan 을 사용하여 쿼리를 서비스 할 것이다. 하지만 자주 주문이 되지 않는 "France" 라는 Value 가 입력이 되었다면 옵티마이저는 Nonclustered Index Seek 를 쿼리 플랜에 사용하게 될 것이다. 그렇담, 비전형적인 후자의 Value 가 먼저 입력이 되어 캐쉬가 생성된다면 전형적인 경우에도 캐쉬를 사용하여 처리를 하게 된다는 것이다. 다시 말해, 비전형적인 경우로 전형적인 경우를 처리하니 성능이 저하되는 것은 물론이다.

이에 대한 해결책으로 다음과 같은 쿼리문이 사용될 수 있겠다.

Query 문 (Language : sql)
  1. CREATE PROC prSalesByCountry
  2. @country char(3),
  3. @template_country char(3)="United States"
  4. AS
  5. SET @template_country=@country
  6. SELECT * FROM sales WHERE country=@template_country
  7. GO

위의 쿼리문을 사용한다면 Default Value인 United States 가 컴파일시에 사용이 될 것이며 런타임에 사용되어 지지는 않게 된다. 그래서 전형적인 방법으로 캐쉬가 생성되어 지며 그 캐쉬가 계속적으로 사용되어 지는 것이다.

위의 방법도 있지만 그 외에도 WITH RECOMPILE 옵션을 사용하여 Stored Procedure 를 생성하여 Parameter Sniffing 을 막을 수 있다.

[출처] 웹디황용

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2835 [MSSQL]데이터베이스 옵션 설정 99 단국강토 01.12 3053
2834 여러객체를 for 문 돌리며 사용 99 단국강토 02.19 3052
2833 씬시티 영화 처럼 특정색 강조하기 10 액션쟁이 01.07 3051
열람중 T-SQL: Parameter Sniffing 쿼리 튜닝 99 단국강토 01.05 3048
2831 vmware에 설치한 페도라코어5에 vmware tool 설치하기 99 단국강토 01.05 3046
2830 SQL : 집계함수 : 집계함수. 13 김영철 01.23 3045
2829 [AJAX] DOMDocument 에서 selectSingleNode 을 이용한 XML 노드 (Node) 찾기 99 단국강토 12.30 3045
2828 테그의 기본 99 단국강토 02.04 3044
2827 동영상 그림크기조절 99 단국강토 12.30 3042
2826 php전역변수 13 김영철 01.14 3041
2825 MSSQL 기본값 13 김영철 01.24 3040
2824 리눅스의 기본 명령어 99 단국강토 12.30 3040
2823 음악 태그 사운드 태그 댓글1 M 최고의하루 12.24 3039
2822 DBMS에 따른 날짜포맷 변환 99 단국강토 01.07 3039
2821 오라클 캐릭터 셋 변경 M 최고의하루 01.12 3039
2820 포토샵-만화처럼 보이게 하기(신시티스타일) 10 액션쟁이 01.07 3036
2819 [CSS]스타일시트 {속성:값}의 모든 것 99 단국강토 02.03 3035
2818 MovieClip.attachMovie 99 단국강토 02.05 3035
2817 MySQL에서 외래키 설정하기 13 김영철 01.29 3035
2816 일본어로 된 웹을 한글로 즐기기 99 단국강토 01.06 3034
2815 <HTML TIP> 스크롤바, 링크주변 점선 제거, IFrame속성.. 99 단국강토 02.03 3031
2814 문자열중 숫자만 출력하기 13 김영철 01.14 3031
2813 버튼 미디어 플래이어를 구현해 보자 99 단국강토 02.19 3030
2812 php 파일 업, 다운로드 13 김영철 01.13 3029
2811 BLOCKQUOTE TAG 99 단국강토 01.20 3028
2810 php 대용량 메일 13 김영철 01.13 3027
2809 E execCommand() 의 명령어 목록 | JavaScript 99 단국강토 01.30 3025
2808 [정보] EditPlus에서 BOM 문제 해결법 13 김영철 01.14 3025
2807 php 대용량 메일 13 김영철 01.13 3025
2806 cascasde(연속동작) 13 김영철 01.23 3025
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취