拡張イベントへの PowerShell プロバイダーの使用

適用対象:SQL ServerAzure SQL Database

SQL Server PowerShell プロバイダーを使用して、SQL Server 拡張イベントを管理することができます。 XEvent サブフォルダーは、SQLSERVER ドライブで利用可能です。 このフォルダーには、次のいずれかの方法でアクセスできます。

  • コマンド プロンプトで「 sqlps」と入力し、Enter キーを押します。 「 cd xevent」と入力して Enter キーを押します。 そこから、 cd コマンドと dir コマンド (または Set-Location コマンドレットと Get-Childitem コマンドレット) を使用して、サーバー名とインスタンス名に移動できます。

  • オブジェクト エクスプローラーで、インスタンス名、 [管理]の順に展開し、 [拡張イベント]を右クリックして、 [PowerShell の起動]をクリックします。 これにより、次のパスで PowerShell が起動します。

    PS SQLSERVER:\XEvent\ServerName\InstanceName>

    注意

    PowerShell は、 [拡張イベント]の下の任意のノードから起動できます。 たとえば、 [Sessions]を右クリックし、 [PowerShell の起動]をクリックできます。 これにより、1 レベル深い Sessions フォルダーで PowerShell が起動します。

XEvent フォルダー ツリーを参照して、既存の拡張イベント セッションと、関連するイベント、ターゲット、および述語を表示できます。 たとえば、PS SQLSERVER:\XEventServerName\InstanceName> パスから、「cd sessions」と入力し、[Enter] キーを押し、「dir」と入力して、[Enter] キーを押すと、そのインスタンスに格納されているセッションの一覧を表示できます。 また、セッションが実行中かどうか (および実行中の場合は実行時間)、およびセッションがインスタンスの起動時に開始されるように構成されているかどうかも表示されます。

セッションに関連付けられているイベント、述語、およびターゲットを表示するには、ディレクトリをセッション名に変更してから、events フォルダーまたは targets フォルダーを表示します。 たとえば、既定のシステム正常性セッションに関連付けられているイベントとその述語を表示するには、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 コマンドレットを使用します (詳細については、「 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 セッションの使用
拡張イベントのツール