Microsoft로 로그인
로그인하거나 계정을 만드세요.
안녕하세요.
다른 계정을 선택하세요.
계정이 여러 개 있습니다.
로그인할 계정을 선택하세요.

증상

Transact-SQL 구현되고 단일 데이터 값을 반환하는 UDF(User-Defined Functions)를 T-SQL 스칼라 User-Defined 함수(UDF)라고 합니다. 

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


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

  • UDF의 반환 형식이 sql_variant 경우 형식 불일치 오류(Microsoft SQL Server 2019 CU2에 추가됨)

  • sp_executesql UDF 호출은 실행을 중단합니다(Microsoft SQL Server 2019 CU2에 추가됨).

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

  • 매우 큰 스칼라 UDF(2019 CU2 Microsoft SQL Server 추가됨)로 인해 메모리 부족 상태 및 메모리 누수가 발생합니다.

  • 조건(IF-ELSE) 문에 사용되는 초기화되지 않은 변수로 인해 오류가 발생합니다(Microsoft SQL Server 2019 CU2에 추가됨).

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

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

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

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

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

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

  • 스칼라 UDF 인라인 처리로 인해 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n' 쿼리 힌트가 적용되지 않아 일관되지 않은 동작(Microsoft SQL Server 2019 CU9에 추가됨)

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

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

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

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

  • sysadmin이 아닌 계정으로 실행되는 UDF를 인라인 처리하면 '현재 명령에서 심각한 오류가 발생했습니다.  결과가 있는 경우 삭제해야 합니다.' (Microsoft SQL Server 2019 CU16에 추가됨)

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

  • UDF가 인라인 처리 시 결과를 변경할 수 있는 특정 내장 함수(예: @@ROWCOUNT)를 참조하는 경우(Microsoft SQL Server 2019 CU2에 추가됨)

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

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

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

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

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

  • UDF에 여러 RETURN 문이 포함된 경우(Microsoft SQL Server 2019 CU5에 추가됨)

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

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

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

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

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

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

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

  • UDF를 호출하는 쿼리에 CTE(Common Table Expressions)가 있는 경우(Microsoft SQL Server 2019 CU11에 추가됨)


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

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

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

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

해결 방법

이 문제는 SQL Server 대한 다음 누적 업데이트에서 해결되었습니다.

SQL Server 대한 각각의 새로운 누적 업데이트에는 모든 핫픽스 및 이전 누적 업데이트에 포함된 모든 보안 수정 사항이 포함됩니다. SQL Server 대한 최신 누적 업데이트를 확인하세요.

상태

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

참고 자료

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

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

기술 향상

교육 살펴보기 >

새로운 기능 우선 가져오기

Microsoft Insider 참가 >

이 정보가 유용한가요?

언어 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?

의견 주셔서 감사합니다!

×