Bagikan melalui


Mulai Cepat: Acara yang Diperluas

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Extended Events adalah fitur pemantauan performa ringan yang memungkinkan pengguna mengumpulkan data untuk memantau dan memecahkan masalah. Dengan menggunakan Extended Events, Anda dapat melihat detail operasi internal mesin database yang relevan untuk tujuan pemantauan dan pemecahan masalah performa. Untuk mempelajari selengkapnya tentang Acara yang Diperluas, lihat Gambaran umum Kejadian yang Diperluas.

Artikel ini bertujuan untuk membantu administrator, teknisi, dan pengembang SQL yang baru menggunakan Extended Events, dan yang ingin mulai menggunakannya dan melihat data peristiwa hanya dalam beberapa menit.

Extended Events juga dikenal sebagai XEvents, dan terkadang hanya XE.

Setelah membaca artikel ini, Anda dapat:

  • Lihat cara membuat sesi peristiwa di SQL Server Management Studio (SSMS), dengan contoh cuplikan layar.
  • Menghubungkan cuplikan layar dengan pernyataan Transact-SQL yang setara.
  • Pahami secara rinci istilah dan konsep di balik antarmuka pengguna SSMS dan pernyataan T-SQL XEvents.
  • Pelajari cara menguji sesi peristiwa Anda.
  • Pahami hasil sesi, termasuk:
    • Opsi yang tersedia untuk penyimpanan hasil
    • Hasil yang diproses versus mentah
    • Alat untuk melihat hasilnya dengan cara yang berbeda dan pada skala waktu yang berbeda
  • Lihat bagaimana Anda dapat mencari dan menemukan semua peristiwa yang tersedia.
  • Pahami hubungan di antara tampilan sistem Extended Events.

Tip

Untuk informasi selengkapnya tentang Peristiwa yang Diperluas di Azure SQL Database, termasuk sampel kode, lihat Peristiwa yang Diperluas di Azure SQL Database dan Azure SQL Managed Instance.

Prasyarat

Untuk memulai, Anda perlu:

  • Unduh SQL Server Management Studio (SSMS). Sebaiknya gunakan versi terbaru SSMS dengan peningkatan dan perbaikan terbaru.
  • Pastikan akun Anda telah CREATE ANY EVENT SESSION (diperkenalkan di SQL Server 2022), atau ALTER ANY EVENT SESSION izin server.
  • Selain itu, saat menggunakan SSMS dan untuk melihat sesi yang dibuat, login memerlukan izin VIEW SERVER PERFORMANCE STATE.

Detail tentang keamanan dan izin yang terkait dengan Kejadian yang Diperluas tersedia di akhir artikel ini di Lampiran.

Acara yang Diperluas di SSMS

SSMS menyediakan antarmuka pengguna (UI) yang berfungsi penuh untuk Kejadian yang Diperluas. Banyak skenario dapat dicapai menggunakan UI ini, tanpa harus menggunakan T-SQL atau tampilan manajemen dinamis (DMV).

Di bagian berikutnya Anda dapat melihat langkah-langkah UI untuk membuat sesi Extended Events, dan untuk melihat data yang dilaporkannya. Setelah melalui langkah-langkah langsung atau meninjaunya dalam artikel ini, Anda dapat membaca tentang konsep yang terlibat dalam langkah-langkah untuk pemahaman yang lebih mendalam.

Membuat sesi peristiwa di SSMS

Saat membuat sesi Extended Events, Anda akan memberi tahu sistem:

  • Peristiwa mana yang Anda minati.
  • Bagaimana Anda ingin sistem melaporkan data kepada Anda.

Demonstrasi membuka dialog Sesi Baru, memperlihatkan cara menggunakan empat halamannya, bernama:

  • Umum
  • Acara
  • Penyimpanan Data
  • Lanjutan

