다음을 통해 공유


DMV(동적 관리 뷰)를 사용하여 SQL Server Machine Learning Services 모니터링

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

DMV(동적 관리 뷰)를 사용하여 외부 스크립트(Python 및 R) 실행, 사용된 리소스를 모니터링하고, 문제를 진단하고, SQL Server Machine Learning Services의 성능을 조정할 수 있습니다.

이 문서에서는 SQL Server Machine Learning Services와 관련된 DMV를 찾습니다. 다음을 보여 주는 예시 쿼리도 찾을 수 있습니다.

  • 기계 학습의 설정 및 구성 옵션
  • 외부 Python 또는 R 스크립트를 실행하는 활성 세션
  • Python 및 R의 외부 런타임에 대한 실행 통계
  • 외부 스크립트에 대한 성능 카운터
  • OS, SQL Server 및 외부 리소스 풀에 대한 메모리 사용량
  • SQL Server 및 외부 리소스 풀에 대한 메모리 구성
  • 외부 리소스 풀을 비롯한 Resource Governor 리소스 풀
  • Python 및 R용으로 설치된 패키지

DMV에 대한 일반적인 정보는 시스템 동적 관리 뷰를 참조하세요.

사용자 지정 보고서를 사용하여 SQL Server Machine Learning Services를 모니터링할 수도 있습니다. 자세한 내용은 Management Studio에서 사용자 지정 보고서를 사용하여 기계 학습 모니터링을 참조 하세요.

동적 관리 뷰

SQL Server에서 기계 학습 워크로드를 모니터링할 때 다음 동적 관리 뷰를 사용할 수 있습니다. DMV를 쿼리하려면 인스턴스에 대한 VIEW SERVER STATE 권한이 필요합니다.

동적 관리 뷰(Dynamic management view) Type 설명
sys.dm_external_script_requests 실행 외부 스크립트를 실행 중인 각 활성 작업자 계정 행을 반환합니다.
sys.dm_external_script_execution_stats 실행 외부 스크립트 요청의 각 유형별로 하나의 행을 반환합니다.
sys.dm_os_performance_counters 실행 서버에서 유지 관리하는 성능 카운터당 행을 반환합니다. 검색 조건 WHERE object_name LIKE '%External Scripts%'을(를) 사용하는 경우 이 정보를 사용하여 실행된 스크립트 수, 각 인증 모드를 사용하여 실행된 스크립트 또는 전체 인스턴스에서 실행된 R 또는 Python 호출 수를 확인할 수 있습니다.
sys.dm_resource_governor_external_resource_pools Resource Governor Resource Governor의 현재 외부 리소스 풀 상태, 리소스 풀의 현재 구성 및 리소스 풀 통계에 대한 정보를 반환합니다.
sys.dm_resource_governor_external_resource_pool_affinity Resource Governor Resource Governor의 현재 외부 리소스 풀 구성에 대한 CPU 선호도 정보를 반환합니다. 각 스케줄러가 개별 프로세서에 매핑되는 SQL Server의 스케줄러당 한 행을 반환합니다. 이 보기를 사용하여 스케줄러의 상태를 모니터링하거나 런어웨이 태스크를 식별할 수 있습니다.

SQL Server 인스턴스 모니터링에 대한 자세한 내용은 카탈로그 뷰Resource Governor 관련 동적 관리 뷰를 참조하세요.

설정 및 구성

Machine Learning Services 설치 설정 및 구성 옵션을 봅니다.

설정 및 구성 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 사용되는 보기 및 함수에 대한 자세한 내용은 sys.dm_server_registry, sys.configurationsSERVERPROPERTY를 참조하세요.

SELECT CAST(SERVERPROPERTY('IsAdvancedAnalyticsInstalled') AS INT) AS IsMLServicesInstalled
    , CAST(value_in_use AS INT) AS ExternalScriptsEnabled
    , COALESCE(SIGN(SUSER_ID(CONCAT (
                    CAST(SERVERPROPERTY('MachineName') AS NVARCHAR(128))
                    , '\SQLRUserGroup'
                    , CAST(serverproperty('InstanceName') AS NVARCHAR(128))
                    ))), 0) AS ImpliedAuthenticationEnabled
    , COALESCE((
            SELECT CAST(r.value_data AS INT)
            FROM sys.dm_server_registry AS r
            WHERE r.registry_key LIKE 'HKLM\Software\Microsoft\Microsoft SQL Server\%\SuperSocketNetLib\Tcp'
            AND r.value_name = 'Enabled'
            ), - 1) AS IsTcpEnabled
