Menggunakan Penyedia PowerShell untuk Kejadian yang Diperluas

Berlaku untuk:SQL ServerAzure SQL Database

Anda dapat mengelola SQL Server Extended Events dengan menggunakan penyedia PowerShell SQL Server. Subfolder XEvent tersedia di bawah drive SQLSERVER. Anda dapat mengakses folder dengan menggunakan salah satu metode berikut:

  • Pada prompt perintah, ketik sqlps, lalu tekan ENTER. Ketik cd xevent, lalu tekan ENTER. Dari sana, Anda dapat menggunakan perintah cd dan dir (atau cmdlet Set-Location dan Get-Childitem ) untuk menavigasi ke nama server dan nama instans.

  • Di Object Explorer, perluas nama instans, perluas Manajemen, klik kanan Peristiwa yang Diperluas, lalu klik Mulai PowerShell. Ini memulai PowerShell di jalur berikut:

    PS SQLSERVER:\XEvent\ServerName\InstanceName>

    Catatan

    Anda dapat memulai PowerShell dari simpul apa pun di bawah Kejadian yang Diperluas. Misalnya, Anda bisa mengklik kanan Sesi, lalu klik Mulai PowerShell. Ini memulai PowerShell satu tingkat lebih dalam, di folder Sesi.

Anda dapat menelusuri pohon folder XEvent untuk melihat sesi Extended Events yang ada dan peristiwa, target, dan predikat terkait. Misalnya, dari jalur PS SQLSERVER:\XEvent\ServerName\InstanceName>, jika Anda mengetik sesi cd, tekan ENTER, ketik dir, lalu tekan ENTER, Anda dapat melihat daftar sesi yang disimpan pada instans tersebut. Anda juga dapat melihat apakah sesi berjalan (dan jika demikian, untuk berapa lama), dan apakah sesi dikonfigurasi untuk memulai saat instans dimulai.

Untuk melihat peristiwa, prediksi, dan target yang terkait dengan sesi, Anda dapat mengubah direktori ke nama sesi, lalu melihat folder peristiwa atau target. Misalnya, untuk melihat peristiwa dan predikatnya yang terkait dengan sesi kesehatan sistem default, dari jalur PS SQLSERVER:\XEvent\ServerName\InstanceName\Sessions>, ketik cd system_health\events, tekan ENTER, ketik dir, lalu tekan ENTER.

Penyedia PowerShell SQL Server adalah alat canggih yang dapat Anda gunakan untuk membuat, mengubah, dan mengelola sesi Extended Events. Bagian berikut ini menyediakan beberapa contoh dasar penggunaan skrip PowerShell dengan Extended Events.

Contoh

Dalam contoh berikut, perhatikan hal berikut:

  • Skrip harus dijalankan dari permintaan PS SQLSERVER:\> (tersedia dengan mengetik sqlps pada prompt perintah).

  • Skrip menggunakan instans default SQL Server.

  • Skrip harus disimpan dengan ekstensi .ps1.

  • Kebijakan eksekusi PowerShell harus memungkinkan skrip berjalan. Untuk mengatur kebijakan eksekusi, gunakan cmdlet Set-Executionpolicy . (Untuk informasi selengkapnya, ketik get-help set-executionpolicy -detail, lalu tekan ENTER.)

Skrip berikut membuat sesi baru yang diberi nama '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()  

Skrip berikut menambahkan target buffer cincin ke sesi yang dibuat dalam contoh sebelumnya. (Contoh ini menunjukkan penggunaan Ubah metode. Ketahuilah bahwa Anda dapat menambahkan target saat pertama kali membuat sesi.)

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

Skrip berikut membuat sesi baru yang menggunakan ekspresi predikat. Dalam hal ini, sesi mengumpulkan informasi ketika file c:\temp.log ditulis ke (melalui peristiwa sqlserver.file_written).

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

Keamanan

Untuk membuat, mengubah, atau menghilangkan sesi Acara yang Diperluas, Anda harus memiliki izin UBAH SESI PERISTIWA APA PUN.

Lihat Juga

SQL Server PowerShell
Menggunakan Sesi system_health
Alat Kejadian yang Diperluas