KB4538581 - FIX: Scalar UDF 인라이징 SQL Server 2019

증상

User-Defined(Transact-SQL) 및 단일 데이터 값을 반환하는 UDF(UDF)를 T-SQL Scalar User-Defined 함수라고 합니다. 

Microsoft SQL Server UDF 실행이 주 병목 현상인 T-SQL 스칼라 UDF를 호출하는 쿼리의 성능을 향상시킬 수 있는 Scalar UDF 인라이징 기능을 도입했습니다. T-SQL Scalar UDF Inlining은 인라인이 가능한 UDF를 관계형 식으로 자동으로 변환합니다. 


이 누적 업데이트에는 Scalar UDF Inlining을 사용하는 쿼리가 오류 또는 예기치 않은 결과를 반환할 수 있는 시나리오에 대한 몇 가지 수정이 포함되어 있습니다.

  • UDF의 반환 형식이 sql_variant 경우 불일치 오류를 입력합니다(2019 CU2에 Microsoft SQL Server 추가)

  • sp_executesql 실행 중단에서 UDF 호출(2019 CU2에 Microsoft SQL Server 추가)

  • 연결된 GOTO 명령이 없는 UDF 참조 레이블은 잘못된 결과를 반환합니다(2019 CU2에 Microsoft SQL Server 추가).

  • 메모리 부족 조건 및 메모리 누수는 매우 큰 스칼라 UDF로 Microsoft SQL Server CU2에 추가되었습니다.

  • 조건(IF-ELSE) 문에 사용된 비인기화 변수는 오류(2019 CU2에 Microsoft SQL Server 추가)

  • UDF에 SQL_VARIANT 매개 변수가 있는 경우 명시적 변환 오류(2019 CU7에 Microsoft SQL Server 추가)

  • scalar 함수가 CHECKSUM을 참조할 때 발생하는 오류(2019 CU7에 Microsoft SQL Server 추가)

  • 스칼라 식을 다시 평가할 수 있는 UDF 호출은 항복하지 않는 스케줄러 오류가 발생할 수 있습니다(2019 CU7에 Microsoft SQL Server 추가).

  • UDF 참조 쿼리에서 OPTION(RECOMPILE)을 사용할 때 발생하는 오류(2019 CU7에 Microsoft SQL Server 추가)

  • 뷰가 인라인 UDF를 호출할 때 발생하는 사용 권한 오류(2019 CU9에 Microsoft SQL Server 추가)

  • XEvent query_tsql_scalar_udf_inlined 사용할 때 발생하는 액세스 위반(2019 CU9에 Microsoft SQL Server 추가) 

  • Scalar UDF Inlining으로 인한 불일치 동작이 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n' 쿼리 힌트를 존중하지 않습니다(2019 CU9에 Microsoft SQL Server 추가)

  • 인라이너링 UDF에는 항복하지 않는 스케줄러 오류가 발생할 수 있는 집계가 포함되어 있습니다(2019 CU9에 Microsoft SQL Server 추가). 

  • 조건부 블록에서 동일한 변수에 대한 스칼라 작업의 시퀀스로 인한 메모리 부족 오류(2019 CU9에 Microsoft SQL Server 추가)

  • CU Microsoft SQL Server 9로 업그레이드한 후 입력 매개 변수로 사용되는 스칼라 인라인 가능 UDF(UDF2)를 사용하여 개체가 스칼라 인라인 가능 UDF(UDF1)를 호출하는 경우 액세스 위반이 발생할 수 있습니다(2019 CU11에서 추가)

  • UDF를 인라이인하면 다음 오류 코드 6846, 1011 및 107(2019 CU11에 추가)이 Microsoft SQL Server 발생할 수 있습니다.


