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]