다음을 통해 공유


SQL Server Machine Learning Services에서 Python 및 R 스크립트를 실행하는 실행 패드 서비스 문제 해결

적용 대상: SQL Server 2016(13.x) 이상 버전

이 문서에서는 Machine Learning Services와 함께 사용되는 SQL Server 실행 패드 서비스와 관련된 문제 해결 지침을 제공합니다. 이 실행 패드 서비스는 R 및 Python의 외부 스크립트 실행을 지원합니다. 구성 문제나 변경 또는 누락된 네트워크 프로토콜을 포함하여 다양한 문제로 인해 실행 패드가 시작되지 않을 수 있습니다.

실행 패드 실행 여부 확인

  1. SQL Server 구성 관리자를 엽니다. 명령줄에서 SQLServerManager13.msc, SQLServerManager14.msc 또는 SQLServerManager15.msc를 입력합니다.

  2. 실행 패드를 실행하는 서비스 계정을 적어 둡니다. R 또는 Python이 사용하도록 설정된 각 인스턴스에는 실행 패드 서비스의 고유한 인스턴스가 있어야 합니다. 예를 들어 명명된 인스턴스의 서비스는 MSSQLLaunchpad$InstanceName과 같이 표시될 수 있습니다.

  3. 서비스가 중지된 경우 서비스를 다시 시작합니다. 다시 시작할 때 구성에 문제가 있으면 시스템 이벤트 로그에 메시지가 게시되고 서비스가 다시 중지됩니다. 서비스가 중지된 이유에 대한 자세한 내용은 시스템 이벤트 로그를 확인하세요.

  4. RSetup.log의 콘텐츠를 검토하고 설치에 오류가 없는지 확인합니다. 예를 들어 0 코드를 나타내며 종료하고 있습니다 메시지는 서비스를 시작하지 못했음을 나타냅니다.

  5. 다른 오류를 검색하려면 rlauncher.log의 콘텐츠를 검토합니다.

실행 패드 서비스 계정 확인

기본 서비스 계정은 “NT Service$SQL2016”, “NT Service$SQL2017” 또는 “NT Service$SQL2019”일 수 있습니다. 마지막 부분은 SQL 인스턴스 이름에 따라 다를 수 있습니다.

실행 패드 서비스(Launchpad.exe)는 낮은 권한 서비스 계정을 사용하여 실행됩니다. 그러나 R 및 Python을 시작하고 데이터베이스 인스턴스와 통신하려면 실행 패드 서비스 계정에 다음 사용자 권한이 필요합니다.

  • 서비스로 로그온(SeServiceLogonRight)
  • 프로세스 수준 토큰 바꾸기 (SeAssignPrimaryTokenPrivilege)
  • 트래버스 검사 무시(SeChangeNotifyPrivilege)
  • 프로세스에 대한 메모리 할당량 조정(SeIncreaseQuotaSizePrivilege)

이 사용자 권한에 대한 자세한 내용은 Windows 서비스 계정 및 권한 구성의 “Windows 권한” 섹션을 참조하세요.

SQL Server 진단에 SDP(지원 진단 플랫폼) 도구를 사용하는 방법을 잘 알고 있는 경우에는 SDP를 사용하여 이름이 MachineName_UserRights.txt인 출력 파일을 검토할 수 있습니다.

실행 패드의 사용자 그룹은 로컬로 로그온할 수 없음

Machine Learning Services를 설치하는 동안 SQL Server는 Windows 사용자 그룹 SQLRUserGroup을 만든 후 실행 패드가 SQL Server에 연결되고 외부 스크립트 작업을 실행하는 데 필요한 모든 권한을 사용하여 해당 그룹을 프로비저닝합니다. 이 사용자 그룹을 사용하도록 설정하면 Python 스크립트를 실행하는 데도 사용됩니다.

그러나 더 제한적인 보안 정책이 적용되는 조직에서는 이 그룹에 필요한 권한이 수동으로 제거되었거나 정책에 의해 자동으로 철회될 수 있습니다. 권한이 제거된 경우 실행 패드는 더 이상 SQL Server에 연결할 수 없으며 SQL Server는 외부 런타임을 호출할 수 없습니다.

문제를 해결하려면 그룹 SQLRUserGroup에 시스템 권한 로컬 로그온 허용이 있는지 확인합니다.

자세한 내용은 Windows 서비스 계정 및 권한 구성을 참조하세요.