FROM sys.configurations
WHERE name = 'external scripts enabled';

이 쿼리는 다음 열을 반환합니다.

설명
IsMLServicesInstalled 인스턴스에 SQL Server Machine Learning Services가 설치된 경우 1을 반환합니다. 그렇지 않으면 0을 반환합니다.
ExternalScriptsEnabled 인스턴스에 대해 외부 스크립트를 사용하도록 설정된 경우 1을 반환합니다. 그렇지 않으면 0을 반환합니다.
ImpliedAuthenticationEnabled 묵시적 인증을 사용하도록 설정된 경우 1을 반환합니다. 그렇지 않으면 0을 반환합니다. SQLRUserGroup에 대한 로그인이 있는지 확인하여 묵시적 인증에 대한 구성을 확인합니다.
IsTcpEnabled 인스턴스에 TCP/IP 프로토콜을 사용하도록 설정된 경우 1을 반환합니다. 그렇지 않으면 0을 반환합니다. 자세한 내용은 기본 SQL Server 네트워크 프로토콜 구성을 참조하세요.

활성 세션

외부 스크립트를 실행하는 활성 세션을 봅니다.

활성 설정 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 사용되는 동적 관리 뷰에 대한 자세한 내용은 sys.dm_exec_requests, sys.dm_external_script_requestssys.dm_exec_sessions를 참조하세요.

SELECT r.session_id, r.blocking_session_id, r.status, DB_NAME(s.database_id) AS database_name
    , s.login_name, r.wait_time, r.wait_type, r.last_wait_type, r.total_elapsed_time, r.cpu_time
    , r.reads, r.logical_reads, r.writes, er.language, er.degree_of_parallelism, er.external_user_name
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_external_script_requests AS er
ON r.external_script_request_id = er.external_script_request_id
INNER JOIN sys.dm_exec_sessions AS s
ON s.session_id = r.session_id;

이 쿼리는 다음 열을 반환합니다.

설명
session_id 각 활성 주 연결과 연관된 세션을 식별합니다.
blocking_session_id 요청을 차단하는 세션의 ID입니다. 이 열이 NULL이면 요청이 차단되지 않거나 차단 세션의 세션 정보를 사용할 수 없습니다(또는 식별할 수 없음).
status 요청의 상태입니다.
database_name 각 세션의 현재 데이터베이스 이름입니다.
login_name 현재 세션이 실행되고 있는 SQL Server 로그인 이름입니다.
wait_time 요청이 현재 차단된 경우 이 열은 현재 대기 기간을 밀리초 단위로 반환합니다. Null을 허용하지 않습니다.
wait_type 요청이 현재 차단된 경우 이 열은 대기 유형을 반환합니다. 대기 유형에 대한 자세한 내용은 sys.dm_os_wait_stats를 참조하세요.
last_wait_type 이 요청이 이전에 차단된 경우 이 열은 마지막 대기 유형을 반환합니다.
total_elapsed_time 요청이 도착한 이후 경과한 총 시간(밀리초)입니다.
cpu_time 요청에 사용되는 CPU 시간(밀리초)입니다.
reads 이 요청에 의해 수행된 읽기 수입니다.
logical_reads 요청에 의해 수행된 논리적 읽기 수입니다.
writes 이 요청에 의해 수행된 쓰기 수입니다.
language 지원되는 스크립트 언어를 나타내는 키워드입니다.
degree_of_parallelism 생성된 병렬 프로세스 수를 나타내는 숫자입니다. 이 값은 요청된 병렬 프로세스 수와 다를 수 있습니다.
external_user_name 스크립트가 실행된 Windows 작업자 계정입니다.

실행 통계

R 및 Python의 외부 런타임에 대한 실행 통계를 봅니다. RevoScaleR, revoscalepy 또는 microsoftml 패키지 함수의 통계만 현재 사용할 수 있습니다.

