Utilizzare il provider PowerShell per eventi estesiUse the PowerShell Provider for Extended Events

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2014)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

È possibile gestire eventi estesi di SQL ServerSQL Server tramite il provider PowerShell per SQL ServerSQL Server .You can manage SQL ServerSQL Server Extended Events by using the SQL ServerSQL Server PowerShell provider. La sottocartella XEvent è disponibile all'interno dell'unità SQLSERVER.The XEvent subfolder is available under the SQLSERVER drive. È possibile accedere alla cartella utilizzando uno dei metodi seguenti:You can access the folder by using either of the following methods:

  • Al prompt dei comandi digitare sqlps, quindi premere INVIO.At a command prompt, type sqlps, and then press ENTER. Digitare cd xevent, quindi premere INVIO.Type cd xevent, and then press ENTER. È quindi possibile usare i comandi cd e dir o i cmdlet Set-Location e Get-Childitem per passare al nome del server e al nome dell'istanza.From there, you can use the cd and dir commands (or Set-Location and Get-Childitem cmdlets) to navigate to the server name and instance name.

  • In Esplora oggetti espandere il nome dell'istanza, espandere Gestione, fare clic con il pulsante destro del mouse su Eventi estesi, quindi scegliere Avvia PowerShell.In Object Explorer, expand the instance name, expand Management, right-click Extended Events, and then click Start PowerShell. Verrà avviato PowerShell nel percorso seguente:This starts PowerShell in the following path:

    PS SQLSERVER:\XEvent\NomeServer\NomeIstanza>PS SQLSERVER:\XEvent\ServerName\InstanceName>

    Nota

    È possibile avviare PowerShell da qualsiasi nodo all'interno di Eventi estesi.You can start PowerShell from any node under Extended Events. È possibile, ad esempio, fare clic con il pulsante destro del mouse su Sessionie quindi scegliere Avvia PowerShell.For example, you can right-click Sessions, and then click Start PowerShell. Verrà avviato PowerShell a un livello più interno, nella cartella Sessioni.This starts PowerShell one level deeper, at the Sessions folder.

    È possibile esplorare l'albero delle cartelle XEvent per visualizzare sessioni di eventi estesi esistenti e i relativi eventi, database di destinazione e predicati associati.You can browse the XEvent folder tree to view existing Extended Events sessions and their associated events, targets and predicates. Se, ad esempio, dal percorso PS SQLSERVER:\XEvent\NomeServer\NomeIstanza> si digita cd sessions, si preme INVIO, si digita dir e quindi si preme INVIO, sarà possibile visualizzare l'elenco delle sessioni archiviate nell'istanza specificata.For example, from the PS SQLSERVER:\XEvent\ServerName\InstanceName> path, if you type cd sessions, press ENTER, type dir, and then press ENTER, you can see the list of sessions that are stored on that instance. È inoltre possibile visualizzare se la sessione è in esecuzione, e in tal caso per quanto tempo, e se la sessione è configurata per l'avvio all'avvio dell'istanza.You can also view whether the session is running (and if this is the case, for how long), and whether the session is configured to start when the instance starts.

    Per visualizzare gli eventi, i relativi predicati e i database di destinazione associati a una sessione, è possibile passare alla directory con il nome della sessione e quindi visualizzare la cartella degli eventi o dei database di destinazione.To view the events, their predictates, and the targets that are associated with a session, you can change directories to the session name, and then view either the events or targets folder. Per visualizzare, ad esempio, gli eventi e i relativi predicati associati alla sessione di integrità del sistema predefinita, dal percorso PS SQLSERVER:\XEvent\NomeServer\NomeIstanza\Sessions> digitare cd system_health\events, premere INVIO, digitare dir, quindi premere INVIO.For example, to view the events and their predicates that are associated with the default system health session, from the PS SQLSERVER:\XEvent\ServerName\InstanceName\Sessions> path, type cd system_health\events, press ENTER, type dir, and then press ENTER.

    Il provider PowerShell per SQL ServerSQL Serverè uno strumento potente che consente di creare, modificare e gestire sessioni di eventi estesi.The SQL ServerSQL Server PowerShell provider is a powerful tool that you can use to create, alter, and manage Extended Events sessions. Nella sezione seguente vengono forniti alcuni esempi di base dell'utilizzo di script di PowerShell con eventi estesi.The following section provides some basic examples of using PowerShell scripts with Extended Events.

EsempiExamples

Negli esempi seguenti notare quanto segue:In the following examples, note the following:

  • È necessario eseguire gli script dal prompt PS SQLSERVER:\>, disponibile digitando sqlps al prompt dei comandi.The scripts must be run from the PS SQLSERVER:\> prompt (available by typing sqlps at a command prompt).

  • Gli script utilizzano l'istanza predefinita di SQL ServerSQL Server.The scripts use the default instance of SQL ServerSQL Server.

  • È necessario salvare gli script con estensione ps1.The scripts must be saved with a .ps1 extension.

  • I criteri di esecuzione di PowerShell devono consentire l'esecuzione dello script.The PowerShell execution policy must allow the script to run. Per impostare i criteri di esecuzione, usare il cmdlet Set-ExecutionpolicyTo set the execution policy, use the Set-Executionpolicy cmdlet. Per altre informazioni, digitare get-help set-executionpolicy -detailed, quindi premere INVIO.(For more information, type get-help set-executionpolicy -detailed, and then press ENTER.)

    Nello script seguente viene creata una nuova sessione denominata 'TestSession'.The following script creates a new session that is named '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()  

Nello script seguente viene aggiunta la destinazione del buffer circolare alla sessione creata nell'esempio precedente.The following script adds the ring buffer target to the session that was created in the previous example. Questo esempio illustra l'uso del metodo Alter(This example shows the use of the Alter method. Tenere presente che è possibile aggiungere la destinazione quando si crea la sessione per la prima volta.Be aware that you can add the target when you first create the session.)

#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()  

Nello script seguente viene creata una nuova sessione in cui è utilizzata un'espressione di predicato.The following script creates a new session that uses a predicate expression. In questo caso la sessione raccoglie informazioni per il momento in cui verrà scritto il file c:\temp.log tramite l'evento sqlserver.file_written.In this case, the session collects information for when the c:\temp.log file is written to (through the sqlserver.file_written event).

#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()  

SicurezzaSecurity

Per creare, modificare o eliminare una sessione di eventi estesi, è necessario disporre dell'autorizzazione ALTER ANY EVENT SESSION.To create, alter, or drop an Extended Events session, you must have the ALTER ANY EVENT SESSION permission.

Vedere ancheSee Also

SQL Server PowerShell SQL Server PowerShell
Utilizzare la sessione system_health Use the system_health Session
Strumenti degli eventi estesi Extended Events Tools