Teks dan cuplikan layar pendukung dapat sedikit berbeda dalam versi SSMS Anda, tetapi harus tetap relevan untuk penjelasan konsep dasar.

  1. Menyambungkan ke instans mesin database. Extended Events didukung dimulai dengan SQL Server 2014 (12.x), di Azure SQL Database, dan Azure SQL Managed Instance.

  2. Di Object Explorer, pilih Manajemen > Acara yang Diperluas. Di Azure SQL Database, sesi peristiwa dilingkup database, sehingga opsi Kejadian yang Diperluas ditemukan di bawah setiap database, bukan di bawah Manajemen.

  3. Klik kanan pada folder Sesi dan pilih Sesi Baru.... Dialog Sesi Baru... lebih disukai untuk Panduan Sesi Baru, meskipun keduanya serupa.

    Tip

    Dalam langkah-langkah tutorial ini, jangan tekan OK sampai Anda telah maju melalui keempat halaman: Umum, Peristiwa, Penyimpanan Data, dan Tingkat Lanjut.

  4. Pilih halaman Umum . Kemudian ketik YourSession, atau nama apa pun yang Anda suka, ke dalam kotak teks Nama sesi. Jangan pilih OK belum, karena Anda masih perlu memasukkan beberapa detail di halaman lain.

  5. Pilih halaman Peristiwa .

  6. Di area Pustaka peristiwa, di daftar dropdown, pilih Nama peristiwa saja.

    • Ketik sql_statement ke dalam kotak teks. Ini memfilter daftar untuk hanya menampilkan peristiwa dengan sql_statement dalam nama.
    • Gulir dan pilih peristiwa bernama sql_statement_completed.
    • Pilih tombol > panah kanan untuk memindahkan peristiwa ke kotak Acara yang dipilih.
  7. Tetap berada di halaman Peristiwa , pilih tombol Konfigurasikan . Ini membuka kotak Opsi konfigurasi peristiwa untuk peristiwa yang dipilih.

    Cuplikan layar Peristiwa > Sesi > Baru Pilih dari peristiwa library. sql_statement_completed dipilih. Tombol konfigurasi adalah tindakan berikutnya.

  8. Pilih tab Filter (Predikat). Selanjutnya, pilih baris filter baru yang berbuah Klik di sini untuk menambahkan klausa. Dalam tutorial ini, akan mengonfigurasi filter ini (juga dikenal sebagai predikat) untuk mengambil semua SELECT pernyataan dengan HAVING klausa.

  9. Di daftar dropdown Bidang, pilih sqlserver.sql_text.

    • Untuk Operator, pilih like_i_sql_unicode_string. Di sini, i atas nama operator berarti nsensitif huruf besar/kecil.
    • Untuk Nilai, ketik %SELECT%HAVING%. Di sini, tanda persen (%) adalah kartubebas yang berdiri untuk string karakter apa pun.

    Catatan

    Dalam nama dua bagian bidang, sqlserver adalah nama paket dan sql_text adalah nama bidang. Peristiwa yang kita pilih sebelumnya, sql_statement_completed, harus berada dalam paket yang sama dengan bidang yang kita pilih.

    Cuplikan layar Bidang Filter Konfigurasi > Peristiwa > Sesi > Baru (Predikat). >

  10. Pilih halaman Penyimpanan Data.

  11. Di area Target, pilih baris Jenis Target baru yang mengatakan Klik di sini untuk menambahkan target. Dalam tutorial ini, kita akan menulis data peristiwa yang diperluas yang diambil ke file peristiwa. Ini berarti data peristiwa disimpan dalam file yang dapat kita buka dan lihat nanti. Dimulai dengan SQL Server 2019 (15.x), data peristiwa juga dapat ditulis untuk disimpan di Azure Storage, default di Azure SQL.

    • Di daftar dropdown Jenis, pilih event_file.
  12. Di area Properti, ketikkan jalur lengkap dan nama file ke dalam kotak teks Nama file di server. Anda juga dapat menggunakan tombol Telusuri . Ekstensi nama file harus xel. Dalam contoh kami, kami menggunakan C:\temp\YourSession_Target.xel.

    Cuplikan layar Jenis > Target > Penyimpanan > Data Sesi > Baru event_file.

  13. Pilih halaman Tingkat Lanjut . Secara default, target .xel dari sesi kejadian yang diperluas ini harus memiliki dampak minimal atau tidak pada performa server, tetapi pengaturan ini pada halaman Tingkat Lanjut dapat digunakan untuk meningkatkan atau mengurangi sumber daya dan latensi.

    Cuplikan layar Sesi > Baru Tingkat Lanjut.

  14. Pilih tombol OK di bagian bawah untuk membuat sesi kejadian ini.

  15. Kembali ke SSMS Object Explorer, buka atau refresh folder Sesi , dan lihat simpul baru untuk sesi peristiwa yang YourSession diperluas. Sesi belum dimulai. Dalam tutorial ini, kita akan memulainya nanti.