실행 통계 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 사용되는 동적 관리 뷰에 대한 자세한 내용은 sys.dm_external_script_execution_stats를 참조하세요. 쿼리는 두 번 이상 실행된 함수만 반환합니다.

SELECT language, counter_name, counter_value
FROM sys.dm_external_script_execution_stats
WHERE counter_value > 0
ORDER BY language, counter_name;

이 쿼리는 다음 열을 반환합니다.

설명
language 등록된 외부 스크립트 언어의 이름입니다.
counter_name 등록된 외부 스크립트 함수의 이름입니다.
counter_value 등록된 외부 스크립트 함수가 서버에서 호출된 총 인스턴스 수입니다. 이 값은 인스턴스에 기능이 설치된 시간부터 시작하여 누적되며 재설정할 수 없습니다.

성능 카운터

외부 스크립트 실행과 관련된 성능 카운터를 봅니다.

성능 카운터 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 사용되는 동적 관리 뷰에 대한 자세한 내용은 sys.dm_os_performance_counters를 참조하세요.

SELECT counter_name, cntr_value
FROM sys.dm_os_performance_counters 
WHERE object_name LIKE '%External Scripts%'

sys.dm_os_performance_counters는 외부 스크립트에 대해 다음과 같은 성능 카운터를 출력합니다.

카운터 설명
총 실행 수 로컬 또는 원격 호출로 시작된 외부 프로세스 수입니다.
병렬 실행 스크립트에 @parallel 사양이 포함되어 있고 SQL Server에서 병렬 쿼리 계획을 생성하여 사용할 수 있었던 횟수입니다.
스트리밍 실행 스트리밍 기능이 호출된 횟수입니다.
SQL CC 실행 호출이 원격으로 인스턴스화되었으며 SQL Server가 컴퓨팅 컨텍스트로 사용된 외부 스크립트 실행 횟수입니다.
묵시적 인증 로그인 묵시적 인증을 사용하여 ODBC 루프백 호출이 이루어진 횟수입니다. 즉, SQL Server가 스크립트 요청을 보내는 사용자를 대신하여 호출을 실행했습니다.
총 실행 시간(ms) 호출과 호출 완료 사이에 경과된 시간입니다.
실행 오류 스크립트에서 오류를 보고한 횟수입니다. 이 개수에는 R 또는 Python 오류가 포함되지 않습니다.

메모리 사용량

OS, SQL Server 및 외부 풀에서 사용하는 메모리에 대한 정보를 봅니다.

메모리 사용량 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 사용되는 동적 관리 뷰에 대한 자세한 내용은 sys.dm_resource_governor_external_resource_poolssys.dm_os_sys_info를 참조하세요.

SELECT physical_memory_kb, committed_kb
    , (SELECT SUM(peak_memory_kb)
        FROM sys.dm_resource_governor_external_resource_pools AS ep
        ) AS external_pool_peak_memory_kb
FROM sys.dm_os_sys_info;

이 쿼리는 다음 열을 반환합니다.

설명
physical_memory_kb 컴퓨터의 실제 메모리 총량입니다.
committed_kb 메모리 관리자의 커밋된 메모리(KB)입니다. 메모리 관리자에 예약된 메모리를 포함하지 않습니다.
external_pool_peak_memory_kb 모든 외부 리소스 풀에 사용된 최대 메모리 양(KB)의 합계입니다.

메모리 구성

SQL Server 및 외부 리소스 풀의 최대 메모리 구성 비율에 대한 정보를 표시합니다. SQL Server가 기본값인 max server memory (MB)로 실행 중인 경우 OS 메모리의 100%로 간주됩니다.

메모리 구성 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 사용되는 보기에 대한 자세한 내용은 sys.configurationssys.dm_resource_governor_external_resource_pools를 참조하세요.

SELECT 'SQL Server' AS name
    , CASE CAST(c.value AS BIGINT)
        WHEN 2147483647 THEN 100
        ELSE (SELECT CAST(c.value AS BIGINT) / (physical_memory_kb / 1024.0) * 100 FROM sys.dm_os_sys_info)
        END AS max_memory_percent