외부 스크립트를 실행할 권한

실행 패드를 올바르게 구성했더라도 사용자에게 R 또는 Python 스크립트를 실행할 권한이 없으면 오류가 반환됩니다.

데이터베이스 관리자 권한으로 SQL Server를 설치했거나 사용자가 데이터베이스 소유자인 경우 이 권한을 자동으로 부여 받습니다. 그러나 일반적으로 다른 사용자는 더 제한적인 권한을 가집니다. R 스크립트를 실행하려고 하면 실행 패드 오류가 발생합니다.

문제를 해결하려면 SQL Server Management Studio에서 보안 관리자가 다음 스크립트를 실행하여 SQL 로그인 또는 Windows 사용자 계정을 수정할 수 있습니다.

GRANT EXECUTE ANY EXTERNAL SCRIPT TO <username>

자세한 내용은 GRANT(Transact-SQL)를 참조하세요.

일반적인 실행 패드 오류

이 섹션에는 실행 패드에서 반환하는 가장 일반적인 오류 메시지가 나와 있습니다.

“R 스크립트에 대해 런타임을 시작할 수 없음”

R 사용자의 Windows 그룹(Python에도 사용됨)이 R Services를 실행하는 인스턴스에 로그온할 수 없으면 다음 오류가 표시될 수 있습니다.

  • R 스크립트를 실행하려고 할 때 생성되는 오류:

    • 'R' 스크립트에 대해 런타임을 시작할 수 없습니다. 'R' 런타임의 구성을 확인하십시오.

    • 외부 스크립트 오류가 발생했습니다. 런타임을 시작할 수 없습니다.

  • SQL Server 실행 패드 서비스에서 생성되는 오류:

    • 시작 관리자 RLauncher.dll을 초기화하지 못했습니다.

    • 등록된 시작 관리자 dll이 없습니다!

    • 보안 로그가 NT SERVICE 계정이 로그온할 수 없음을 나타냄

이 사용자 그룹에 필요한 권한을 부여하는 방법에 대한 자세한 내용은 SQL Server R Services 설치를 참조하세요.

참고

SQL 로그인을 사용하여 원격 워크스테이션에서 R 스크립트를 실행하는 경우에는 이 제한이 적용되지 않습니다.

“로그온 실패: 사용자에게 요청된 로그온 유형이 부여되지 않음”

기본적으로 SQL Server 실행 패드는 시작 시 다음 계정을 사용합니다. NT Service\MSSQLLaunchpad. 이 계정은 SQL Server 설치 시 필요한 모든 권한을 가지도록 구성됩니다.

실행 패드에 다른 계정을 할당하거나 SQL Server 머신에서 권한이 정책에 따라 제거된 경우 계정에 필요한 권한이 없을 수 있으며 다음 오류가 표시될 수 있습니다.

ERROR_LOGON_TYPE_NOT_GRANTED 1385(0x569) 로그온 실패: 사용자는 이 컴퓨터에서는 요청된 로그온 유형을 허가받지 않았습니다.

새 서비스 계정에 필요한 권한을 부여하려면 로컬 보안 정책 애플리케이션을 사용하고 다음 권한을 포함하도록 계정의 권한을 업데이트합니다.

  • 프로세스의 메모리 할당량 조정(SeIncreaseQuotaPrivilege)
  • 트래버스 검사 무시(SeChangeNotifyPrivilege)
  • 서비스로 로그온(SeServiceLogonRight)
  • 프로세스 수준 토큰 바꾸기(SeAssignPrimaryTokenPrivilege)

“실행 패드 서비스와 통신할 수 없음”

기계 학습을 설치한 후 사용하도록 설정했지만 R 또는 Python 스크립트를 실행할 때 이 오류가 발생한다면 인스턴스에 대한 실행 패드 서비스의 실행이 중지되었을 수 있습니다.

  1. Windows 명령 프롬프트에서 SQL Server 구성 관리자를 엽니다. 자세한 내용은 SQL Server Configuration Manager을 참조하세요.

  2. 인스턴스의 SQL Server 실행 패드를 마우스 오른쪽 단추로 클릭한 후 속성을 선택합니다.

  3. 서비스 탭을 선택하고 서비스가 실행 중인지 확인합니다. 실행되고 있지 않으면 시작 모드자동으로 변경한 후 적용을 선택합니다.

  4. 서비스를 다시 시작하면 일반적으로 문제가 해결되므로 기계 학습 스크립트를 실행할 수 있습니다. 다시 시작해도 문제가 해결되지 않으면 이진 경로 속성의 경로 및 인수를 기록해 두고 다음을 수행합니다.

    a. 시작 관리자의 .config 파일을 검토하고 작업 디렉터리가 유효한지 확인합니다.

    b. 실행 패드에서 사용되는 Windows 그룹이 SQL Server 인스턴스에 연결할 수 있는지 확인합니다.

    다. 서비스 속성을 변경하는 경우 실행 패드 서비스를 다시 시작합니다.