Mengedit sesi peristiwa di SQL Server Management Directory

Di SQL Server Management Studio Object Explorer, Anda dapat mengedit sesi acara dengan mengklik kanan simpulnya, lalu memilih Properti. Dialog multi-halaman yang sama ditampilkan.

Membuat sesi peristiwa menggunakan T-SQL

Di SQL Server Management Directory, Anda dapat membuat skrip T-SQL untuk membuat sesi peristiwa Anda sebagai berikut:

  • Klik kanan pada simpul sesi peristiwa, lalu pilih Sesi Skrip sebagai > BUAT ke > Clipboard.
  • Tempelkan ke editor teks apa pun.

Berikut adalah pernyataan T-SQL yang dihasilkan CREATE EVENT SESSION untuk YourSession:

CREATE EVENT SESSION [YourSession]
    ON SERVER -- For SQL Server and Azure SQL Managed Instance
    -- ON DATABASE -- For Azure SQL Database
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file 
    (SET filename=N'C:\temp\YourSession_Target.xel');
GO

Catatan

Di Azure SQL Database, gunakan ON DATABASE alih-alih ON SERVER.

DROP bersyarah dari sesi peristiwa

CREATE EVENT SESSION Sebelum pernyataan, Anda dapat menjalankan DROP EVENT SESSION pernyataan secara kondisional, jika sesi dengan nama yang sama sudah ada. Ini akan menghapus sesi yang ada. Tanpa ini, mencoba membuat sesi dengan nama yang sama menyebabkan kesalahan.

IF EXISTS (SELECT *
      FROM sys.server_event_sessions
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;
END
GO

Memulai dan menghentikan sesi peristiwa menggunakan T-SQL

Saat Anda membuat sesi peristiwa, defaultnya adalah agar tidak mulai berjalan secara otomatis. Anda dapat memulai atau menghentikan sesi acara kapan saja dengan menggunakan pernyataan T-SQL berikut ALTER EVENT SESSION .

ALTER EVENT SESSION [YourSession]
      ON SERVER
    STATE = START; -- STOP;

Anda memiliki opsi untuk mengonfigurasi sesi peristiwa untuk memulai secara otomatis saat instans mesin database dimulai. STARTUP STATE = ON Lihat kata kunci di CREATE EVENT SESSION.

UI SQL Server Management Studio menawarkan kotak centang yang sesuai, Mulai sesi peristiwa di startup server, pada halaman Umum Sesi > Baru.

Menguji sesi peristiwa

Uji sesi peristiwa Anda dengan langkah-langkah berikut:

  1. Di Object Explorer, klik kanan simpul sesi peristiwa Anda, lalu pilih Mulai Sesi.
  2. Saat tersambung ke server yang sama (atau database yang sama di Azure SQL Database) tempat Anda membuat sesi peristiwa, jalankan pernyataan berikut beberapa SELECT...HAVING kali. Pertimbangkan untuk mengubah nilai dalam HAVING klausul untuk setiap eksekusi, beralih antara 2 dan 3. Ini memungkinkan Anda untuk melihat perbedaan dalam hasil.
  3. Klik kanan simpul sesi Anda, dan pilih Hentikan Sesi.
  4. Baca subbagian berikutnya tentang cara MEMILIH dan melihat hasilnya.
SELECT c.name,
    COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
    ON o.id = c.id
WHERE o.type = 'V'
    AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2     -- Try both values during session.
ORDER BY c.name;

Untuk kelengkapan, berikut adalah contoh output dari sebelumnya SELECT...HAVING.

/* Approximate output, 6 rows, all HAVING Count >= 3:
name                   Count-Per-Column-Repeated-Name
---------------------  ------------------------------
event_group_type       4
event_group_type_desc  4
event_session_address  5
event_session_id       5
is_trigger_event       4
trace_event_id         3
*/

Menampilkan data sesi peristiwa sebagai XML

Di jendela kueri di SSMS, jalankan pernyataan berikut SELECT untuk melihat data peristiwa yang diambil oleh sesi Anda. Setiap baris mewakili satu kemunculan peristiwa. Mengubah CAST(... AS xml) tipe data kolom dari nvarchar ke xml. Ini memungkinkan Anda memilih nilai kolom, untuk membukanya di jendela baru agar lebih mudah dibaca.

Catatan

Target event_file selalu menyisipkan bagian numerik dalam xel nama file. Sebelum dapat menjalankan kueri berikut, Anda harus menyalin nama xel lengkap file aktual yang menyertakan bagian numerik ini, dan menempelkannya ke SELECT dalam pernyataan. Dalam contoh berikut, bagian numerik adalah _0_131085363367310000.

SELECT object_name,
    file_name,
    file_offset,
    event_data,
    'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!' AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],
    CAST(event_data AS XML) AS [event_data_XML]