FROM sys.configurations AS c
WHERE c.name LIKE 'max server memory (MB)'
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name, ep.max_memory_percent
FROM sys.dm_resource_governor_external_resource_pools AS ep;

이 쿼리는 다음 열을 반환합니다.

설명
name 외부 리소스 풀 또는 SQL Server의 이름입니다.
max_memory_percent SQL Server 또는 외부 리소스 풀에서 사용할 수 있는 최대 메모리입니다.

리소스 풀

SQL Server Resource Governor에서 리소스 풀은 인스턴스의 물리적 리소스 하위 세트를 나타냅니다. 외부 스크립트 실행을 포함하여 들어오는 애플리케이션 요청이 리소스 풀 내에서 사용할 수 있는 CPU, 물리적 IO 및 메모리 양을 제한할 수 있습니다. SQL Server 및 외부 스크립트에 사용되는 리소스 풀을 봅니다.

리소스 풀 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 사용되는 동적 관리 뷰에 대한 자세한 내용은 sys.dm_resource_governor_resource_poolssys.dm_resource_governor_external_resource_pools를 참조하세요.

SELECT CONCAT ('SQL Server - ', p.name) AS pool_name
    , p.total_cpu_usage_ms, p.read_io_completed_total, p.write_io_completed_total
FROM sys.dm_resource_governor_resource_pools AS p
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name
    , ep.total_cpu_user_ms, ep.read_io_count, ep.write_io_count
FROM sys.dm_resource_governor_external_resource_pools AS ep;

이 쿼리는 다음 열을 반환합니다.

설명
pool_name 리소스 풀의 이름입니다. SQL Server 리소스 풀에는 SQL Server라는 접두사가 붙고 외부 리소스 풀에는 External Pool이라는 접두사가 붙습니다.
total_cpu_usage_hours Resource Governor 통계를 다시 설정한 후 누적된 CPU 사용량(밀리초)입니다.
read_io_completed_total Resource Governor 통계를 다시 설정한 후 완료된 총 읽기 IO입니다.
write_io_completed_total Resource Governor 통계를 다시 설정한 후 완료된 총 쓰기 IO입니다.

설치된 패키지

SQL Server Machine Learning Services에 설치된 R 및 Python 패키지를 출력하는 R 또는 Python 스크립트를 실행하여 R 및 Python 패키지를 볼 수 있습니다.

R용으로 설치된 패키지

SQL Server Machine Learning Services에 설치된 R 패키지를 봅니다.

R에 대해 설치된 패키지 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 쿼리는 R 스크립트를 사용하여 SQL Server에 설치된 R 패키지를 확인합니다.

EXECUTE sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", "Version", "Depends", "License", "LibPath")]);'
WITH result sets((Package NVARCHAR(255), Version NVARCHAR(100), Depends NVARCHAR(4000)
    , License NVARCHAR(1000), LibPath NVARCHAR(2000)));

반환되는 열은 다음과 같습니다.

설명
패키지 설치된 패키지의 이름입니다.
버전 패키지의 버전입니다.
개체 설치된 패키지가 종속된 패키지를 나열합니다.
라이선스 설치된 패키지의 라이선스입니다.
LibPath 패키지를 찾을 수 있는 디렉터리입니다.

Python용으로 설치된 패키지

SQL Server Machine Learning Services에 설치된 Python 패키지를 봅니다.

Python에 대해 설치된 패키지 쿼리의 출력

이 출력을 얻으려면 아래 쿼리를 실행합니다. 쿼리는 Python 스크립트를 사용하여 SQL Server와 함께 설치된 Python 패키지를 확인합니다.

EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pkg_resources
import pandas
OutputDataSet = pandas.DataFrame(sorted([(i.key, i.version, i.location) for i in pkg_resources.working_set]))'
WITH result sets((Package NVARCHAR(128), Version NVARCHAR(128), Location NVARCHAR(1000)));

반환되는 열은 다음과 같습니다.

설명
패키지 설치된 패키지의 이름입니다.
버전 패키지의 버전입니다.
위치 패키지를 찾을 수 있는 디렉터리입니다.

다음 단계