Mulai Cepat: Acara yang Diperluas

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure 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 peristiwa 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
  • Memahami hubungan antara tampilan sistem Extended Events

Tip

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

Prasyarat awal

Untuk memulai, Anda perlu:

  1. Unduh SQL Server Management Studio (SSMS). Sebaiknya gunakan versi terbaru SSMS dengan peningkatan dan perbaikan terbaru.
  2. Pastikan akun Anda memiliki ALTER ANY EVENT SESSIONizin server.

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 ini 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
  • Aktivitas
  • Penyimpanan Data
  • Lanjutan

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

  1. Koneksi ke instans mesin database. Extended Events didukung dimulai dengan SQL Server 2014, 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. Klik kanan pada folder Sesi dan pilih Sesi Baru. Dialog Sesi Baru lebih disukai daripada Panduan Sesi Baru, meskipun keduanya serupa.

  3. Di kiri atas, 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.

    Screenshot of New Session > General > Session name.

  4. Di kiri atas, pilih halaman Peristiwa .

    Screenshot of New Session > Events > Select > Event library, Selected events.

  5. 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.
  6. Tetap berada di halaman Acara , pilih tombol Konfigurasikan di kanan atas. Ini membuka kotak Opsi konfigurasi peristiwa untuk peristiwa yang dipilih.

    Screenshot of New Session > Events > Configure > Filter (Predicate) > Field.

  7. Pilih tab Filter (Predikat). Selanjutnya, pilih Pilih di sini untuk menambahkan klausa. Kami mengonfigurasi filter ini (juga dikenal sebagai predikat) untuk mengambil semua SELECT pernyataan yang memiliki HAVING klausa.

  8. 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.

  9. Di kiri atas, pilih halaman Penyimpanan Data.

  10. Di area Target, pilih Pilih di sini untuk menambahkan target.

    • Di daftar dropdown Jenis, pilih event_file. Ini berarti data peristiwa disimpan dalam file yang dapat kita buka dan lihat nanti. Di Azure SQL Database dan Azure SQL Managed Instance, data peristiwa disimpan dalam blob Azure Storage.

    Catatan

    Dimulai dengan SQL Server 2019, Anda dapat menggunakan Azure Blob Storage dalam event_file target di SQL Server.

    Screenshot of New Session > Data Storage > Targets > Type > event_file.

  11. 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

    Screenshot of New Session > Advanced > Maximum dispatch latency > OK.

  12. Di kiri atas, pilih halaman Tingkat Lanjut . Kurangi Latensi pengiriman maksimum menjadi 3 detik.

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

  14. Kembali ke Object Explorer, buka atau refresh folder Sesi , dan lihat simpul baru untuk YourSession. Sesi belum dimulai. Anda memulainya nanti.

    Screenshot of Node for your new *event session* named YourSession, in the Object Explorer, under Management > Extended Events > Sessions.

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 antarmuka pengguna SSMS Extended Events, 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',
        max_file_size = (2),
        max_rollover_files = (2)
    )
    WITH (
        MAX_MEMORY = 2048 KB,
        EVENT_RETENTION_MODE = ALLOW_MULTIPLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 3 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
    );
GO

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
        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 di bawah ini, bagian numeriknya 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 di sini diedit di sini untuk keringkasan. <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
        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(*) &gt;= 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 SSMS Object Explorer, Anda dapat mengklik kanan simpul target yang berada di bawah simpul sesi peristiwa Anda. 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.

Screenshot of View Target Data, in SSMS, Management > Extended Events > Sessions > YourSession > package0.event_file, right-click.

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.

Screenshot of Watch Live Data, in SSMS, Management > Extended Events > Sessions > YourSession, right-click.

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 peristiwa yang diperluas dengan kelas dan kolom peristiwa SQL Trace tersedia di: Lihat Extended Events Equivalents to SQL Trace Event Classes.

Aktivitas Pelacakan untuk Windows (ETW)

Deskripsi penggunaan peristiwa yang diperluas dengan Pelacakan Peristiwa untuk 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 telah 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 the permissions
-- '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 (
    'ALTER ANY EVENT SESSION',
    '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 LOGIN 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;