-- TODO: In the SSMS results grid, click this XML cell
FROM sys.fn_xe_file_target_read_file(
    'C:\Temp\YourSession_Target_0_131085363367310000.xel', NULL, NULL, NULL
);

Kueri ini menyediakan dua cara untuk menampilkan hasil lengkap dari baris peristiwa tertentu:

  • Jalankan SELECT di SSMS, lalu pilih sel di event_data_XML kolom .

  • Salin string XML dari sel di event_data kolom . Tempelkan ke editor teks apa pun seperti Notepad, dan simpan file dengan ekstensi xml. Kemudian buka file di browser atau editor yang mampu menampilkan data XML.

Data peristiwa di XML

Selanjutnya kita melihat bagian dari hasil, yang dalam format XML. XML berikut diedit untuk brevity. <data name="row_count"> menampilkan nilai 6, yang cocok dengan enam baris hasil kami yang ditampilkan sebelumnya. Dan kita bisa melihat seluruh SELECT pernyataan.

<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
  <data name="duration">
    <value>111021</value>
  </data>
  <data name="cpu_time">
    <value>109000</value>
  </data>
  <data name="physical_reads">
    <value>0</value>
  </data>
  <data name="last_row_count">
    <value>6</value>
  </data>
  <data name="offset">
    <value>0</value>
  </data>
  <data name="offset_end">
    <value>584</value>
  </data>
  <data name="statement">
    <value>SELECT c.name,
            COUNT(*) AS [Count-Per-Column-Repeated-Name]
        FROM sys.syscolumns AS c
        INNER JOIN sys.sysobjects AS o
            ON o.id = c.id
        WHERE o.type = 'V'
            AND c.name LIKE '%event%'
        GROUP BY c.name
        HAVING Count(*) >= 3 --2     -- Try both values during session.
    ORDER BY c.name;</value>
      </data>
</event>

Menampilkan data sesi peristiwa di SSMS

Ada beberapa fitur tingkat lanjut di UI SSMS yang dapat Anda gunakan untuk melihat data yang diambil oleh sesi peristiwa. Untuk informasi selengkapnya, lihat Menampilkan data peristiwa di SQL Server Management Studio.

Anda mulai dengan opsi menu konteks berlabel Lihat Data Target dan Tonton Data Langsung.

Menampilkan data target

Di Object Explorer SSMS, Anda dapat mengklik kanan simpul target yang ada di bawah simpul sesi peristiwa Anda, misalnya, package0.event_counter. Di menu konteks, pilih Tampilkan Data Target. SSMS menampilkan data.

Tampilan tidak diperbarui karena peristiwa baru terjadi dalam sesi. Tetapi Anda dapat memilih Tampilkan Data Target lagi.

Tonton data langsung

Di SSMS Object Explorer, Anda dapat mengklik kanan simpul sesi peristiwa Anda. Di menu konteks, pilih Tonton Data Langsung. SSMS menampilkan data masuk karena terus tiba secara real time.

Istilah dan konsep dalam Acara yang Diperluas

Tabel berikut mencantumkan istilah yang digunakan untuk Acara yang Diperluas, dan menjelaskan artinya.

Persyaratan Deskripsi
event session Konstruksi yang berpusat di sekitar satu atau beberapa peristiwa, ditambah item pendukung seperti tindakan adalah target. Pernyataan ini CREATE EVENT SESSION membuat setiap sesi peristiwa. Anda dapat ALTER melakukan sesi acara untuk memulai dan menghentikannya sesering mungkin.