이 누적 업데이트는 또한 다음 시나리오에서 인라이징을 차단합니다.

  • UDF가 인라인으로 인라인될 때 결과를 변경할 수 있는 특정 본질 함수(예: @@ROWCOUNT)를 참조하는 경우(2019 CU2에 Microsoft SQL Server 추가)

  • 집계 함수가 스칼라 UDF에 매개 변수로 전달되는 경우(2019 CU2에 Microsoft SQL Server 추가)

  • UDF가 기본 제공 보기(예: OBJECT_ID)를 참조하는 경우(2019 CU2에 Microsoft SQL Server 추가)

  • UDF에서 XML 메서드를 사용하는 경우(2019 CU4에 Microsoft SQL Server 추가)

  • UDF에 "TOP 1"이 없는 ORDER BY가 포함된 SELECT가 있는 경우(2019 CU4에 Microsoft SQL Server 추가)

  • SELECT 쿼리가 ORDER BY 절과 함께 할당을 수행하는 경우(예: SELECT @x = @x +1 FROM table ORDER BY column_name)(2019 CU4에 Microsoft SQL Server 추가)

  • UDF에 여러 RETURN 문이 포함되어 있는 경우(2019 CU5에 Microsoft SQL Server 추가)

  • RETURN 문에서 UDF를 호출하는 경우(2019 CU5에 Microsoft SQL Server 추가)

  • UDF가 STRING_AGG 함수를 참조하는 경우(2019 CU5에 Microsoft SQL Server 추가)

  • UDF 정의가 원격 테이블을 참조하는 경우(2019 CU6에 Microsoft SQL Server 추가)

  • UDF 호출 쿼리에서 GROUPING SET, CUBE 또는 ROLLUP을 사용하는 경우(2019 CU6에 Microsoft SQL Server 추가)

  • UDF 호출 쿼리에 할당에 UDF 매개 변수로 사용되는 변수가 포함된 경우(예: SELECT @y=2, @x=UDF(@y)) Microsoft SQL Server (2019 CU6에 추가)

  • UDF가 암호화된 열을 참조하는 경우(2019 CU11에 Microsoft SQL Server 추가)

  • UDF에 'WITH XMLNAMESPACES'에 대한 참조가 포함된 경우(2019 CU11에 Microsoft SQL Server 추가)

  • UDF를 호출하는 쿼리에 일반 테이블 식(CTEs)이 있는 경우(2019 CU11에 Microsoft SQL Server 추가)


2019 CU2로 Microsoft SQL Server CU5로 업그레이드하기 전에 UDF가 인라이징에 적합한지 여부를 다시 평가해야 합니다. 이렇게 하여 다음 방법 중 하나를 통해 적격 스칼라 UDF를 새로 고침합니다.

  • 해당 sp_refreshsqlmodule 스칼라 UDF에 대한 실행(이 sp_refreshsqlmodule 저장 프로시저에 대한 SQL(Transact-SQL 참조)

  • 기존 정의, 사용 권한 및 설정 속성을 사용하여 기존 스칼라 UDF를 변경하거나 다시 만들 수 있습니다(ALTER FUNCTION(Transact-SQL)

다음 스크립트는 기존 인라인 스칼라 UDF에 대한 메타데이터를 새로 고치기 위한 스크립트를 생성합니다.

/*

모든 활성 인라인 가능 Scalar UDF를 새로 고침하는 데 사용할 수 있는 스크립트를 생성합니다.

참고 sp_refreshsqlmodule 명령은 사용 권한, 확장 속성에 영향을 주지 않습니다.

또는 개체와 연결된 SET 옵션입니다.

*/

'실행 sys.sp_refreshsqlmodule'[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

및 inline_type = 1;

GO

참고 2019 CU5로 Microsoft SQL Server 업그레이드한 후 컴파일 중에 UDF 인라인성을 자동으로 파생합니다.

해결 방법

이 문제는 다음 누적 업데이트에서 SQL Server.

각 새 누적 업데이트는 SQL Server 모든 핫픽스와 이전 누적 업데이트에 포함된 모든 보안 수정을 포함합니다. 다음에 대한 최신 누적 업데이트를 SQL Server.

상태

Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.

참고 자료

Microsoft가 소프트웨어 업데이트를 설명하는 데 사용하는 용어에 대해 알아보세요.

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

소중한 의견에 감사드립니다.

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×