SELECT dan JOIN Dari Tampilan Sistem untuk Peristiwa yang Diperluas di SQL Server
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Artikel ini menjelaskan dua set tampilan sistem yang terkait dengan Kejadian yang Diperluas di SQL Server dan di Azure SQL Database. Artikel ini mengilustrasikan:
- Cara MENGGABUNGKAN berbagai tampilan sistem.
- Cara MEMILIH jenis informasi tertentu dari tampilan sistem.
- Bagaimana informasi sesi peristiwa yang sama diwakili dari berbagai perspektif teknologi, yang memperkuat pemahaman Anda tentang setiap perspektif.
Sebagian besar contoh ditulis untuk SQL Server. Tetapi dengan pengeditan kecil, mereka akan berjalan di SQL Database.
J. Informasi dasar
Ada dua set tampilan sistem untuk Kejadian yang Diperluas:
Tampilan katalog:
Tampilan ini menyimpan informasi tentang definisi setiap sesi peristiwa yang dibuat oleh CREATE EVENT SESSION, atau oleh antarmuka pengguna SSMS yang setara. Tetapi tampilan ini tidak tahu apa-apa tentang apakah ada sesi yang pernah mulai berjalan.
- Misalnya, jika Object Explorer SSMS tidak menunjukkan sesi peristiwa yang ditentukan, SELECTing dari tampilan sys.server_event_session_targets akan mengembalikan baris nol.
Awalan nama adalah:
- sys.server_event_session* adalah awalan nama di SQL Server.
- sys.database_event_session* adalah awalan nama di SQL Database.
Tampilan manajemen dinamis (DMV):
Simpan informasi tentang aktivitas sesi peristiwa yang sedang berjalan saat ini. Tetapi DMV ini tahu sedikit tentang definisi sesi.
- Bahkan jika semua sesi peristiwa saat ini dihentikan, SELECT dari tampilan sys.dm_xe_packages akan tetap mengembalikan baris karena berbagai paket dimuat ke dalam memori aktif yang dimulai server.
- Untuk alasan yang sama, sys.dm_xe_objects sys.dm_xe_object_columns juga masih akan mengembalikan baris.
Awalan nama untuk DMV Kejadian yang Diperluas adalah:
- sys.dm_xe_* adalah awalan nama di SQL Server.
- sys.dm_xe_database_* umumnya adalah awalan nama di SQL Database.
Izin:
Untuk SELECT dari tampilan sistem, izin berikut diperlukan:
- LIHAT STATUS SERVER - jika di Microsoft SQL Server.
- LIHAT STATUS DATABASE - jika di Azure SQL Database.
B. Tampilan katalog
Bagian ini cocok dan menghubungkan tiga perspektif teknologi yang berbeda pada sesi peristiwa yang ditentukan yang sama. Sesi telah ditentukan dan terlihat di Object Explorer SQL Server Management Studio (SSMS.exe), tetapi sesi saat ini tidak berjalan.
Setiap bulan adalah bijaksana untuk menginstal pembaruan terbaru SSMS, untuk menghindari kegagalan yang tidak terduga.
Dokumentasi referensi tentang tampilan katalog untuk Acara yang Diperluas ada di Tampilan Katalog Peristiwa Diperluas (Transact-SQL).
Urutan di bagian B ini:
-
- Buat definisi sesi peristiwa, dengan menggunakan UI SSMS. Cuplikan layar langkah demi langkah ditampilkan.
-
- Gunakan menu konteks SSMS untuk merekayasa balik sesi peristiwa yang ditentukan ke dalam pernyataan TRANSACT-SQL CREATE EVENT SESSION yang setara. T-SQL menunjukkan kecocokan sempurna dengan pilihan cuplikan layar SSMS.
Tampilan katalog B.3 PILIH perspektif GABUNGAN UNION
- Terbitkan pernyataan T-SQL SELECT dari tampilan katalog sistem untuk sesi peristiwa kami. Hasilnya cocok dengan spesifikasi pernyataan CREATE EVENT SESSION .
Perspektif UI SSMS B.1
Di SSMS, di Object Explorer-nya, Anda dapat memulai dialog Sesi Baru dengan memperluas Peristiwa Yang Diperluas Manajemen>, lalu mengklik kanan Sesi Baru Sesi> Baru.
Dalam dialog Sesi Baru besar, di bagian pertamanya berlabel Umum, kita melihat opsi telah dipilih untuk Memulai sesi peristiwa di startup server.
Selanjutnya di bagian Peristiwa , kita melihat peristiwa lock_deadlock dipilih. Untuk peristiwa itu, kita melihat bahwa tiga Tindakan telah dipilih. Ini berarti tombol Konfigurasi diklik, yang menjadi abu-abu setelah diklik.
Selanjutnya, masih pada bagian Konfigurasi Peristiwa>, kita melihat bahwa resource_type telah diatur ke HALAMAN. Ini berarti bahwa data peristiwa tidak akan dikirim dari mesin peristiwa ke target jika nilai resource_type adalah apa pun selain PAGE.
Kami melihat filter predikat tambahan untuk nama database dan untuk penghitung.
Selanjutnya di bagian Penyimpanan Data, kita melihat event_file telah dipilih sebagai target. Selanjutnya, kita melihat bahwa opsi Aktifkan peranover file telah dipilih.
Terakhir, pada bagian Tingkat Lanjut , kita melihat bahwa nilai Latensi pengiriman maksimum berkurang menjadi 4 detik.
Ini menyelesaikan perspektif UI SSMS pada definisi sesi peristiwa.
Perspektif B.2 Transact-SQL
Terlepas dari bagaimana definisi sesi peristiwa dibuat, dari UI SSMS sesi dapat direkayasa balik menjadi skrip Transact-SQL yang sangat cocok. Anda dapat memeriksa cuplikan layar Sesi Baru sebelumnya dan membandingkan spesifikasi yang terlihat dengan klausa dalam skrip T-SQL CREATE EVENT SESSION yang dihasilkan berikut.
Untuk merekayasa balik sesi peristiwa, di Object Explorer Anda dapat mengklik kanan simpul sesi Anda, lalu memilih Sesi Skrip sebagai>BUAT ke>Clipboard.
Skrip T-SQL berikut dibuat oleh rekayasa terbalik dengan SSMS. Kemudian skrip secara manual diperbaiki oleh manipulasi strategis ruang putih saja.
CREATE EVENT SESSION [event_session_test3]
ON SERVER -- Or, if on Azure SQL Database, ON DATABASE.
ADD EVENT sqlserver.lock_deadlock
(
SET
collect_database_name = (1)
ACTION
(
package0 .collect_system_time,
package0 .event_sequence,
sqlserver .client_hostname
)
WHERE
(
[database_name] = N'InMemTest2'
AND [package0].[counter] <= (16)
AND [resource_type] = (6)
)
)
ADD TARGET package0.event_file
(
SET
filename = N'C:\Junk\event_session_test3_EF.xel',
max_file_size = (20),
max_rollover_files = (2)
)
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 4 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
);
Ini menyelesaikan perspektif T-SQL.
Tampilan katalog B.3 PILIH perspektif GABUNGAN UNION
Jangan takut! Pernyataan T-SQL SELECT berikut hanya panjang karena UNIONs beberapa SELECT kecil bersama-sama. Salah satu SELECT kecil dapat dijalankan sendiri. SELECT kecil menunjukkan bagaimana berbagai tampilan katalog sistem harus diSatukan.
SELECT
s.name AS [Session-Name],
'1_EVENT' AS [Clause-Type],
'Event-Name' AS [Parameter-Name],
e.name AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'2_EVENT_SET' AS [Clause-Type],
f.name AS [Parameter-Name],
f.value AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
JOIN sys.server_event_session_fields As f
ON f.event_session_id = s.event_session_id
AND f.object_id = e.event_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'3_EVENT_ACTION' AS [Clause-Type],
a.package + '.' + a.name
AS [Parameter-Name],
'(Not_Applicable)' AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
JOIN sys.server_event_session_actions As a
ON a.event_session_id = s.event_session_id
AND a.event_id = e.event_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'4_EVENT_PREDICATES' AS [Clause-Type],
e.predicate AS [Parameter-Name],
'(Not_Applicable)' AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'5_TARGET' AS [Clause-Type],
t.name AS [Parameter-Name],
'(Not_Applicable)' AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_targets AS t
ON t.event_session_id = s.event_session_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'6_TARGET_SET' AS [Clause-Type],
f.name AS [Parameter-Name],
f.value AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_targets AS t
ON t.event_session_id = s.event_session_id
JOIN sys.server_event_session_fields As f
ON f.event_session_id = s.event_session_id
AND f.object_id = t.target_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'7_WITH_MAX_MEMORY' AS [Clause-Type],
'max_memory' AS [Parameter-Name],
s.max_memory AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'7_WITH_STARTUP_STATE' AS [Clause-Type],
'startup_state' AS [Parameter-Name],
s.startup_state AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
WHERE
s.name = 'event_session_test3'
ORDER BY
[Session-Name],
[Clause-Type],
[Parameter-Name]
;
Output
Tabel berikut ini memperlihatkan output dari menjalankan SELECT JOIN UNION sebelumnya. Nama dan nilai parameter output memetakan ke apa yang terlihat secara biasa dalam pernyataan CREATE EVENT SESSION sebelumnya.
Nama Sesi | Jenis Klausa | Nama Parameter | Nilai Parameter |
---|---|---|---|
event_session_test3 | 1_EVENT | Nama Peristiwa | lock_deadlock |
event_session_test3 | 2_EVENT_SET | collect_database_name | 1 |
event_session_test3 | 3_EVENT_ACTION | sqlserver.client_hostname | (Not_Applicable) |
event_session_test3 | 3_EVENT_ACTION | sqlserver.collect_system_time | (Not_Applicable) |
event_session_test3 | 3_EVENT_ACTION | sqlserver.event_sequence | (Not_Applicable) |
event_session_test3 | 4_EVENT_PREDICATES | ([sqlserver]. [equal_i_sql_unicode_string] ([database_name],N'InMemTest2') DAN [package0]. [penghitung]<=(16)) | (Not_Applicable) |
event_session_test3 | 5_TARGET | event_file | (Not_Applicable) |
event_session_test3 | 6_TARGET_SET | filename | C:\Junk\event_session_test3_EF.xel |
event_session_test3 | 6_TARGET_SET | max_file_size | 20 |
event_session_test3 | 6_TARGET_SET | max_rollover_files | 2 |
event_session_test3 | 7_WITH_MAX_MEMORY | max_memory | 4096 |
event_session_test3 | 7_WITH_STARTUP_STATE | startup_state | 1 |
Ini melengkapi bagian pada tampilan katalog.
C. Tampilan manajemen dinamis (DMV)
Kami sekarang beralih ke DMV. Bagian ini menyediakan beberapa pernyataan T-SQL SELECT yang masing-masing melayani tujuan bisnis tertentu yang berguna. Selanjutnya, SELECT menunjukkan bagaimana Anda dapat MENGGABUNGKAN DMV bersama-sama untuk setiap penggunaan baru yang Anda inginkan.
Dokumentasi referensi DMV tersedia di Extended Events Dynamic Management Views
Dalam artikel ini, setiap baris output aktual dari SELECT berikut berasal dari SQL Server 2016, kecuali ditentukan lain.
Berikut adalah daftar SELECT di bagian DMV C ini:
- C.1 Daftar semua paket
- Jumlah C.2 dari setiap jenis objek
- C.3 SELECT semua item yang tersedia diurutkan menurut jenis
- Bidang Data C.4 tersedia untuk peristiwa Anda
- Bidang sys.dm_xe_map_values dan peristiwa C.5
- Parameter C.6 untuk target
- C.7 DMV SELECT mentransmisikan kolom target_data ke XML
- C.8 SELECT dari fungsi untuk mengambil data event_file dari drive disk
C.1 Daftar semua paket
Semua objek yang dapat Anda gunakan di area peristiwa yang diperluas berasal dari paket yang dimuat ke dalam sistem. Bagian ini mencantumkan semua paket dan deskripsinya.
SELECT --C.1
p.name AS [Package],
p.description AS [Package-Description]
FROM
sys.dm_xe_packages AS p
ORDER BY
p.name;
Output
Berikut adalah daftar paket.
Paket | Deskripsi Paket |
---|---|
aliran file | Kejadian yang diperluas untuk SQL Server FILESTREAM dan FileTable |
package0 | Paket default. Berisi semua jenis standar, peta, membandingkan operator, tindakan, dan target |
qds | Kejadian yang diperluas untuk Penyimpanan Kueri |
SecAudit | Peristiwa Audit Keamanan |
sqlclr | Acara yang diperluas untuk SQL CLR |
sqlos | Peristiwa yang diperluas untuk Sistem Operasi SQL |
SQLSatellite | Acara yang diperluas untuk Satelit SQL |
sqlserver | Acara yang diperluas untuk Microsoft SQL Server |
sqlserver | Acara yang diperluas untuk Microsoft SQL Server |
sqlserver | Acara yang diperluas untuk Microsoft SQL Server |
sqlsni | Acara yang diperluas untuk Microsoft SQL Server |
ucs | Kejadian yang diperluas untuk Tumpukan Komunikasi Terpadu |
XtpCompile | Peristiwa yang diperluas untuk Kompilasi XTP |
XtpEngine | Peristiwa yang diperluas untuk Mesin XTP |
XtpRuntime | Peristiwa yang diperluas untuk XTP Runtime |
Definisi inisialisme sebelumnya:
- clr = Runtime Bahasa Umum dari .NET
- qds = Penyimpanan Data Kueri
- sni = Antarmuka Jaringan Server
- ucs = Unified Communications Stack
- xtp = pemrosesan transaksi ekstrem
Jumlah C.2 dari setiap jenis objek
Bagian ini memberi tahu kami tentang jenis objek yang dimuat paket peristiwa. Daftar lengkap ditampilkan dari semua jenis objek yang ada di sys.dm_xe_objects, bersama dengan jumlah untuk setiap jenis.
SELECT --C.2
Count(*) AS [Count-of-Type],
o.object_type
FROM
sys.dm_xe_objects AS o
GROUP BY
o.object_type
ORDER BY
1 DESC;
Output
Berikut adalah jumlah objek per jenis objek. Ada sekitar 1915 objek.
Jumlah Tipe | object_type |
---|---|
1303 | event |
351 | peta |
84 | pesan |
77 | pred_compare |
53 | tindakan |
46 | pred_source |
28 | jenis |
17 | target |
C.3 SELECT semua item yang tersedia diurutkan menurut jenis
SELECT berikut mengembalikan sekitar 1915 baris, satu untuk setiap objek.
SELECT --C.3
o.object_type AS [Type-of-Item],
p.name AS [Package],
o.name AS [Item],
o.description AS [Item-Description]
FROM
sys.dm_xe_objects AS o
JOIN sys.dm_xe_packages AS p ON o.package_guid = p.guid
WHERE
o.object_type IN ('action' , 'target' , 'pred_source')
AND
(
(o.capabilities & 1) = 0
OR
o.capabilities IS NULL
)
ORDER BY
[Type-of-Item],
[Package],
[Item];
Output
Untuk membangkitkan nafsu makan Anda, selanjutnya adalah pengambilan sampel arbitrer objek yang dikembalikan oleh SELECT sebelumnya.
Tipe Item | Paket | Item | Deskripsi Item |
---|---|---|---|
tindakan | package0 | callstack | Kumpulkan tumpukan panggilan saat ini |
tindakan | package0 | debug_break | Putuskan proses di debugger default |
tindakan | sqlos | task_time | Mengumpulkan waktu eksekusi tugas saat ini |
tindakan | sqlserver | sql_text | Mengumpulkan teks SQL |
event | qds | query_store_aprc_regression | Diaktifkan saat Penyimpanan Kueri mendeteksi regresi dalam performa rencana kueri |
event | SQLSatellite | connection_accept | Terjadi ketika koneksi baru diterima. Kejadian ini berfungsi untuk mencatat semua upaya koneksi. |
event | XtpCompile | cgen | Terjadi pada awal pembuatan kode C. |
peta | qds | aprc_state | Status Koreksi Regresi Paket Otomatis Penyimpanan Kueri |
pesan | package0 | histogram_event_required | Nilai diperlukan untuk parameter 'filtering_event_name' saat jenis sumber adalah 0. |
pred_compare | package0 | equal_ansi_string | Operator kesetaraan antara dua nilai string ANSI |
pred_compare | sqlserver | equal_i_sql_ansi_string | Operator kesetaraan antara dua nilai string SQL ANSI |
pred_source | sqlos | task_execution_time | Dapatkan waktu eksekusi tugas saat ini |
pred_source | sqlserver | client_app_name | Mendapatkan nama aplikasi klien saat ini |
target | package0 | etw_classic_sync_target | Pelacakan Peristiwa untuk Target Sinkron Windows (ETW) |
target | package0 | event_counter | Gunakan target event_counter untuk menghitung jumlah kemunculan setiap peristiwa dalam sesi peristiwa. |
target | package0 | event_file | Gunakan target event_file untuk menyimpan data peristiwa ke file XEL, yang dapat diarsipkan dan digunakan untuk analisis dan peninjauan nanti. Anda dapat menggabungkan beberapa file XEL untuk melihat data gabungan dari sesi peristiwa terpisah. |
target | package0 | histogram | Gunakan target histogram untuk mengagregasi data peristiwa berdasarkan bidang atau tindakan data peristiwa tertentu yang terkait dengan peristiwa tersebut. Histogram memungkinkan Anda menganalisis distribusi data peristiwa selama periode sesi peristiwa. |
target | package0 | pair_matching | Target pemasangan |
target | package0 | ring_buffer | Target buffer cincin asinkron |
jenis | package0 | xml | Fragmen XML yang terbentuk dengan baik |
Bidang Data C.4 tersedia untuk peristiwa Anda
SELECT berikut mengembalikan semua bidang data yang khusus untuk jenis peristiwa Anda.
- Perhatikan item klausa WHERE: column_type = 'data'.
- Selain itu, Anda perlu mengedit nilai klausa WHERE untuk o.name =.
SELECT -- C.4
p.name AS [Package],
c.object_name AS [Event],
c.name AS [Column-for-Predicate-Data],
c.description AS [Column-Description]
FROM
sys.dm_xe_object_columns AS c
JOIN sys.dm_xe_objects AS o
ON o.name = c.object_name
JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE
c.column_type = 'data'
AND
o.object_type = 'event'
AND
o.name = '\<EVENT-NAME-HERE!>' --'lock_deadlock'
ORDER BY
[Package],
[Event],
[Column-for-Predicate-Data];
Output
Baris berikut dikembalikan oleh SELECT sebelumnya, WHERE o.name = 'lock_deadlock'
:
- Setiap baris mewakili filter opsional untuk peristiwa sqlserver.lock_deadlock .
- Kolom [Deskripsi Kolom] dihilangkan dari tampilan berikut. Nilainya sering NULL.
- Ini adalah output aktual, kecuali untuk kolom Deskripsi yang dihilangkan yang sering NULL.
- Baris ini adalah tempat object_type = 'lock_deadlock'.
Paket | Kejadian | Kolom-untuk-Predikat-Data |
---|---|---|
sqlserver | lock_deadlock | associated_object_id |
sqlserver | lock_deadlock | database_id |
sqlserver | lock_deadlock | database_name |
sqlserver | lock_deadlock | deadlock_id |
sqlserver | lock_deadlock | durasi |
sqlserver | lock_deadlock | lockspace_nest_id |
sqlserver | lock_deadlock | lockspace_sub_id |
sqlserver | lock_deadlock | lockspace_workspace_id |
sqlserver | lock_deadlock | mode |
sqlserver | lock_deadlock | object_id |
sqlserver | lock_deadlock | owner_type |
sqlserver | lock_deadlock | resource_0 |
sqlserver | lock_deadlock | resource_1 |
sqlserver | lock_deadlock | resource_2 |
sqlserver | lock_deadlock | resource_description |
sqlserver | lock_deadlock | resource_type |
sqlserver | lock_deadlock | id_transaksi |
Bidang sys.dm_xe_map_values dan peristiwa C.5
SELECT berikut menyertakan JOIN ke tampilan sulit bernama sys.dm_xe_map_values.
Tujuan SELECT menampilkan banyak bidang yang dapat Anda pilih untuk sesi peristiwa Anda. Bidang peristiwa dapat digunakan dengan dua cara:
- Untuk memilih nilai bidang mana yang akan ditulis ke target Anda untuk setiap kemunculan peristiwa..
- Untuk memfilter kejadian peristiwa mana yang akan dikirim ke versus disimpan dari target Anda.
SELECT --C.5
dp.name AS [Package],
do.name AS [Object],
do.object_type AS [Object-Type],
'o--c' AS [O--C],
dc.name AS [Column],
dc.type_name AS [Column-Type-Name],
dc.column_type AS [Column-Type],
dc.column_value AS [Column-Value],
'c--m' AS [C--M],
dm.map_value AS [Map-Value],
dm.map_key AS [Map-Key]
FROM
sys.dm_xe_objects AS do
JOIN sys.dm_xe_object_columns AS dc
ON dc.object_name = do.name
JOIN sys.dm_xe_map_values AS dm
ON dm.name = dc.type_name
JOIN sys.dm_xe_packages AS dp
ON dp.guid = do.package_guid
WHERE
do.object_type = 'event'
AND
do.name = '\<YOUR-EVENT-NAME-HERE!>' --'lock_deadlock'
ORDER BY
[Package],
[Object],
[Column],
[Map-Value];
Output
Selanjutnya adalah pengambilan sampel dari 153 baris output aktual dari T-SQL SELECT sebelumnya. Baris untuk resource_type relevan dengan pemfilteran predikat yang digunakan dalam contoh event_session_test3 di tempat lain dalam artikel ini.
/*** 5 sampled rows from the actual 153 rows returned.
NOTE: 'resource_type' under 'Column'.
Package Object Object-Type O--C Column Column-Type-Name Column-Type Column-Value C--M Map-Value Map-Key
------- ------ ----------- ---- ------ ---------------- ----------- ------------ ---- --------- -------
sqlserver lock_deadlock event o--c CHANNEL etw_channel readonly 2 c--m Operational 4
sqlserver lock_deadlock event o--c KEYWORD keyword_map readonly 16 c--m access_methods 1024
sqlserver lock_deadlock event o--c mode lock_mode data NULL c--m IX 8
sqlserver lock_deadlock event o--c owner_type lock_owner_type data NULL c--m Cursor 2
sqlserver lock_deadlock event o--c resource_type lock_resource_type data NULL c--m PAGE 6
Therefore, on your CREATE EVENT SESSION statement, in its ADD EVENT WHERE clause,
you could put:
WHERE( ... resource_type = 6 ...) -- Meaning: 6 = PAGE.
***/
Parameter C.6 untuk target
SELECT berikut mengembalikan setiap parameter untuk target Anda. Setiap parameter ditandai untuk menunjukkan apakah itu wajib. Nilai yang Anda tetapkan ke parameter memengaruhi perilaku target.
- Perhatikan item klausa WHERE: object_type = 'customizable'.
- Selain itu, Anda perlu mengedit nilai klausa WHERE untuk o.name =.
SELECT --C.6
p.name AS [Package],
o.name AS [Target],
c.name AS [Parameter],
c.type_name AS [Parameter-Type],
CASE c.capabilities_desc
WHEN 'mandatory' THEN 'YES_Mandatory'
ELSE 'Not_mandatory'
END AS [IsMandatoryYN],
c.description AS [Parameter-Description]
FROM
sys.dm_xe_objects AS o
JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
LEFT OUTER JOIN sys.dm_xe_object_columns AS c
ON o.name = c.object_name
AND c.column_type = 'customizable' -- !
WHERE
o.object_type = 'target'
AND
o.name LIKE '%' -- Or '\<YOUR-TARGET-NAME-HERE!>'.
ORDER BY
[Package],
[Target],
[IsMandatoryYN] DESC,
[Parameter];
Output
Baris parameter berikut adalah subset dari yang dikembalikan oleh SELECT sebelumnya, di SQL Server 2016.
/*** Actual output, all rows, where target name = 'event_file'.
Package Target Parameter Parameter-Type IsMandatoryYN Parameter-Description
------- ------ --------- -------------- ------------- ---------------------
package0 event_file filename unicode_string_ptr YES_Mandatory Specifies the location and file name of the log
package0 event_file increment uint64 Not_mandatory Size in MB to grow the file
package0 event_file lazy_create_blob boolean Not_mandatory Create blob upon publishing of first event buffer, not before.
package0 event_file max_file_size uint64 Not_mandatory Maximum file size in MB
package0 event_file max_rollover_files uint32 Not_mandatory Maximum number of files to retain
package0 event_file metadatafile unicode_string_ptr Not_mandatory Not used
***/
C.7 DMV SELECT mentransmisikan kolom target_data ke XML
DMV SELECT ini mengembalikan baris data dari target sesi peristiwa aktif Anda. Data ditransmisikan ke XML, yang membuat sel yang dikembalikan dapat diklik untuk tampilan yang mudah di SSMS.
- Jika sesi peristiwa Anda dihentikan, SELECT ini akan mengembalikan baris nol.
- Anda perlu mengedit nilai klausa WHERE untuk s.name =.
SELECT --C.7
s.name,
t.target_name,
CAST(t.target_data AS XML) AS [XML-Cast]
FROM
sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE
s.name = '\<Your-Session-Name-Here!>';
Output, satu-satunya baris, termasuk sel XML-nya
Berikut adalah satu-satunya baris yang merupakan output dari SELECT sebelumnya. Kolom XML-Cast berisi string XML yang dipahami SSMS adalah XML. Oleh karena itu, SSMS memahami bahwa SSMS harus membuat sel XML-Cast dapat diklik.
Untuk eksekusi ini:
- nilai s.name = diatur ke sesi peristiwa untuk peristiwa checkpoint_begin .
- Targetnya adalah ring_buffer.
name target_name XML-Cast
---- ----------- --------
checkpoint_session_ring_buffer2 ring_buffer <RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104"><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event></RingBufferTarget>
Output, XML ditampilkan dengan cantik saat sel diklik
Saat sel XML-Cast diklik, tampilan cantik berikut ini muncul.
<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104">
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z">
<data name="database_id">
<type name="uint32" package="package0" />
<value>5</value>
</data>
</event>
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z">
<data name="database_id">
<type name="uint32" package="package0" />
<value>5</value>
</data>
</event>
</RingBufferTarget>
C.8 SELECT dari fungsi untuk mengambil data event_file dari drive disk
Misalkan sesi peristiwa Anda mengumpulkan beberapa data dan kemudian dihentikan. Jika sesi Anda ditentukan untuk menggunakan target event_file, Anda masih dapat mengambil data dengan memanggil fungsi sys.fn_xe_target_read_file.
- Anda harus mengedit jalur dan nama file Anda ke dalam parameter panggilan fungsi, sebelum Anda menjalankan SELECT ini.
- Jangan perhatikan digit tambahan yang disematkan sistem SQL ke dalam aktual Anda. Nama file XEL setiap kali Anda memulai ulang sesi Anda. Cukup berikan nama akar dan ekstensi normal.
SELECT --C.8
f.module_guid,
f.package_guid,
f.object_name,
f.file_name,
f.file_offset,
CAST(f.event_data AS XML) AS [Event-Data-As-XML]
FROM
sys.fn_xe_file_target_read_file(
'\<YOUR-PATH-FILE-NAME-ROOT-HERE!>*.xel',
--'C:\Junk\Checkpoint_Begins_ES*.xel', -- Example.
NULL, NULL, NULL
) AS f;
Output, baris yang dikembalikan oleh SELECT FROM fungsi
Selanjutnya adalah baris yang dikembalikan oleh fungsi SELECT FROM sebelumnya. Kolom XML paling kanan berisi data yang secara khusus tentang kemunculan peristiwa.
module_guid package_guid object_name file_name file_offset Event-Data-As-XML
----------- ------------ ----------- --------- ----------- -----------------
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_begin C:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5120 <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_end C:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5120 <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:14.025Z"><data name="database_id"><value>5</value></data></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_begin C:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5632 <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:17.704Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_end C:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5632 <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:17.709Z"><data name="database_id"><value>5</value></data></event>
Output, satu sel XML
Berikut adalah konten sel XML pertama, dari kumpulan baris yang dikembalikan sebelumnya.
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z">
<data name="database_id">
<value>5</value>
</data>
<action name="session_id" package="sqlserver">
<value>60</value>
</action>
<action name="database_id" package="sqlserver">
<value>5</value>
</action>
</event>