Sesi peristiwa terkadang disebut hanya sebagai sesi, ketika konteks mengklarifikasinya berarti sesi peristiwa.
Detail lebih lanjut tentang sesi peristiwa dijelaskan dalam: Sesi Acara yang Diperluas.
event Kemunculan tertentu dalam sistem yang ditonton oleh sesi peristiwa aktif.

Misalnya, peristiwa mewakili sql_statement_completed saat pernyataan T-SQL tertentu selesai. Kejadian ini dapat melaporkan durasinya dan data lainnya.
target Item yang menerima data output dari peristiwa yang diambil. Target menampilkan data kepada Anda.

Contohnya termasuk target yang event_file digunakan sebelumnya dalam mulai cepat ini, dan ring_buffer target yang menyimpan peristiwa terbaru dalam memori.
Segala jenis target dapat digunakan untuk sesi peristiwa apa pun. Untuk detailnya, lihat Target untuk Peristiwa yang Diperluas.
action Bidang yang diketahui oleh peristiwa. Data dari bidang dikirim ke target. Bidang tindakan terkait erat dengan filter predikat.
predicate, atau filter Pengujian data di bidang peristiwa, digunakan sehingga hanya subset kejadian yang menarik yang dikirim ke target.

Misalnya, filter hanya sql_statement_completed dapat menyertakan kemunculan peristiwa tersebut di mana pernyataan T-SQL berisi string HAVING.
package Pengukur nama yang dilampirkan ke setiap item dalam sekumpulan item yang berpusat di sekitar inti peristiwa.

Misalnya, paket dapat memiliki peristiwa tentang teks T-SQL. Satu peristiwa bisa tentang semua T-SQL dalam satu batch. Sementara itu peristiwa lain yang lebih sempit adalah tentang pernyataan T-SQL individual. Selanjutnya, untuk satu pernyataan T-SQL, ada started dan completed peristiwa.
Bidang yang sesuai untuk peristiwa juga berada dalam paket dengan peristiwa. Sebagian besar target berada di package0 dan digunakan dengan peristiwa dari banyak paket lain.

Skenario Peristiwa yang Diperluas dan detail penggunaan

Ada banyak skenario untuk menggunakan Extended Events untuk memantau dan memecahkan masalah mesin database dan beban kerja kueri. Artikel berikut ini menyediakan contoh menggunakan skenario terkait kunci:

Cara menemukan peristiwa yang tersedia dalam paket

Kueri berikut mengembalikan baris untuk setiap peristiwa yang tersedia yang namanya berisi tiga string sqlkarakter . Anda dapat mengedit LIKE klausa untuk mencari nama peristiwa yang berbeda. Kumpulan hasil juga mengidentifikasi paket yang berisi peristiwa.

SELECT -- Find an event you want.
    p.name AS [Package-Name],
    o.object_type,
    o.name AS [Object-Name],
    o.description AS [Object-Descr],
    p.guid AS [Package-Guid]
FROM sys.dm_xe_packages AS p
INNER JOIN sys.dm_xe_objects AS o
    ON p.guid = o.package_guid
WHERE o.object_type = 'event' --'action'  --'target'
    AND p.name LIKE '%'
    AND o.name LIKE '%sql%'
ORDER BY p.name,
    o.object_type,
    o.name;

Contoh hasil berikut menunjukkan baris yang dikembalikan, dipivot di sini ke dalam format column name = value. Data berasal dari sql_statement_completed peristiwa yang digunakan dalam contoh langkah-langkah sebelumnya. Deskripsi objek (peristiwa, dalam contoh ini) berfungsi sebagai string dokumentasi.

Package-Name = sqlserver
object_type  = event
Object-Name  = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491

Menemukan peristiwa menggunakan UI SSMS

Opsi lain untuk menemukan peristiwa berdasarkan nama adalah menggunakan dialog pustaka Peristiwa Sesi > > Baru yang ditampilkan dalam cuplikan layar sebelumnya. Anda dapat mengetikkan nama peristiwa parsial dan menemukan semua nama peristiwa yang cocok.

Kelas peristiwa SQL Trace

Deskripsi penggunaan Extended Events dengan kelas peristiwa SQL Trace dan kolom tersedia di: Lihat Extended Events Equivalents to SQL Trace Event Classes.

