SELECT dan JOIN Dari Tampilan Sistem untuk Peristiwa yang Diperluas di SQL Server

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure 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_objectssys.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:

  • Perspektif UI SSMS B.1

    • Buat definisi sesi peristiwa, dengan menggunakan UI SSMS. Cuplikan layar langkah demi langkah ditampilkan.
  • Perspektif B.2 Transact-SQL

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

New Session > General, Start the event session at server startup.

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.

New Session > Events, Global Fields (Actions)

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.

New Session > Events, Filter Predicate Fields (Actions)

Selanjutnya di bagian Penyimpanan Data, kita melihat event_file telah dipilih sebagai target. Selanjutnya, kita melihat bahwa opsi Aktifkan peranover file telah dipilih.

New Session > Data Storage, eventfile_enablefileroleover

Terakhir, pada bagian Tingkat Lanjut , kita melihat bahwa nilai Latensi pengiriman maksimum berkurang menjadi 4 detik.

New Session > Advanced, Maximum dispatch latency

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

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_typerelevan 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>