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 런타임을 시작하는 위성 프로세스에 사용할 수 있습니다. 이러한 추가 확장 이벤트는 외부 프로세스에서 발생합니다. 따라서 외부 유틸리티를 사용하여 캡처해야 합니다.
이를 수행하는 방법에 대한 자세한 내용은 외부 프로세스에서 이벤트 수집 섹션을 참조하세요.
확장 이벤트 테이블
이벤트 | Description | 메모 |
---|---|---|
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 프로세스 외부에서 실행되는 일부 서비스를 시작합니다. 외부 프로세스 관련 이벤트를 캡처하려면 이벤트 추적 구성 파일을 만들고 프로세스의 실행 파일과 동일한 디렉터리에 파일을 배치해야 합니다.
중요
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]
)을 편집합니다. - 사용할 수 있는 이벤트 패키지 태그의 수에는 제한이 없으며, name 특성이 올바르기만 하면 수집됩니다.
예제: 실행 패드 이벤트 캡처
다음 예제는 실행 패드 서비스 이벤트 추적에 대한 정의를 보여줍니다.
<?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>
- BXLServer 실행 파일과 동일한 디렉터리에 .xml 파일을 배치합니다.
- 이 파일의 이름은
bxlserver.xevents.xml
이어야 합니다.
다음 단계
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기