Aktivitas Pelacakan untuk Windows (ETW)

Deskripsi penggunaan Extended Events dengan Event Tracing for Windows (ETW) tersedia di:

Sesi peristiwa sistem

Di SQL Server dan Azure SQL Managed Instance, beberapa sesi peristiwa sistem dibuat secara default dan dikonfigurasi untuk memulai saat mesin database dimulai. Seperti kebanyakan sesi peristiwa, mereka mengonsumsi sejumlah kecil sumber daya dan tidak secara material memengaruhi performa beban kerja. Microsoft menyarankan agar sesi ini tetap diaktifkan dan berjalan. Sesi kesehatan, terutama sesi system_health , sering berguna untuk pemantauan dan pemecahan masalah.

Anda dapat melihat sesi peristiwa ini di Object Explorer SSMS di bawah Manajemen > Sesi Peristiwa > yang Diperluas. Misalnya, di SQL Server, sesi peristiwa sistem ini adalah:

  • AlwaysOn_health
  • system_health
  • telemetry_events

Penyedia PowerShell

Anda dapat mengelola Extended Events dengan menggunakan penyedia PowerShell SQL Server. Untuk informasi selengkapnya, lihat Menggunakan Penyedia PowerShell untuk Kejadian yang Diperluas.

Tampilan sistem

Tampilan sistem untuk Acara yang Diperluas meliputi:

  • Tampilan katalog: untuk informasi tentang sesi peristiwa yang ditentukan oleh CREATE EVENT SESSION.
  • Tampilan manajemen dinamis (DMV): untuk informasi tentang sesi peristiwa aktif (dimulai).

SELECT dan JOIN Dari Tampilan Sistem untuk Peristiwa yang Diperluas di SQL Server menyediakan informasi tentang:

  • Cara menggabungkan tampilan
  • Beberapa kueri yang berguna berdasarkan tampilan ini
  • Korelasi antara:
    • Lihat kolom
    • CREATE EVENT SESSION Klausul
    • The SSMS UI

Lampiran: Kueri untuk menemukan pemegang izin Kejadian yang Diperluas

Izin yang disebutkan dalam artikel ini adalah:

  • ALTER ANY EVENT SESSION
  • VIEW SERVER STATE
  • CONTROL SERVER

Pernyataan berikut SELECT...UNION ALL mengembalikan baris yang menunjukkan siapa yang memiliki izin yang diperlukan untuk membuat sesi peristiwa dan mengkueri tampilan katalog sistem untuk Kejadian yang Diperluas.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes all lower permissions like
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT 'Owner-is-Principal' AS [Type-That-Owns-Permission],
    NULL AS [Role-Name],
    prin.name AS [Owner-Name],
    PERM.permission_name COLLATE Latin1_General_CI_AS_KS_WS AS [Permission-Name]
FROM sys.server_permissions AS PERM
INNER JOIN sys.server_principals AS prin
    ON prin.principal_id = PERM.grantee_principal_id
WHERE PERM.permission_name IN (
    'CREATE ANY EVENT SESSION',
    'ALTER ANY EVENT SESSION',
    'VIEW SERVER PERFORMANCE STATE',
    'VIEW SERVER STATE',
    'CONTROL SERVER'
)
UNION ALL
-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT 'Owner-is-Role',
    prin.name, -- [Role-Name]
    CAST((IsNull(pri2.name, N'No members')) AS NVARCHAR(128)),
    NULL
FROM sys.server_role_members AS rolm
RIGHT JOIN sys.server_principals AS prin
    ON prin.principal_id = rolm.role_principal_id
LEFT JOIN sys.server_principals AS pri2
    ON rolm.member_principal_id = pri2.principal_id
WHERE prin.name = 'sysadmin';

fungsi HAS_PERMS_BY_NAME

Pernyataan berikut SELECT melaporkan izin Anda. Ini bergantung pada fungsi bawaan HAS_PERMS_BY_NAME.

Selanjutnya, jika Anda memiliki wewenang untuk sementara meniru login lain, Anda dapat membatalkan komentar EXECUTE AS dan REVERT pernyataan, untuk melihat apakah login lain memegang ALTER ANY EVENT SESSION izin.

--EXECUTE AS LOGIN = 'LoginNameHere';
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY EVENT SESSION');
--REVERT;