다음을 통해 공유


SQL Server Machine Learning Services에서 확장 이벤트를 사용하여 Python 및 R 스크립트 모니터링

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL Managed Instance

확장 이벤트를 사용하여 SQL Server Machine Learning Services, SQL Server 실행 패드 및 Python 또는 R 작업 외부 스크립트와 관련된 작업을 모니터링하고 문제를 해결하는 방법에 대해 알아봅니다.

SQL Server Machine Learning Services용 확장 이벤트

SQL Server Machine Learning Services와 관련된 이벤트 목록을 보려면 Azure Data Studio 또는 SQL Server Management Studio에서 다음 쿼리를 실행합니다.

SELECT o.name AS event_name, o.description
FROM sys.dm_xe_objects o
JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'event'
AND p.name = 'SQLSatellite';

확장 이벤트를 사용하는 방법에 대한 자세한 내용은 확장 이벤트 도구를 참조하세요.

Machine Learning Services와 관련된 추가 이벤트

SQL Server 실행 패드 및 BXLServer와 같은 SQL Server Machine Learning Services와 관련되어 사용되는 구성 요소와 Python 또는 R 런타임을 시작하는 위성 프로세스에 대해 추가 확장 이벤트를 사용할 수 있습니다. 이러한 추가 확장 이벤트는 외부 프로세스에서 시작됩니다. 따라서 외부 유틸리티를 사용하여 캡처해야 합니다.

이를 수행하는 방법에 대한 자세한 내용은 외부 프로세스에서 이벤트 수집 섹션을 참조하세요.

확장된 이벤트 테이블

이벤트 설명 참고
connection_accept 새로운 연결이 수락되면 발생합니다. 이 이벤트는 모든 연결 시도를 기록하는 역할을 합니다.
failed_launching 시작에 실패했습니다. 오류를 나타냅니다.
satellite_abort_connection 연결 레코드 중단
satellite_abort_received 위성 연결을 통해 중단 메시지를 수신하는 경우 실행됩니다.
satellite_abort_sent 위성 연결을 통해 중단 메시지가 전송되면 발생합니다.
satellite_authentication_completion TCP 또는 명명된 파이프를 통해 연결 권한 부여가 완료되면 발생합니다.
satellite_authorization_completion TCP 또는 명명된 파이프를 통해 연결 권한 부여가 완료되면 실행됩니다.
satellite_cleanup 위성 호출을 정리할 때 실행됩니다. 외부 프로세스에서만 발생합니다. 외부 프로세스에서 이벤트를 수집하는 방법에 대한 지침을 참조하세요.
satellite_data_chunk_sent 위성 연결이 단일 데이터 청크 전송을 완료하면 발생합니다. 이 이벤트는 전송된 행 수, 열 수, 사용된 SNI 패킷 수 및 청크를 보내는 동안 경과된 시간(밀리초)을 보고합니다. 이 정보는 다양한 유형의 데이터를 전달하는 데 소요되는 시간과 사용되는 패킷 수를 이해하는 데 도움이 될 수 있습니다.
satellite_data_receive_completion 위성 연결을 통해 쿼리에 필요한 모든 데이터를 수신한 경우에 실행됩니다. 외부 프로세스에서만 발생합니다. 외부 프로세스에서 이벤트를 수집하는 방법에 대한 지침을 참조하세요.
satellite_data_send_completion 위성 연결을 통해 세션에 필요한 모든 데이터를 보낸 경우에 실행됩니다.
satellite_data_send_start 데이터 전송이 시작될 때 발생합니다. 첫 번째 데이터 청크가 전송되지 직전에 데이터 전송이 시작됩니다.
satellite_error SQL 위성 오류를 추적하는 데 사용됨
satellite_invalid_sized_message 메시지의 크기가 유효하지 않습니다.
satellite_message_coalesced 네트워킹 계층에서 메시지 병합을 추적하는 데 사용됨
satellite_message_ring_buffer_record 메시지 링 버퍼 레코드
satellite_message_summary 메시징에 대한 요약 정보
satellite_message_version_mismatch 메시지의 버전 필드가 일치하지 않음
satellite_messaging 메시징 이벤트(바인딩, 바인딩 해제 등)를 추적하는 데 사용됨
satellite_partial_message 네트워킹 계층에서 부분 메시지를 추적하는 데 사용됨
satellite_schema_received SQL에서 스키마 메시지를 받고 읽을 때 발생합니다.
satellite_schema_sent 위성에서 스키마 메시지를 보낼 때 발생합니다. 외부 프로세스에서만 발생합니다. 외부 프로세스에서 이벤트를 수집하는 방법에 대한 지침을 참조하세요.
satellite_service_start_posted 서비스 시작 메시지가 실행 패드에 게시될 때 발생합니다. 이는 실행 패드에 외부 프로세스를 시작하도록 지시하며, 새 세션에 대한 ID를 포함합니다.
satellite_unexpected_message_received 예기치 않은 메시지가 수신되면 발생합니다. 오류를 나타냅니다.
stack_trace 프로세스의 메모리 덤프가 요청되면 발생합니다. 오류를 나타냅니다.
trace_event 추적 목적으로 사용됩니다. 이러한 이벤트에는 SQL Server, 실행 패드 및 외부 프로세스 추적 메시지가 포함될 수 있습니다. 여기에는 R의 stdout 및 stderr에 대한 출력이 포함됩니다.
launchpad_launch_start 실행 패드가 위성을 시작할 때 발생합니다. 실행 패드에서만 실행됩니다. launchpad.exe 이벤트 수집에 대한 지침을 참조하세요.
launchpad_resume_sent 실행 패드가 위성을 시작하고 SQL Server에 다시 시작 메시지를 보내면 발생합니다. 실행 패드에서만 실행됩니다. launchpad.exe 이벤트 수집에 대한 지침을 참조하세요.
satellite_data_chunk_sent 위성 연결이 단일 데이터 청크 전송을 완료하면 발생합니다. 열 수, 행 수, 패킷 수 및 청크를 보내는 데 경과된 시간에 대한 정보를 포함합니다.
satellite_sessionId_mismatch 메시지의 세션 ID가 예상되지 않음

