함수 통계 정보 확인 (sys.dm_exec_function_stats)
- Version : SQL Server 2016
SQL Server에서 쿼리를 사용할 때 함수를 사용하는 경우가 있다. 함수를 사용할 때 함수에 대한 성능을 확인하기 위해서 일반적으로 함수의 개별문을 실행하였다. 이번 포스트에서는 SQL Server 2016에서 새롭게 제공된 sys.dm_exec_function_stats DMV를 사용하여 함수에 대한 통계 정보를 확인해 본다.
sys.dm_exec_function_stats는 모든 스칼라 함수 및 인메모리, CLR 스칼라 함수에 대한 통계 정보를 제공한다. 이 기능은 모든 스칼라 함수에 대한 캐시된 실행 계획을 반환한다. 인모메리 기능의 통계를 볼 때 논리적 물리적 IO에대한 칼럼 정보는 0으로 나타나 정보를 확인할 수 없지만 쿼리에 대한 실행 횟수는 조회할 수 있다.
sys.dm_exec_function_stats에 대한 기능을 실습을 통해 알아본다. 데이터베이스는 AdventureWorks2014를 사용하였으며 dbo.ufnGetProductListPrice, dbo.ufnGetStock 함수를 호출한다.
USE AdventureWorks2014 GO
SELECT OH.PurchaseOrderNumber , dbo.ufnGetProductListPrice(OD.ProductID, OH.OrderDate) ListPrice , OD.UnitPRice , OD.OrderQty , OD.LineTotal , dbo.ufnGetStock(OD.ProductID) RemainingStock FROM Sales.SalesOrderHeader OH INNER JOIN Sales.SalesOrderDetail OD ON OH.SalesOrderID = OD.SalesOrderID GO |
아래 쿼리의 경우 dbo.ufnGetContacInformation 테이블 반환 함수에 대한 캐시목록은 작성하지만 앞에서 설명한것과 같이 sys.dm_exec_function_stats에서는 레코드를 표시하지 않는다.
USE AdventureWorks2014 GO
SELECT * FROM Sales.SalesOrderHeader OH CROSS APPLY dbo.ufnGetContactInformation(OH.SalesPersonID) GO |
아래 스크립트는 sys.dm_exec_function_stats를 사용하여 함수의 실행 통계를 확인할 수 있다. 함수에 대한 이름 뿐만 아니라 기본적인 통계 그리고 함수의 구문을 확인할 수 있다.
USE MASTER GO
SELECT DB_NAME(database_id) + '.' + OBJECT_SCHEMA_NAME(OBJECT_ID, database_id) + '.' + OBJECT_NAME(OBJECT_ID, database_id) AS Function_Name, QS.last_execution_time , QS.max_worker_time , QS.max_physical_reads , QS.max_logical_reads , QS.max_logical_writes , T.Text FROM sys.dm_exec_function_stats QS CROSS APPLY sys.dm_exec_sql_text(sql_handle) T |
[참고자료]
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp