확장 이벤트에 PowerShell 공급자 사용
적용 대상: SQL Server Azure SQL Database
SQL Server PowerShell 공급자를 사용하여 SQL Server 확장 이벤트를 관리할 수 있습니다. XEvent 하위 폴더는 SQLSERVER 드라이브 아래에 있습니다. 다음 방법 중 하나를 사용하여 폴더에 액세스할 수 있습니다.
명령 프롬프트에서 sqlps를 입력하고 Enter 키를 누릅니다. cd xevent을 입력한 다음 Enter키를 누릅니다. 여기서 cd 및 dir 명령이나 Set-Location 및 Get-Childitem cmdlet을 사용하여 서버 이름 및 인스턴스 이름으로 이동할 수 있습니다.
개체 탐색기에서 인스턴스 이름, 관리를 차례로 확장하고 확장 이벤트를 마우스 오른쪽 단추로 클릭한 다음 PowerShell 시작을 클릭합니다. 그러면 다음 경로에서 PowerShell이 시작됩니다.
PS SQLSERVER:\XEvent\ServerName\InstanceName>
참고 항목
확장 이벤트의 노드에서 PowerShell을 시작할 수 있습니다. 예를 들어 세션을 마우스 오른쪽 단추로 클릭한 다음 PowerShell 시작을 클릭할 수 있습니다. 그러면 세션 폴더에서 PowerShell이 한 수준 더 깊게 시작됩니다.
XEvent 폴더 트리를 탐색하여 기존 확장 이벤트 세션 및 관련 이벤트, 대상 및 조건자를 볼 수 있습니다. 예를 들어 PS SQLSERVER:\XEvent\ServerName\InstanceName> 경로에서 cd sessions를 입력하고 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 권한이 있어야 합니다.