“tmpFile의 오류를 만들지 못함”

이 시나리오에서는 기계 학습 기능을 설치했고 실행 패드를 실행되고 있습니다. 몇 가지 간단한 R 또는 Python 코드를 실행하려고 하지만 실행 패드는 다음과 같은 오류와 함께 실패합니다.

‘R 스크립트의 런타임과 통신할 수 없습니다. R 런타임의 요구 사항을 확인하세요.

동시에 외부 스크립트 런타임은 STDERR 메시지의 일부로 다음 메시지를 기록합니다.

오류: tmpfile를 만들지 못했습니다.

이 오류는 실행 패드에서 사용하려고 하는 계정에 데이터베이스에 로그온할 권한이 없음을 나타냅니다. 엄격한 보안 정책을 구현할 때 이 상황이 발생할 수 있습니다. 이 경우에 해당하는지 확인하려면 SQL Server 로그를 검토하고 로그인 시 MSSQLSERVER01 계정이 거부되었는지 확인합니다. 동일한 정보가 R_SERVICES 또는 PYTHON_SERVICES에 관련된 로그에서 제공됩니다. ExtLaunchError.log를 검색합니다.

기본적으로 계정 20개가 설정되고 이름 MSSQLSERVER01~MSSQLSERVER20을 사용하여 Launchpad.exe 프로세스와 연결됩니다. R 또는 Python을 과도하게 사용하는 경우 계정 수를 늘릴 수 있습니다.

문제를 해결하려면 그룹에는 기계 학습 기능이 설치되고 사용하도록 설정된 로컬 인스턴스에 대한 로컬 로그온 허용 권한이 있어야 합니다. 일부 환경의 경우 이 권한 수준에서 네트워크 관리자의 GPO 예외가 필요할 수 있습니다.

“이 명령을 처리할 충분한 할당량이 없음”

이 오류는 다음 여러 가지 항목 중 하나를 의미할 수 있습니다.

  • 실행 패드에 외부 쿼리를 실행할 외부 사용자가 부족할 수 있습니다. 예를 들어 20개가 넘는 외부 쿼리를 동시에 실행하고 기본 사용자가 20명만 있으면 하나 이상의 쿼리가 실패할 수 있습니다.

  • R 작업을 처리하는 데 사용할 수 있는 메모리가 부족합니다. 이 오류는 기본 환경에서 가장 자주 발생합니다. 이 환경에서 SQL Server는 컴퓨터 리소스의 최대 70%를 사용 중일 수 있습니다. 더 많은 리소스 사용을 지원하도록 서버 구성을 수정하는 방법에 대한 자세한 내용은 작업에서 R 코드 활용을 참조하세요.

“패키지를 찾을 수 없음”

SQL Server에서 R 코드를 실행하고 이 메시지가 표시되지만 SQL Server 외부에서 동일한 코드를 실행할 때 메시지가 표시되지 않은 경우에는 패키지가 SQL Server에서 사용하는 기본 라이브러리 위치에 설치되지 않은 것입니다.

이 오류는 다음과 같이 다양하게 나타날 수 있습니다.

  • 서버에 새 패키지를 설치했지만, 액세스가 거부되었으므로 R이 사용자 라이브러리에 패키지를 설치했습니다.

  • R Services를 설치한 후 다른 R 도구나 라이브러리 집합(예: RStudio)을 설치했습니다.

인스턴스에서 사용되는 R 패키지 라이브러리의 위치를 확인하려면 SQL Server Management Studio(또는 다른 데이터베이스 쿼리 도구)를 열고 인스턴스에 연결한 후 다음 저장 프로시저를 실행합니다.

EXEC sp_execute_external_script @language = N'R',  
@script = N' print(normalizePath(R.home())); print(.libPaths());'; 