외부 프로세스에서 이벤트 수집

SQL Server Machine Learning Services는 SQL Server 프로세스 외부에서 실행되는 일부 서비스를 시작합니다. 외부 프로세스 관련 이벤트를 캡처하려면 이벤트 추적 구성 파일을 만들고 프로세스의 실행 파일과 동일한 디렉터리에 파일을 배치해야 합니다.

Important

SQL Server 2019부터 격리 메커니즘이 변경되었습니다. 따라서 이벤트 추적 구성 파일이 저장되는 디렉터리에 적절한 권한을 부여해야 합니다. 이러한 권한을 설정하는 방법에 대한 자세한 내용은 Windows의 SQL Server 2019: Machine Learning Services에 대한 격리 변경 사항에서 파일 사용 권한 섹션을 참조하세요.

  • SQL Server 실행 패드

    실행 패드 관련 이벤트를 캡처하려면, SQL Server 인스턴스의 Binn 디렉터리에 .xml 파일을 배치합니다. 기본 설치의 경우 다음과 같습니다.

    C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\MSSQL\Binn.

  • BXLServer는 R 또는 Python과 같은 외부 스크립트 언어로 SQL 확장성을 지원하는 위성 프로세스입니다. 각 외부 언어 인스턴스에 대해 별도의 BxlServer 인스턴스가 시작됩니다.

    BXLServer 관련 이벤트를 캡처하려면, R 또는 Python 설치 디렉터리에 .xml 파일을 배치합니다. 기본 설치의 경우 다음과 같습니다.

    R: C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64.

    Python: C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\PYTHON_SERVICES\Lib\site-packages\revoscalepy\rxLibs.

구성 파일의 이름은 "[name].xevents.xml" 형식을 사용하여 실행 파일과 동일하게 지정해야 합니다. 즉, 파일 이름을 다음과 같이 지정해야 합니다.

  • Launchpad.xevents.xml
  • bxlserver.xevents.xml

구성 파일 자체의 형식은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>  
<event_sessions>  
<event_session name="[session name]" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">  
    <description owner="you">Xevent for launchpad or bxl server.</description>  
    <event package="SQLSatellite" name="[XEvent Name 1]" />  
    <event package="SQLSatellite" name="[XEvent Name 2]" />  
    <target package="package0" name="event_file">  
      <parameter name="filename" value="[SessionName].xel" />  
      <parameter name="max_file_size" value="10" />  
      <parameter name="max_rollover_files" value="10" />  
    </target>  
  </event_session>  
</event_sessions>  
  • 추적을 구성하려면 세션 이름 자리 표시자, 파일 이름([SessionName].xel)의 자리 표시자 및 캡처하려는 이벤트의 이름(예[XEvent Name 1], [XEvent Name 1])을 편집합니다.
  • 이벤트 패키지 태그는 얼마든지 나타날 수 있으며 이름 특성이 정확한 경우에만 수집됩니다.

예: 실행 패드 이벤트 캡처

다음 예에서는 실행 패드 서비스의 이벤트 추적에 대한 정의를 보여줍니다.

<?xml version="1.0" encoding="utf-8"?>  
<event_sessions>  
<event_session name="sqlsatelliteut" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">  
    <description owner="hay">Xevent for sql tdd runner.</description>  
    <event package="SQLSatellite" name="launchpad_launch_start" />  
    <event package="SQLSatellite" name="launchpad_resume_sent" />  
    <target package="package0" name="event_file">  
      <parameter name="filename" value="launchpad_session.xel" />  
      <parameter name="max_file_size" value="10" />  
      <parameter name="max_rollover_files" value="10" />  
    </target>  
  </event_session>  
</event_sessions>  
  • SQL Server 인스턴스의 Binn 디렉터리에 .xml 파일을 배치합니다.
  • 이 파일 이름은 Launchpad.xevents.xml이어야 합니다.

예: BXLServer 이벤트 캡처

다음 예는 BXLServer 실행 파일 이벤트 추적에 대한 정의를 보여줍니다.

<?xml version="1.0" encoding="utf-8"?>  
<event_sessions>  
 <event_session name="sqlsatelliteut" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">  
    <description owner="hay">Xevent for sql tdd runner.</description>  
    <event package="SQLSatellite" name="satellite_abort_received" />  
    <event package="SQLSatellite" name="satellite_authentication_completion" />  
    <event package="SQLSatellite" name="satellite_cleanup" />  
    <event package="SQLSatellite" name="satellite_data_receive_completion" />  
    <event package="SQLSatellite" name="satellite_data_send_completion" />  
    <event package="SQLSatellite" name="satellite_data_send_start" />  
    <event package="SQLSatellite" name="satellite_schema_sent" />   
    <event package="SQLSatellite" name="satellite_unexpected_message_received" />    
    <event package="SQLSatellite" name="satellite_data_chunk_sent" />   
    <target package="package0" name="event_file">  
      <parameter name="filename" value="satellite_session.xel" />  
      <parameter name="max_file_size" value="10" />  
      <parameter name="max_rollover_files" value="10" />  
    </target>  
  </event_session>  
</event_sessions>  
  • .xml 파일을 BXLServer 실행 파일과 동일한 디렉터리에 배치합니다.
  • 이 파일 이름은 bxlserver.xevents.xml이어야 합니다.

다음 단계