확장 이벤트에 PowerShell 공급자 사용

적용 대상:SQL ServerAzure SQL Database

SQL Server PowerShell 공급자를 사용하여 SQL Server 확장 이벤트를 관리할 수 있습니다. XEvent 하위 폴더는 SQLSERVER 드라이브 아래에 있습니다. 다음 방법 중 하나를 사용하여 폴더에 액세스할 수 있습니다.

  • 명령 프롬프트에서 sqlps를 입력하고 Enter 키를 누릅니다. cd xevent를 입력한 다음 Enter 키를 누릅니다. 여기서 cddir 명령이나 Set-LocationGet-Childitem cmdlet을 사용하여 서버 이름 및 인스턴스 이름으로 이동할 수 있습니다.

  • 개체 탐색기에서 인스턴스 이름, 관리를 차례로 확장하고 확장 이벤트를 마우스 오른쪽 단추로 클릭한 다음 PowerShell 시작을 클릭합니다. 그러면 다음 경로에서 PowerShell이 시작됩니다.

    PS SQLSERVER:\XEvent\ServerName\InstanceName>

    참고 항목

    확장 이벤트의 노드 에서 PowerShell을 시작할 수 있습니다. 예를 들어 세션을 마우스 오른쪽 단추로 클릭한 다음 PowerShell 시작을 클릭할 수 있습니다. 그러면 세션 폴더에서 PowerShell이 한 수준 더 깊게 시작됩니다.

XEvent 폴더 트리를 탐색하여 기존 확장 이벤트 세션 및 관련 이벤트, 대상 및 조건자를 볼 수 있습니다. 예를 들어 PS SQLSERVER:\XEvent\ServerName InstanceName>\ 경로에서 CD 세션을 입력하고 Enter 키를 누르고 dir을 입력한 다음 Enter 키를 누르면 해당 인스턴스에 저장된 세션 목록을 볼 수 있습니다. 또한 세션이 실행 중인지(그리고 이 경우의 경우 기간) 및 인스턴스가 시작될 때 세션이 시작되도록 구성되었는지 여부를 확인할 수 있습니다.

이벤트, 해당 예측 및 세션과 연결된 대상을 보려면 디렉터리를 세션 이름으로 변경한 다음 이벤트 또는 대상 폴더를 볼 수 있습니다. 예를 들어 기본 시스템 상태 세션과 연결된 이벤트 및 해당 조건자를 보려면 PS SQLSERVER:\XEvent\ServerName InstanceName\\Sessions> 경로에서 cd system_health\events를 입력하고 Enter 키를 누르고 dir을 입력한 다음 Enter 키를 누릅니다.

SQL Server PowerShell 공급자는 확장 이벤트 세션을 만들고, 변경하고, 관리하는 데 사용할 수 있는 강력한 도구입니다. 다음 섹션에서는 확장 이벤트와 함께 PowerShell 스크립트를 사용하는 몇 가지 기본 예제를 제공합니다.

다음 예제에서는 다음 사항에 유의하세요.

  • 스크립트는 PS SQLSERVER:\> 프롬프트에서 실행해야 합니다(명령 프롬프트에 sqlps를 입력하여 사용 가능).

  • 스크립트는 SQL Server의 기본 인스턴스를 사용합니다.

  • 스크립트는 .ps1 확장으로 저장해야 합니다.

  • PowerShell 실행 정책은 스크립트 실행을 허용해야 합니다. 실행 정책을 설정하려면 Set-Executionpolicy cmdlet을 사용합니다. 자세한 내용을 보려면 get-help set-executionpolicy -detailed를 입력한 다음 Enter 키를 누릅니다.

다음 스크립트는 'TestSession'이라는 새 세션을 만듭니다.

#Script for creating a session.  
cd XEvent  
$h = hostname  
cd $h  
  
#Use the default instance.  
$store = dir | where {$_.DisplayName -ieq 'default'}  
$session = new-object Microsoft.SqlServer.Management.XEvent.Session -argumentlist $store, "TestSession"  
$event = $session.AddEvent("sqlserver.file_written")  
$event.AddAction("package0.callstack")  
$session.Create()  

다음 스크립트는 이전 예제에서 만든 세션에 링 버퍼 대상을 추가합니다. (이 예제에서는 Alter 메서드. 세션을 처음 만들 때 대상을 추가할 수 있습니다.)

#Script to alter a session.  
cd XEvent  
$h = hostname  
cd $h  
cd DEFAULT\Sessions  
  
#Used to find the specified session.  
$session = dir|where {$_.Name -eq 'TestSession'}  
  
#Add the ring buffer target and call the Alter method.  
$session.AddTarget("package0.ring_buffer")  
$session.Alter()  

다음 스크립트는 조건자 식을 사용하는 새 세션을 만듭니다. 이 경우 세션에서 sqlserver.file_written 이벤트를 통해 c:\temp.log 파일이 기록되는 시점에 대한 정보를 수집합니다.

#Script for creating a session.  
cd XEvent  
$h = hostname  
cd $h  
  
#Use the default instance.  
$store = dir | where {$_.DisplayName -ieq 'default'}  
$session = new-object Microsoft.SqlServer.Management.XEvent.Session -argumentlist $store, "TestSession2"  
$event = $session.AddEvent("sqlserver.file_written")  
  
#Construct a predicate "equal_i_unicode_string(path, N'c:\temp.log')".  
$column = $store.SqlServerPackage.EventInfoSet["file_written"].DataEventColumnInfoSet["path"]  
$operand = new-object Microsoft.SqlServer.Management.XEvent.PredOperand -argumentlist $column  
$value = new-object Microsoft.SqlServer.Management.XEvent.PredValue -argumentlist "c:\temp.log"  
$compare = $store.Package0Package.PredCompareInfoSet["equal_i_unicode_string"]  
$predicate = new-object Microsoft.SqlServer.Management.XEvent.PredFunctionExpr -argumentlist $compare, $operand, $value  
$event.SetPredicate($predicate)  
$session.Create()  

보안

확장 이벤트 세션을 만들거나 변경하거나 삭제하려면 ALTER ANY EVENT SESSION 권한이 있어야 합니다.

참고 항목

SQL Server PowerShell
system_health 세션 사용
확장 이벤트 도구