샘플 결과

STDOUT message(s) from external script:

[1] "C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\R_SERVICES"

[1] “C:/Program Files/Microsoft SQL Server/MSSQL13.SQL2016/R_SERVICES/library”

이 문제를 해결하려면 패키지를 SQL Server 인스턴스 라이브러리에 다시 설치해야 합니다.

참고

최신 Microsoft R 버전을 사용하도록 SQL Server 2016 인스턴스를 업그레이드한 경우 기본 라이브러리 위치가 다릅니다. 자세한 내용은 기본 R 라이브러리 위치를 참조하세요.

DLL이 일치하지 않아 실행 패드가 종료됨

다른 기능과 함께 데이터베이스 엔진을 설치하는 경우 서버를 패치한 후 나중에 원본 미디어를 사용하여 Machine Learning 기능을 추가하면 잘못된 버전의 Machine Learning 구성 요소가 설치될 수 있습니다. 버전 불일치를 감지한 실행 패드는 종료되고 덤프 파일을 만듭니다.

이 문제를 방지하려면 서버 인스턴스와 동일한 패치 수준에서 새 기능을 설치해야 합니다.

잘못된 업그레이드 방법:

  1. R Services 없이 SQL Server 2016을 설치합니다.
  2. SQL Server 2016 누적 업데이트 2를 업그레이드합니다.
  3. RTM 미디어를 사용하여 R Services(데이터베이스 내)를 설치합니다.

올바른 업그레이드 방법:

  1. R Services 없이 SQL Server 2016을 설치합니다.
  2. SQL Server 2016을 원하는 패치 수준으로 업그레이드합니다. 예를 들어 서비스 팩 1을 설치한 후 누적 업데이트 2를 설치합니다.
  3. 올바른 패치 수준에서 기능을 추가하려면 SP1 및 CU2 설치 프로그램을 다시 실행한 후 R Services(데이터베이스 내)를 선택합니다.

8dot3 표기법이 필요한 경우 실행 패드를 시작하지 못함

참고

이전 시스템에서는 8dot3 표기법 요구 사항이 있을 경우 실행 패드를 시작할 수 없습니다. 이후 릴리스에서는 이 요구 사항이 제거되었습니다. SQL Server 2016 R Services 고객은 다음 중 하나를 설치해야 합니다.

R과의 호환성을 위해 SQL Server 2016 R Services(데이터베이스 내)에는 8dot3 표기법을 사용한 짧은 파일 이름 만들기를 지원하는 기능이 설치된 드라이브가 필요했습니다. 8.3 파일 이름은 짧은 파일 이름이라고도 하며, 이전 버전의 Microsoft Windows와 호환성을 위해 또는 긴 파일 이름의 대안으로 사용됩니다.

R을 설치하는 볼륨에서 짧은 파일 이름을 지원하지 않는 경우 SQL Server에서 R을 시작하는 프로세스에서 올바른 실행 파일을 찾지 못할 수 있으며 실행 패드가 시작되지 않습니다.

해결 방법으로, SQL Server와 R Services가 설치된 볼륨에서 8dot3 표기법을 사용하도록 설정할 수 있습니다. 그런 다음 R Services 구성 파일에서 작업 디렉터리의 짧은 이름을 제공해야 합니다.

  1. 8dot3 표기법을 사용하려면 fsutil 8dot3name에 설명된 대로 8dot3name 인수를 사용하여 fsutil 유틸리티를 실행합니다.

  2. 8dot3 표기법을 사용하도록 설정한 후 RLauncher.config 파일을 열고 WORKING_DIRECTORY 속성을 기록해 둡니다. 이 파일을 찾는 방법에 대한 자세한 내용은 Machine Learning 문제 해결을 위한 데이터 수집을 참조하세요.

  3. WORKING_DIRECTORY에 지정된 폴더의 짧은 파일 경로를 지정하는 file 인수와 함께 fsutil 유틸리티를 사용합니다.

  4. 구성 파일을 편집하여 WORKING_DIRECTORY 속성에 입력한 것과 동일한 작업 디렉터리를 지정합니다. 또는 다른 작업 디렉터리를 지정하고 이미 8dot3 표기법과 호환되는 기존 경로를 선택할 수 있습니다.

다음 단계

기계 학습 문제 해결을 위한 데이터 수집

SQL Server Machine Learning Services 설치

데이터베이스 엔진 연결 문제 해결