데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL Server 2017에서 향상된 UDF 실행 계획

 

·      Version : SQL Server 202017 CU3

 

SQL Server 2017 CU3 이후 부터 UDF(User-Defined Function) 실행계획이 개선되어 사용자에게   많은 정보를 보여주게 되었다. (필자가   쓰는 시점으로 최신 CU7까지 출시 되었다.) 이전에는 쿼리에 참조된 UDF 사용할  쿼리 실행 시간의 상당 부분이 함수 내에서 발생하여도 쿼리 실행계획을 보고 쉽게 파악하기가 어려웠다. SQL Server 2017 CU3 이후 부터는UdfCpuTime UdfElaspsedTime  가지 새로운 속성이 추가되어 사용자 정의 함수내에서 사용되는 리소스를 확인할  있게 되었다.

 

아래 스크립트는 테스트를 구성하기 위한 UDF 생성 스크립트이다테스트 쿼리를 실행하기 위해서는 Adventureworks  설치되어 있어야 한다.

-- Create UDF

CREATE FUNCTION ufn_CategorizePrice(@Price money)

RETURNS NVARCHAR(50)

AS

BEGIN

    DECLARE @PriceCategory NVARCHAR(50)

 

    IF @Price < 100 SELECT @PriceCategory = 'Cheap'

    IF @Price BETWEEN 101 and 500 SELECT @PriceCategory =  'Mid Price'

    IF @Price BETWEEN 501 and 1000 SELECT @PriceCategory =  'Expensive'

    IF @Price > 1001 SELECT @PriceCategory =  'Unaffordable'

    RETURN @PriceCategory

END

GO

 

아래 스크립트는 UDF 사용한 데이터 조회 스크립트이다실행 계획을 살펴보면 UDF 관련 정보를 확인할  있다.

-- Execute

SELECT dbo.ufn_CategorizePrice(UnitPrice),

    SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber,

    OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount,

    LineTotal, rowguid, ModifiedDate

FROM Sales.SalesOrderDetail

GO

 


 

 

[참고자료]

https://blogs.msdn.microsoft.com/sql_server_team/more-showplan-enhancements-udfs/

 

  

2018-06-04 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

SQL 2017, MS SQL, UDF 실행계획실행계획, DBA, DB튜닝향샹된 실행 계획 보기, SQL Server 2017, Showplan enhancements for UDF



출처: https://sqlmvp.tistory.com/1246?category=618825 [Database Lab]
No. Subject Author Date Views
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 358
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 542
2141 SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 321
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 384
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 393
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 497
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 511
2136 SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 397
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 505
2134 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.25 260
2133 SQL Server 네이티브 컴파일된 저장 프로시저 성능 모니터링 jevida(강성욱) 2019.03.25 499
2132 SQL Server 2017 소규모 시스템에서 향상된 리소스 사용 jevida(강성욱) 2019.03.25 287
2131 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 436
2130 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 420
2129 SQL Server 2016 향상된 복제 기능 – 배포 데이터베이스 클린업 향상 jevida(강성욱) 2019.03.25 317
2128 SQL Server 2017향상된 복제 기능 – 배포 데이터베이스의 AG 지원 jevida(강성욱) 2019.03.25 479
2127 SQL Server 2017 향상된 복제 기능 - 복제에이전트 프로필 매개변수의 동적 새로 고침 jevida(강성욱) 2019.03.25 519
2126 SQL Server update on Docker jevida(강성욱) 2019.03.25 412
» SQL Server 2017에서 향상된 UDF 실행 계획 jevida(강성욱) 2019.03.25 380
2124 ETL data error with MariaDB ODBC 3.0 (from Aurora to MS SQL) jevida(강성욱) 2019.03.25 538





XE Login