1. Pengenalan
1.1 Apakah SQL Server Acara Lanjutan?
SQL Server Extended Events ialah sistem pemantauan prestasi ringan yang membolehkan pentadbir dan pembangun mengumpul dan menganalisis data aktiviti pelayan terperinci. Sistem ini disepadukan ke dalam SQL Server Enjin Pangkalan Data dan memberikan pandangan yang komprehensif tentang kedua-dua operasi biasa dan senario penyelesaian masalah.
1.2 Mengapa Menggunakan Acara Lanjutan untuk Pemantauan?
SQL Server Acara Lanjutan menawarkan beberapa kelebihan yang menarik untuk pemantauan pangkalan data dan penyelesaian masalah:
- Impak prestasi minimum dengan seni bina ringan
- Kawalan berbutir ke atas pengumpulan data dan penapisan peristiwa
- Pengumpulan data boleh disesuaikan disesuaikan dengan keperluan pemantauan khusus
- Keupayaan untuk menangkap acara daripada pelbagai pakej secara serentak
- Keupayaan penapisan fleksibel untuk memberi tumpuan kepada operasi yang berkaitan
- Sokongan untuk pemantauan sistem pengeluaran tanpa merendahkan pengalaman pengguna
- Penjejakan metrik prestasi yang komprehensif
- Keupayaan diagnostik lanjutan untuk penyelesaian masalah
- Penyelenggaraan jejak audit untuk keperluan pematuhan
- Pilihan analisis data masa nyata dan sejarah
1.3 Acara Lanjutan lwn SQL Server Profil
Manakala SQL Server Profil telah menjadi alat pemantauan tradisional, MS SQL Extended Events menyediakan alternatif yang lebih cekap. Acara Lanjutan menggunakan lebih sedikit sumber sistem dan menawarkan kebolehskalaan yang lebih baik untuk persekitaran pengeluaran.
SQL Server Profiler kini ditamatkan dan Microsoft mengesyorkan berhijrah ke Acara Lanjutan untuk semua aktiviti pemantauan.
2. Memahami Seni Bina Acara Lanjutan
2.1 Komponen Enjin Acara Lanjutan
Enjin Peristiwa Lanjutan terdiri daripada beberapa komponen teras yang berfungsi bersama untuk menangkap, memproses dan menyimpan data acara. Memahami komponen ini membantu anda mereka bentuk penyelesaian pemantauan yang berkesan.
- Penghantar: Komponen penghantar menyelaras aliran acara daripada sumber acara ke enjin Acara Lanjutan. Apabila acara dicetuskan, penghantar menerima pemberitahuan dan mengarahkannya ke sesi aktif yang telah melanggan jenis acara tertentu itu.
- penampan: Penimbal menyimpan data peristiwa sementara dalam memori sebelum menulis ke sasaran. Mekanisme penimbal ini meningkatkan prestasi dengan mengurangkan operasi I/O. Saiz penimbal dan tetapan pengurusan boleh dikonfigurasikan untuk mengimbangi penggunaan memori dengan keperluan penangkapan data.
- Sesi: Sesi mentakrifkan skop pemantauan peristiwa. Ia menentukan peristiwa yang hendak ditangkap, tindakan yang hendak dilaksanakan, predikat yang hendak digunakan dan tempat menyimpan hasilnya. Sesi boleh dicipta, diubah suai, dimulakan dan dihentikan secara bebas.
- Contoh Sasaran: Contoh sasaran mewakili destinasi storan untuk data peristiwa yang ditangkap. Setiap sesi boleh menulis kepada satu atau berbilang sasaran, seperti fail, penimbal cincin atau kaunter. Sasaran memproses dan mengekalkan maklumat peristiwa untuk analisis kemudian.
2.2 Pakej Acara
SQL Server Acara Lanjutan menyusun fungsi ke dalam pakej. Setiap pakej mengandungi peristiwa, tindakan, jenis, predikat dan sasaran yang berkaitan. Pakej biasa termasuk sqlserver, sqlos dan package0.
- Pakej sqlserver menyediakan acara khusus pangkalan data seperti pertanyaan dan transaksi.
- Pakej sqlos mengandungi peristiwa sistem pengendalian.
- Package0 menawarkan fungsi tujuan umum yang digunakan di semua pakej.
2.3 Jenis dan Medan Acara
Peristiwa mewakili kejadian dalam SQL Server yang anda ingin pantau. Setiap jenis acara mempunyai medan pratakrif yang menangkap maklumat yang berkaitan. Sebagai contoh, acara sql_statement_completed termasuk medan untuk tempoh, masa CPU, membaca dan menulis.
Peristiwa boleh menjadi segerak atau tak segerak. Peristiwa segerak berlaku semasa operasi itu sendiri, manakala peristiwa tak segerak berlaku selepas selesai. Memahami ciri acara membantu anda memilih acara yang sesuai untuk keperluan pemantauan anda.
2.4 Tindakan
Tindakan menambah maklumat tambahan pada peristiwa yang ditangkap. Apabila peristiwa diaktifkan, tindakan berkaitan akan dilaksanakan untuk mengumpul konteks tambahan seperti teks SQL, ID sesi atau maklumat tindanan panggilan.
Tindakan biasa termasuk sql_text untuk menangkap pernyataan pertanyaan, database_name untuk mengenal pasti pangkalan data dan client_hostname untuk menjejaki pelayan asal. Tindakan menyediakan konteks penting untuk penyelesaian masalah dan analisis.
2.5 Sasaran
Sasaran menentukan bagaimana dan di mana data peristiwa disimpan. SQL Server Acara Lanjutan menyokong pelbagai jenis sasaran, termasuk:
- event_file untuk storan cakera, menyediakan storan berterusan untuk analisis terperinci
- ring_buffer untuk pengekalan berasaskan memori, menawarkan akses pantas kepada acara terkini dengan overhed minimum
- event_counter untuk pengiraan mudah
- histogram untuk pengelompokan
- pair_matching untuk mengaitkan acara berkaitan
2.6 Predikat (Penapis)
Meramalkan peristiwa penapis berdasarkan keadaan yang ditentukan, mengurangkan volum data yang ditangkap. Anda boleh menapis mengikut nama pangkalan data, nama aplikasi, ID sesi, ambang tempoh atau sebarang nilai medan acara.
Penggunaan predikat yang berkesan meminimumkan kesan prestasi dengan menangkap peristiwa yang berkaitan sahaja. Predikat kompleks menggabungkan berbilang keadaan menggunakan operator logik untuk mencipta kriteria penapisan yang tepat.
3. Keadaan Sesi Acara Lanjutan dan Kitaran Hayat
3.1 Keadaan Sesi: CREATE, ALTER dan DROP
Sesi Acara Lanjutan berkembang melalui keadaan yang berbeza:
- Pernyataan CREATE EVENT SESSION mentakrifkan sesi baharu tetapi tidak memulakannya. Sesi tersebut wujud dalam keadaan dihentikan sehingga diaktifkan secara eksplisit.
- Pernyataan ALTER EVENT SESSION mengubah konfigurasi sesi atau mengubah keadaannya antara dihentikan dan dimulakan.
- Pernyataan DROP EVENT SESSION mengalih keluar definisi sesi sepenuhnya daripada pelayan.
3.2 Kandungan dan Ciri Sesi
Setiap sesi mengandungi koleksi peristiwa, tindakan, sasaran dan predikat. Sesi mempunyai sempadan tersirat yang menentukan skop dan tingkah lakunya. Pilihan konfigurasi mengawal peruntukan memori, pengekalan peristiwa dan latensi penghantaran.
Ciri-ciri sesi termasuk sama ada ia berterusan merentasi permulaan semula pelayan, peruntukan memori maksimum dan cara ia mengendalikan tekanan memori. Tetapan ini memberi kesan yang ketara kepada tingkah laku sesi dan penggunaan sumber.
3.3 Sempadan dan Pakej Sesi
Sempadan sesi menentukan hubungan antara peristiwa, sasaran dan pakej. Peristiwa daripada satu pakej boleh mencetuskan tindakan daripada pakej lain, memberikan fleksibiliti dalam strategi pengumpulan data.
Perhubungan pakej membolehkan anda menggabungkan acara daripada berbilang sumber dalam satu sesi. Keupayaan ini membolehkan senario pemantauan menyeluruh yang menjangkau berbeza SQL Server subsistem.
4. Mencipta Sesi Acara Lanjutan Menggunakan SSMS
4.1 Prasyarat dan Persediaan
Sebelum mencipta SQL Server Sesi Acara Lanjutan, pastikan anda mempunyai kebenaran yang sesuai. Anda memerlukan kebenaran ALTER ANY AVENT SESI untuk sesi berskop pelayan atau kebenaran KAWALAN pada pangkalan data untuk sesi berskop pangkalan data.
Sahkan bahawa SQL Server Studio Pengurusan telah dipasang dan disambungkan ke instans sasaran anda. Biasakan diri anda dengan keperluan pemantauan dan kenal pasti peristiwa dan sasaran yang paling sesuai dengan keperluan anda.
4.2 Mengakses Peristiwa Lanjutan dalam Penjelajah Objek
Untuk mengakses antara muka Acara Lanjutan dalam SSMS, ikut langkah berikut:
- Buka SQL Server Studio Pengurusan dan sambungkan ke anda SQL Server contohnya.
- Dalam Penjelajah Objek, kembangkan Pengurusan -> Acara Lanjutan.
- Nod Peristiwa Lanjutan mengandungi Sesyen dan Kami folder untuk mengurus konfigurasi pemantauan anda.
4.3 Buat Sesi Baharu
Untuk membuat sesi baharu:
-
- Klik kanan pada Sesyen folder di bawah Acara Lanjutan.
- pilih Sesi Baharu untuk membuka dialog konfigurasi. Kandungan berikut akan menggunakan kaedah ini untuk mencipta sesi baharu.
Nota: Wizard Sesi Baharu juga tersedia untuk pengalaman yang lebih berpandu.
4.3.1 Konfigurasi Halaman Umum
Pada Umum halaman, konfigurasikan sifat sesi asas:
- Masukkan nama sesi dalam Nama sesi padang. Gunakan nama deskriptif yang menunjukkan tujuan pemantauan.
- Pilih secara pilihan Mulakan sesi acara semasa permulaan pelayan untuk membolehkan pengaktifan sesi automatik.
- Templat sesi lalai ialah Kosong. Anda boleh menggunakan templat lain jika menggunakan konfigurasi yang telah ditetapkan.
4.3.2 Persediaan Halaman Acara
. Acara dan Program halaman membolehkan anda memilih acara yang hendak dipantau:
- Pilih Acara dan Program halaman dari kiri Pilih halaman panel.
- Dalam Perpustakaan acara, semak imbas acara yang tersedia atau gunakan fungsi carian.
- Tapis acara dengan menaip kata kunci seperti "sql_statement_completed" untuk mencari acara yang berkaitan.
- Pilih acara yang dikehendaki, seperti sql_statement_completed.
- Klik butang anak panah kanan untuk mengalihkan acara ke Acara terpilih senarai.
4.3.3 Konfigurasi Penyimpanan Data
. Penyimpanan Data halaman menentukan tempat data acara disimpan:
- Pilih Penyimpanan Data halaman dari kiri Pilih halaman panel.
- Dalam Sasaran kawasan tersebut, pilih jenis sasaran daripada menu lungsur turun.
(1) fail_peristiwa Sasaran
Sasaran fail_event menyimpan data ke fail cakera dengan sambungan .xel:
- pilih fail_acara daripada menu lungsur turun jenis sasaran.
- Tentukan laluan fail, seperti C:\temp\YourSession_Target.xel.
- Konfigurasikan pilihan peralihan untuk mengurus ruang cakera dengan menetapkan saiz fail maksimum dan kiraan fail.
- Sasaran menulis peristiwa secara berterusan sehingga sesi berhenti atau had storan dicapai.
(2) ring_buffer Sasaran
Sasaran ring_buffer menyimpan peristiwa dalam memori untuk akses pantas tanpa I/O cakera:
- pilih ring_buffer sebagai jenis sasaran.
- Konfigurasikan peruntukan memori maksimum untuk penimbal.
- Fahami bahawa peristiwa lama akan dibuang apabila penimbal terisi, menjadikannya sesuai untuk pemantauan aktiviti terkini.
(3) penghitung_peristiwa Sasaran
Sasaran event_counter hanya mengira kejadian peristiwa tanpa menyimpan data terperinci. Ini memberikan overhed minimum apabila anda hanya memerlukan maklumat frekuensi.
(4) histogram Sasaran
Histogram sasaran mengumpulkan peristiwa mengikut nilai medan tertentu, menghasilkan statistik taburan. Ini berguna untuk mengenal pasti corak sepunya atau nilai frekuensi tinggi.
(5) padanan_pasangan Sasaran
Sasaran pair_matching menghubungkan peristiwa berkaitan seperti pemerolehan dan pelepasan kunci. Ini membolehkan analisis operasi berpasangan dan hubungan pemasaannya.
4.3.4 Tetapan Lanjutan
. Maju halaman menyediakan pilihan konfigurasi peringkat sesi:
- Pilih Maju halaman dari kiri Pilih halaman panel.
- Konfigurasi Mod pengekalan acara untuk mengawal bagaimana peristiwa dikendalikan di bawah tekanan ingatan.
- Tetapkan Kependaman penghantaran maksimum untuk mengimbangi pemprosesan masa nyata dengan prestasi sistem.
- Konfigurasi Saiz memori maksimum dan Saiz acara maks berdasarkan keperluan pemantauan anda.
- pilih Mod pembahagian memori untuk mengoptimumkan untuk persekitaran tunggal atau berbilang CPU.
4.4 Mengkonfigurasi Penapis Acara (Predikat)
Predikat mengurangkan volum data dengan menapis peristiwa berdasarkan kriteria tertentu. Untuk mengkonfigurasi penapis:
- Pada Acara dan Program halaman, pilih acara yang anda ingin tapis, seperti "sql_statement_completed".
- Klik Konfigurasi untuk membuka dialog konfigurasi acara.
- Pilih Penapis (Predikat) tab.
- Dalam Bidang lungsur turun, pilih medan untuk ditapis, seperti tempoh.
- Pilih satu operator, seperti “>”.
- Masukkan penapis nilai, seperti 1000000 (1 saat).
- Tambah lebih banyak syarat jika perlu.
4.5 Memilih Medan Tindakan dan Acara
Untuk setiap acara, anda boleh memilih data untuk dikumpul:
- Pada Acara dan Program halaman, pilih acara yang anda mahu pilih data, seperti "sql_statement_completed".
- Klik Konfigurasi untuk membuka dialog konfigurasi acara.
- Pilih Medan Global (Tindakan) tab.
- Pilih tindakan untuk menambah maklumat tambahan, seperti database_name atau client_app_name.
- Semak semula Medan Acara bahagian untuk melihat medan yang ditangkap secara automatik.
- Kosongkan sebarang medan yang tidak diperlukan untuk mengurangkan volum data.
4.6 Memulakan dan Mengurus Sesi
Selepas mengkonfigurasi sesi anda, anda boleh memulakannya dan memantau operasinya:
- Klik OK untuk membuat sesi.
- Dalam Object Explorer, kembangkan Sesyen folder untuk melihat sesi baharu anda.
- Klik kanan nama sesi dan pilih Mulakan Sesi untuk mula menangkap peristiwa.
- Untuk melihat data langsung, klik kanan sesi dan pilih Tonton Data Langsung.
- Hentikan sesi dengan mengklik kanan dan memilih Hentikan Sesi.
5. Mencipta Sesi Acara Lanjutan Menggunakan T-SQL
5.1 CIPTA SESI ACARA Sintaks
Mencipta sesi Acara Lanjutan dengan T-SQL menyediakan kawalan yang tepat dan membolehkan penskripan untuk penggunaan automatik. Pernyataan CREATE EVENT SESSION mengikut struktur sintaks tertentu.
Sintaks asas merangkumi nama sesi, klausa ADD EVENT untuk setiap peristiwa, klausa ADD SASARAN untuk destinasi storan dan klausa WITH pilihan untuk konfigurasi sesi.
5.2 Mencipta Sesi Acara Asas
Sesi asas memantau peristiwa tertentu dan menulis hasil kepada sasaran. Berikut ialah cara untuk membina komponen penting.
5.2.1 Menentukan Nama dan Pilihan Sesi
Mulakan dengan mencipta sesi dengan nama deskriptif:
CREATE EVENT SESSION [SampleSession] ON SERVER
Klausa ON SERVER mencipta sesi berskop pelayan yang berterusan merentas perubahan pangkalan data. Untuk Pangkalan Data Azure SQL, gunakan ON DATABASE untuk sesi berskop pangkalan data.
5.2.2 Menambah Acara dengan ADD EVENT
Tambahkan acara untuk ditangkap menggunakan klausa ADD EVENT:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Ini menangkap semua pernyataan SQL yang lengkap. Anda boleh menambah berbilang acara dengan memasukkan klausa ADD EVENT tambahan.
5.2.3 Mengkonfigurasi Tindakan Acara
Tindakan mengumpulkan konteks tambahan untuk setiap acara. Tambahkan tindakan dalam kurungan selepas nama acara:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Contoh ini menangkap teks SQL, nama pangkalan data dan nama pengguna untuk setiap pernyataan yang lengkap.
5.2.4 Menetapkan Predikat Peristiwa (Klausa WHERE)
Meramalkan peristiwa penapis untuk mengurangkan volum data. Gunakan klausa WHERE dalam definisi acara:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Ini menapis untuk pernyataan dengan tempoh lebih daripada 5 saat (5,000,000 mikrosaat).
5.3 Menambah Sasaran Peristiwa
Sasaran menentukan tempat data peristiwa disimpan dan cara ia diproses.
5.3.1 Sintaks TAMBAH SASARAN
Tambah sasaran menggunakan klausa ADD SASARAN selepas semua peristiwa ditakrifkan:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Awalan package0 menunjukkan sasaran datang daripada pakej asas.
5.3.2 Mengkonfigurasi Parameter Sasaran
Setiap jenis sasaran menerima parameter tertentu. Untuk event_file, konfigurasikan nama fail, max_file_size dan max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Konfigurasi ini mencipta fail sehingga 50 MB setiap satu, mengekalkan sehingga 5 fail melalui peralihan.
5.4 Pilihan dan Tetapan Sesi
Klausa WITH mengkonfigurasi pilihan peringkat sesi yang mengawal tingkah laku dan penggunaan sumber.
5.4.1 MAX_MEMORY dan EVENT_RETENTION_MODE
Kawal peruntukan memori dan pengendalian peristiwa di bawah tekanan:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
Pilihan EVENT_RETENTION_MODE termasuk ALLOW_SINGLE_EVENT_LOSS untuk penggunaan memori yang minimum, ALLOW_MULTIPLE_EVENT_LOSS untuk overhed yang sederhana dan NO_EVENT_LOSS untuk pengekalan data yang lengkap dengan mengorbankan potensi impak prestasi.
5.4.2 MAX_DISPATCH_LATENCY
Tetapkan masa maksimum peristiwa boleh kekal dalam penimbal sebelum ditulis kepada sasaran:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Nilai yang lebih rendah memberikan lebih banyak data masa nyata dengan kos peningkatan operasi I/O.
5.4.3 MEMORY_PARTITION_MODE
Optimumkan pembahagian memori untuk konfigurasi perkakasan anda:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Pilihan termasuk NONE untuk partition tunggal, PER_NODE untuk sistem NUMA dan PER_CPU untuk konkurensi maksimum pada sistem berbilang CPU.
5.5 Memulakan, Menghentikan dan Mengubah Sesi
Urus keadaan sesi dan konfigurasi melalui penyataan ALTER EVENT SESSION.
5.5.1 UBAH SESI ACARA untuk Mula/Berhenti
Mulakan sesi selepas penciptaan:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Hentikan sesi berjalan:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Mengubah suai Sesi Sedia Ada
Ubah suai konfigurasi sesi semasa dihentikan. Tambah acara:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Alih keluar acara:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Menggugurkan Sesi Acara
Alih keluar sesi sepenuhnya dengan DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Sesi mesti dihentikan sebelum digugurkan.
6. Bekerja dengan Sasaran Acara secara Terperinci
6.1 fail_peristiwa Konfigurasi Sasaran
Sasaran fail_event menyediakan storan berterusan untuk data peristiwa dengan pilihan konfigurasi yang fleksibel.
6.1.1 Laluan Fail dan Konvensyen Penamaan
Tentukan laluan penuh dan nama fail untuk fail acara:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Gunakan sambungan .xel untuk fail log Acara Lanjutan. Memastikan SQL Server akaun perkhidmatan mempunyai kebenaran menulis ke direktori yang ditentukan.
6.1.2 Pergantian Fail dan Pengurusan Saiz
Konfigurasikan peralihan fail automatik untuk mengurus ruang cakera:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Apabila fail mencapai 50 MB, SQL Server Peristiwa Lanjutan mencipta fail baharu dengan akhiran bertambah. Selepas mencapai 10 fail, fail tertua akan ditimpa.
6.1.3 Membaca Data Fail Acara
Tanya data fail peristiwa menggunakan fungsi sys.fn_xe_file_target_read_file:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Corak kad bebas membaca semua fail yang dikaitkan dengan sesi.
6.2 ring_buffer Penggunaan Sasaran
Sasaran ring_buffer menyimpan peristiwa dalam memori untuk akses pantas kepada aktiviti terkini.
6.2.1 Penyimpanan Peristiwa Berasaskan Ingatan
Konfigurasikan ring_buffer untuk storan berasaskan memori:
ADD TARGET package0.ring_buffer
Acara kekal boleh diakses hanya semasa sesi aktif dan SQL Server sedang berjalan. Data hilang apabila sesi berhenti atau pelayan dimulakan semula.
6.2.2 Saiz Penampan dan Konfigurasi
Kawal peruntukan memori untuk penimbal cincin:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Nyatakan memori dalam KB. Apabila penimbal terisi, peristiwa lama akan dibuang menggunakan pendekatan FIFO.
6.2.3 Menyoal Data Penampan Gelang
Akses data penimbal cincin melalui DMV:
SELECT
CAST(target_data AS XML) AS TargetData
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 = 'YourSessionName'
AND t.target_name = 'ring_buffer';
Data_target mengandungi maklumat peristiwa berformat XML.
6.3 kaunter_peristiwa Sasaran
Sasaran event_counter menyediakan pengiraan mudah tanpa penyimpanan data terperinci:
ADD TARGET package0.event_counter
Sasaran ini menjejaki kekerapan peristiwa dengan overhed yang minimum, berguna untuk pemantauan volum tinggi yang hanya kiraan yang penting.
6.4 histogram Sasaran
Histogram sasaran mengumpulkan peristiwa mengikut nilai medan:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Konfigurasi ini mencipta histogram yang menunjukkan pengedaran peristiwa merentas pangkalan data.
6.5 pasangan_pemadanan Sasaran
Sasaran pair_matching menghubungkan peristiwa berkaitan seperti pemerolehan kunci dengan siaran:
ADD TARGET package0.pair_matching(
SET begin_event=N'sqlserver.lock_acquired',
end_event=N'sqlserver.lock_released',
begin_matching_columns=N'resource_type',
end_matching_columns=N'resource_type'
)
Ini membolehkan analisis operasi berpasangan dan tempohnya.
7. Melihat dan Menganalisis Data Peristiwa Lanjutan
7.1 Menggunakan SSMS untuk Melihat Data Langsung
SQL Server Studio Pengurusan menyediakan antara muka grafik untuk melihat data Peristiwa Lanjutan dalam masa nyata:
- Dalam Penjelajah Objek, kembangkan Pengurusan -> Acara Lanjutan -> Sesyen.
- Klik kanan sesi aktif anda.
- pilih Tonton Data Langsung untuk membuka pemapar data langsung.
- Peristiwa muncul dalam grid apabila ia berlaku.
- Klik pada acara individu untuk melihat nilai medan terperinci dalam anak tetingkap butiran.
- Gunakan penapis bar alat untuk memfokus pada jenis acara atau nilai medan tertentu.
7.2 Menyoal Data Fail Peristiwa dengan T-SQL
Pertanyaan T-SQL menyediakan analisis fleksibel data peristiwa yang ditangkap.
7.2.1 Fungsi sys.fn_xe_file_target_read_file
Baca data fail acara menggunakan fungsi sistem ini:
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Fungsi ini mengembalikan satu baris setiap acara dengan butiran berformat XML.
7.2.2 Menghuraikan Data Acara XML
Ekstrak nilai khusus daripada data peristiwa XML:
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
) AS EventData;
Ekspresi XQuery mengekstrak nilai medan individu daripada struktur XML.
7.2.3 Menukar Data Peristiwa kepada Jadual
Buat set hasil berstruktur daripada data acara:
WITH EventData AS (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
)
SELECT
EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;
7.3 Menyoal Data Penampan Gelang
Ekstrak data daripada sasaran ring_buffer:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
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 = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 Paparan Sistem untuk Acara Lanjutan
SQL Server menyediakan beberapa DMV dan paparan katalog untuk mengurus dan memantau sesi Acara Lanjutan.
7.4.1 sys.server_event_sessions
Lihat definisi sesi yang disimpan dalam pelayan:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Paparan katalog ini menunjukkan butiran konfigurasi untuk semua sesi yang ditentukan.
7.4.2 sys.dm_xe_sessions
Lihat sesi yang sedang aktif:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
DMV ini menyediakan maklumat masa jalan tentang sesi Acara Lanjutan yang aktif.
7.4.3 sys.dm_xe_session_targets
Lihat sasaran yang berkaitan dengan sesi aktif:
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
7.4.4 DMV Berguna Lain
Pandangan tambahan menyediakan maklumat sesi yang komprehensif:
- sys.dm_xe_session_events: Menyenaraikan acara dalam sesi aktif
- sys.dm_xe_session_event_actions: Menunjukkan tindakan yang dikonfigurasikan untuk acara sesi
- sys.dm_xe_objects: Mengkatalogkan semua peristiwa, tindakan dan sasaran yang tersedia
- sys.dm_xe_object_columns: Medan butiran tersedia untuk setiap jenis acara
- sys.dm_xe_packages: Menyenaraikan semua pakej Acara Lanjutan
8. Kes Penggunaan Praktikal dan Contoh
8.1 Memantau Perlaksanaan Pernyataan SQL
Penjejakan pelaksanaan pernyataan SQL memberikan cerapan tentang corak pertanyaan dan ciri prestasi.
8.1.1 Menjejaki Peristiwa sql_statement_completed
Buat sesi untuk memantau penyata SQL yang lengkap:
CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.client_hostname,
sqlserver.username
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryMonitoring.xel',
max_file_size=(100),
max_rollover_files=(5)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
STARTUP_STATE=OFF
);
ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;
8.1.2 Penapisan mengikut Pangkalan Data atau Aplikasi
Fokus pada pangkalan data atau aplikasi tertentu menggunakan predikat:
CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.client_app_name)
WHERE (
[sqlserver].[database_name] = N'YourDatabase'
AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\AppMonitoring.xel'
);
8.2 Menangkap Maklumat Kebuntuan
Analisis kebuntuan memerlukan menangkap maklumat terperinci tentang transaksi yang bercanggah.
8.2.1 xml_deadlock_report Acara
Buat sesi untuk menangkap graf kebuntuan lengkap:
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);
ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
8.2.2 Menganalisis Graf Kebuntuan
Ekstrak dan analisis maklumat kebuntuan:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
EventXML.query('.') AS DeadlockGraph
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\Deadlocks*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';
Graf kebuntuan mengandungi butiran tentang proses, sumber dan pemilihan mangsa.
8.3 Menjejak Isu Prestasi Pertanyaan
Kenal pasti pertanyaan berprestasi buruk menggunakan metrik tempoh dan penggunaan sumber.
8.3.1 Pengesanan Pertanyaan Jangka Panjang
Tangkap pertanyaan yang melebihi ambang tempoh tertentu:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.plan_handle
)
WHERE ([duration] > 5000000) -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\LongQueries.xel'
);
8.3.2 Analisis Rancangan Pelaksanaan
Tangkap rancangan pertanyaan untuk analisis prestasi:
CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
ACTION(
sqlserver.sql_text,
sqlserver.database_name
)
WHERE ([duration] > 10000000) -- 10 seconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryPlans.xel',
max_file_size=(200)
);
8.4 Memantau Log Masuk dan Acara Keselamatan
Jejaki aktiviti pengesahan dan kebenaran untuk pengauditan keselamatan.
8.4.1 Penjejakan Kejayaan dan Kegagalan Log Masuk
Pantau kedua-dua percubaan log masuk yang berjaya dan gagal:
CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_hostname,
sqlserver.client_app_name
)
),
ADD EVENT sqlserver.login_failed(
ACTION(
sqlserver.client_hostname
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);
8.4.2 Perubahan Kebenaran
Jejaki pengubahsuaian kebenaran keselamatan:
CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SecurityAudit.xel'
);
8.5 Pemantauan Peringkat Pangkalan Data
Pantau operasi khusus pangkalan data dan perubahan keadaan.
8.5.1 Sandaran dan Pemulihan Peristiwa
Jejaki operasi sandaran dan pulihkan:
CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\BackupRestore.xel'
);
8.5.2 Perubahan Keadaan Pangkalan Data
Pantau peralihan keadaan pangkalan data:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Mengesan Isu Rasuah dan Integriti Pangkalan Data
SQL Server Peristiwa Lanjutan menyediakan keupayaan amaran awal untuk mengesan potensi rasuah pangkalan data, membenarkan campur tangan proaktif sebelum isu meningkat.
8.6.1 Peristiwa Penting untuk Pengesanan Rasuah
Beberapa peristiwa menandakan potensi rasuah atau masalah I/O.
8.6.1.1 error_reported Peristiwa untuk Ralat Kritikal
Peristiwa error_reported menangkap semua SQL Server ralat, termasuk nombor ralat berkaitan rasuah:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Ralat 823 menunjukkan ralat I/O, 824 menandakan ralat ketekalan logik dan 825 melaporkan kejayaan cuba semula baca yang mungkin menunjukkan isu perkakasan.
8.6.1.2 pangkalan data_suspect_data_page Acara
Peristiwa ini berlaku apabila SQL Server menemui halaman yang disyaki:
ADD EVENT sqlserver.database_suspect_data_page
Halaman yang disyaki menunjukkan kemungkinan rasuah dan direkodkan dalam jadual msdb.dbo.suspect_pages.
8.6.1.3 Peristiwa errorlog_written
Tangkap entri yang ditulis kepada SQL Server log ralat:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Mewujudkan Sesi Pemantauan Rasuah
Wujudkan sesi komprehensif untuk pengesanan dan pemantauan rasuah.
8.6.2.1 Penapisan Nombor Ralat Rasuah (823, 824, 825)
Cipta sesi yang disasarkan dengan memberi tumpuan kepada penunjuk rasuah:
CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
WHERE (
[error_number] IN (823, 824, 825, 832, 855, 856)
OR [severity] >= (20)
)
),
ADD EVENT sqlserver.database_suspect_data_page(
ACTION(
sqlserver.database_name
)
)
8.6.2.2 Menetapkan Tahap Keterukan yang Sesuai
Sertakan ralat keterukan tinggi yang mungkin menunjukkan rasuah:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Keterukan 20 dan ke atas menunjukkan masalah peringkat sistem yang selalunya berkaitan dengan rasuah.
8.6.2.3 Mengkonfigurasi Sasaran Fail Peristiwa untuk Makluman
Simpan peristiwa rasuah untuk analisis dan makluman:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
max_file_size=(50),
max_rollover_files=(10)
)
WITH (
STARTUP_STATE=ON,
MAX_DISPATCH_LATENCY=5 SECONDS
);
ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;
8.6.3 Menganalisis Data Peristiwa Rasuah
Ekstrak dan tafsir peristiwa berkaitan rasuah daripada data yang ditangkap.
8.6.3.1 Mengenalpasti Halaman Suspek
Pertanyaan untuk acara database_suspect_data_page:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Mengekstrak Butiran dan Konteks Ralat
Analisis error_reported peristiwa untuk corak rasuah:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);
8.6.4 Integrasi dengan DBCC CHECKDB
Gunakan data Peristiwa Lanjutan untuk membimbing DBCC CHECKDB pelaksanaan.
8.6.4.1 Mencetuskan DBCC CHECKDB Berdasarkan Peristiwa
Apabila peristiwa rasuah dikesan, laksanakan DBCC CHECKDB untuk pengesahan menyeluruh:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Peristiwa Lanjutan memberikan amaran awal, manakala DBCC CHECKDB melakukan pengesahan menyeluruh.
8.6.4.2 Aliran Kerja Respons Rasuah Automatik
Laksanakan respons automatik dengan memantau fail acara:
- Konfigurasi SQL Server Tugas ejen untuk menanyakan fail acara pemantauan rasuah secara berkala.
- Apabila peristiwa rasuah ditemui, laksanakan DBCC CHECKDB pada pangkalan data yang terjejas.
- Hantar makluman e-mel kepada DBA dengan butiran acara dan keputusan DBCC CHECKDB.
- Log penemuan ke jadual pemantauan berpusat untuk analisis trend.
8.6.4.3 Mengimbangi Pemantauan Proaktif dengan Prestasi
Acara Lanjutan menawarkan pengesanan rasuah overhed rendah berbanding pelaksanaan DBCC CHECKDB yang kerap:
- Jalankan Acara Lanjutan secara berterusan untuk pengesanan rasuah masa nyata
- Laksanakan DBCC CHECKDB hanya apabila penunjuk rasuah muncul
- Jadualkan DBCC CHECKDB secara tetap semasa tingkap penyelenggaraan
- Gunakan Peristiwa Lanjutan untuk mengenal pasti pangkalan data yang memerlukan perhatian segera
Pendekatan ini menyediakan pemantauan proaktif tanpa penggunaan sumber yang ketara bagi pemeriksaan integriti berterusan.
8.6.4.4 Membaiki Pangkalan Data Korup
Jika rasuah dikesan dalam pangkalan data, anda boleh menggunakan DBCC CHECKDB membetulkan rasuah kecil. Jika gagal, anda boleh mencuba pihak ketiga Alat pemulihan pangkalan data SQL, yang secara amnya menawarkan kadar pemulihan yang lebih tinggi pada pangkalan data yang rosak teruk.
9. Acara Lanjutan Skop Pelayan vs Skop Pangkalan Data
9.1 Sesi Acara Skop Pelayan
Sesi berskop pelayan memantau aktiviti merentas keseluruhan SQL Server contoh. Sesi ini dibuat dengan klausa ON SERVER dan berterusan dalam pangkalan data induk.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Sesi berskop pelayan menangkap peristiwa daripada semua pangkalan data dan sesuai untuk pemantauan peringkat contoh.
9.2 Sesi Acara Skop Pangkalan Data (Pangkalan Data SQL Azure)
Sesi berskop pangkalan data dihadkan kepada satu pangkalan data dan digunakan terutamanya dalam Pangkalan Data Azure SQL di mana akses peringkat pelayan dihadkan:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
Dalam Pangkalan Data Azure SQL, fail acara disimpan dalam Storan Azure Blob dan bukannya sistem fail tempatan.
9.3 Perbezaan dan Kes Penggunaan
Sesi berskop pelayan menyediakan pemantauan menyeluruh merentas semua pangkalan data tetapi memerlukan kebenaran yang tinggi. Sesi berskop pangkalan data menawarkan pengasingan dan sesuai apabila memantau aplikasi atau penyewa tertentu.
Gunakan sesi berskop pelayan untuk pemantauan berpusat, penyelesaian masalah prestasi merentas pangkalan data dan pengauditan keselamatan. Gunakan sesi berskop pangkalan data dalam Pangkalan Data Azure SQL, persekitaran berbilang penyewa atau apabila menyerahkan tanggungjawab pemantauan kepada pasukan aplikasi.
10. Peristiwa Lanjutan dalam Pangkalan Data Azure SQL
10.1 Pertimbangan Khusus Azure
Pangkalan Data SQL Azure melaksanakan Acara Lanjutan dengan beberapa perbezaan daripada di premis SQL Server. Sesi adalah berskop pangkalan data secara lalai dan storan fail acara menggunakan Storan Azure Blob dan bukannya sistem fail tempatan.
Pengesahan kepada Azure Blob Storage memerlukan token SAS yang dikonfigurasikan dalam sasaran fail peristiwa. Rentetan sambungan merujuk akaun storan dan bekas tempat fail peristiwa disimpan.
10.2 Sasaran Tersedia dalam Azure
Pangkalan Data Azure SQL menyokong sasaran Acara Lanjutan ini:
- event_file: Menulis ke Azure Blob Storage
- ring_buffer: Storan berasaskan memori dengan kelakuan yang sama seperti di premis
- event_counter: Mengira kejadian peristiwa
Sasaran fail_event memerlukan konfigurasi dengan kelayakan Azure Blob Storage:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Mencipta Sesi Berskop Pangkalan Data
Buat sesi dalam Pangkalan Data Azure SQL:
CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);
ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;
Sesi berskop pangkalan data dalam Azure berkelakuan serupa dengan sesi berskop pelayan di premis tetapi dengan skop terhad kepada pangkalan data semasa.
11. Amalan Terbaik dan Pengoptimuman Prestasi
11.1 Meminimumkan Kesan Prestasi
Acara Lanjutan direka untuk overhed minimum, tetapi konfigurasi yang tidak betul boleh menjejaskan prestasi. Ikuti garis panduan ini:
- Gunakan predikat khusus untuk menapis peristiwa daripada menangkap segala-galanya
- Elakkan mengumpul tindakan yang tidak perlu yang menambah overhed pemprosesan
- Pilih sasaran yang sesuai berdasarkan keperluan pengekalan data
- Tetapkan saiz penimbal yang munasabah dan kependaman penghantaran
- Pantau penggunaan sumber sesi menggunakan DMV
11.2 Memilih Acara dan Penapis yang Tepat
Pilih acara yang menangani secara langsung objektif pemantauan anda. Elakkan peristiwa frekuensi tinggi melainkan perlu, dan sentiasa gunakan predikat untuk mengurangkan volum data.
Sebagai contoh, daripada menangkap semua peristiwa sql_statement_completed, tapis untuk pangkalan data tertentu atau ambang tempoh:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Garis Panduan Pemilihan Sasaran
Pilih sasaran berdasarkan keperluan analisis anda:
- Gunakan event_file untuk analisis sejarah terperinci dan pengekalan jangka panjang
- Gunakan ring_buffer untuk pemantauan masa nyata dengan impak I/O yang minimum
- Gunakan event_counter apabila kekerapan sahaja yang penting
- Gunakan histogram untuk analisis taburan
- Gunakan pair_matching untuk analisis peristiwa berkorelasi
11.4 Syor Konfigurasi Sesi
Konfigurasikan sesi dengan had sumber yang sesuai:
- Tetapkan MAX_MEMORY berdasarkan jumlah acara yang dijangkakan dan sumber pelayan
- Gunakan ALLOW_SINGLE_EVENT_LOSS untuk overhed minimum dalam kebanyakan senario
- Tetapkan MAX_DISPATCH_LATENCY untuk mengimbangi keperluan masa nyata dengan prestasi
- Gunakan pembahagian memori PER_CPU pada sistem berbilang pemproses
- Elakkan STARTUP_STATE=ON melainkan pemantauan berterusan diperlukan
11.5 Menguruskan Saiz dan Pengekalan Fail Acara
Konfigurasikan peralihan fail untuk mengelakkan penggunaan cakera tanpa had:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Konfigurasi ini mengekalkan kira-kira 1 GB data acara (10 fail × 100 MB). Laraskan berdasarkan keperluan pengekalan anda dan storan yang tersedia.
12. Menyelesaikan Masalah Peristiwa Lanjutan
12.1 Isu dan Penyelesaian Biasa
Isu-isu Acara Lanjutan yang biasa termasuk sesi yang tidak menangkap data, penurunan prestasi, masalah sasaran fail dan tingkah laku sesi yang tidak dijangka.
12.2 Sesi Tidak Menangkap Data
Jika sesi tidak menangkap acara yang dijangkakan:
- Sahkan sesi dimulakan menggunakan sys.dm_xe_sessions.
- Semak predikat untuk memastikan ia tidak menapis semua acara.
- Sahkan peristiwa sedang diaktifkan dengan mengalih keluar penapis buat sementara waktu.
- Semak kebenaran untuk memastikan anda mempunyai akses untuk melihat data sesi.
- Pastikan konfigurasi sasaran betul dan boleh ditulis.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Kemerosotan Prestasi
Jika Acara Lanjutan menyebabkan masalah prestasi:
- Tambahkan predikat untuk mengurangkan volum acara.
- Alih keluar tindakan yang tidak perlu yang mengumpul data tambahan.
- Tingkatkan MAX_DISPATCH_LATENCY untuk mengurangkan kekerapan menulis.
- Tukar EVENT_RETENTION_MODE kepada ALLOW_SINGLE_EVENT_LOSS.
- Pertimbangkan untuk menggunakan ring_buffer dan bukannya event_file untuk acara frekuensi tinggi.
12.4 Isu Sasaran Fail
Masalah sasaran fail sering berkaitan dengan kebenaran atau ruang cakera:
- Sahkan SQL Server akaun perkhidmatan mempunyai kebenaran menulis ke direktori sasaran.
- Pastikan ruang cakera mencukupi tersedia.
- Semak sama ada laluan yang ditentukan wujud dan boleh diakses.
- Semak konfigurasi peralihan fail jika fail tidak berguling seperti yang diharapkan.
12.5 Penyahpepijatan dengan Paparan Sistem
Gunakan DMV untuk mendiagnosis isu Peristiwa Lanjutan:
-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;
-- View session targets and their status
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;
13. Topik Lanjutan
13.1 Mencipta Pakej Acara Tersuai
Pengguna lanjutan boleh membuat pakej acara tersuai untuk dilanjutkan SQL Server Kefungsian Acara Lanjutan. Ini memerlukan pembangunan dan penyepaduan C++ dengan SQL Server rangka kerja kebolehlanjutan.
Pakej tersuai membolehkan pemantauan acara khusus aplikasi atau menyepadukan sistem pemantauan pihak ketiga dengan infrastruktur Acara Lanjutan.
13.2 Templat Sesi Acara
SSMS menyediakan templat terbina dalam untuk senario pemantauan biasa. Akses templat semasa membuat sesi baharu melalui wizard:
- Dalam dialog Sesi Baharu, klik butang Templat dropdown.
- Pilih daripada templat yang tersedia seperti Penjejakan Butiran Pertanyaan atau Kesihatan Sistem.
- Ubah suai templat untuk memenuhi keperluan khusus anda.
13.3 Mengintegrasikan dengan Penyelesaian Pemantauan
Data Peristiwa Lanjutan boleh membekalkan penyelesaian pemantauan perusahaan:
- Eksport data peristiwa ke sistem pembalakan berpusat
- Menghuraikan fail acara dan memuatkan data ke dalam pangkalan data pemantauan
- Buat papan pemuka tersuai menggunakan alat BI
- Cetuskan makluman berdasarkan corak acara tertentu
- Berhubung dengannya SQL Server peristiwa dengan metrik aplikasi dan infrastruktur
13.4 Automasi dan Penjadualan
Automatikkan pengurusan Acara Lanjutan menggunakan SQL Server Ejen:
- Cipta kerja untuk memulakan/menghentikan sesi semasa tempoh masa tertentu
- Jadualkan analisis dan pelaporan fail acara
- Laksanakan dasar pengekalan data dengan mengarkibkan atau memadamkan fail acara lama
- Automatikkan respons kepada keadaan yang dikesan seperti isu prestasi atau peristiwa keselamatan
14. Penghijrahan dari SQL Server Profil
14.1 SQL Server Acara Profiler kepada Pemetaan Acara Lanjutan
Microsoft menyediakan pemetaan antara SQL Server Profil acara dan Acara Lanjutan. Pemetaan biasa termasuk:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:Permulaan_Batch -> permulaan_batch_sql
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starting
- Graf kebuntuan -> xml_deadlock_report
- Log Masuk Audit -> log masuk
- Log Keluar Audit -> logout
14.2 Menukar Definisi Surih
Tukar sedia ada SQL Server Profiler menjejak ke sesi Peristiwa Lanjutan dengan mengenal pasti peristiwa yang setara dan mengkonfigurasi predikat yang sesuai. SSMS menyediakan bantuan untuk penukaran biasa.
Semak penapis surih dan tukarkannya kepada predikat Peristiwa Lanjutan. Tindakan dalam Acara Lanjutan menggantikan lajur surih daripada SQL Server Profiler.
14.3 Perbandingan Prestasi
Acara Lanjutan memberikan prestasi yang jauh lebih baik daripada SQL Server Profiler. Kajian penanda aras menunjukkan Peristiwa Lanjutan menggunakan kitaran CPU yang lebih sedikit dan mempunyai kesan yang lebih sedikit pada pemprosesan transaksi.
Acara Lanjutan menggunakan pemprosesan tak segerak dan pengurusan memori yang dioptimumkan, manakala SQL Server Profiler bergantung pada tangkapan peristiwa segerak yang menyekat sehingga pemprosesan surih selesai.
15. kesimpulan
15.1 Ringkasan Konsep Utama
SQL Server Acara Lanjutan menyediakan rangka kerja yang kuat dan ringan untuk pemantauan dan penyelesaian masalah SQL ServerSeni bina ini terdiri daripada peristiwa, tindakan, predikat, sasaran dan sesi yang berfungsi bersama untuk menangkap aktiviti pelayan yang berkaitan.
Sesi boleh dicipta menggunakan SSMS atau T-SQL, yang menawarkan fleksibiliti untuk penyelesaian masalah ad-hoc dan pemantauan automatik. Pelbagai jenis sasaran menyokong pendekatan analisis yang berbeza, daripada pemantauan masa nyata dengan ring_buffer kepada analisis sejarah dengan event_file.
Acara Lanjutan memberikan prestasi unggul berbanding dengan SQL Server Profiler sambil menyediakan keupayaan pemantauan yang lebih komprehensif. Sistem ini membolehkan pentadbir pangkalan data dan pembangun mendiagnosis isu, mengoptimumkan prestasi, meningkatkan keselamatan dan mengekalkan pematuhan.
15.2 Langkah Seterusnya dan Sumber Selanjutnya
Untuk terus membangunkan anda SQL Server Kepakaran XEvents:
- Laksanakan Acara Lanjutan dalam persekitaran ujian untuk mendapatkan pengalaman langsung
- Semak dokumentasi Microsoft untuk katalog acara lengkap dan rujukan sintaks terperinci
- Sertai SQL Server forum komuniti untuk belajar daripada pengalaman orang lain
- Terokai senario lanjutan seperti pakej tersuai dan penyepaduan dengan platform pemantauan
- Bangunkan perpustakaan templat sesi untuk senario pemantauan biasa
16 Bahagian Soalan Lazim
S: Apakah SQL Server Acara Lanjutan?
A: SQL Server Extended Events ialah sistem pemantauan prestasi ringan yang disepadukan ke dalam SQL Server Enjin Pangkalan Data yang menangkap maklumat terperinci tentang operasi pelayan dengan overhed minimum.
S: Bagaimanakah Peristiwa Lanjutan berbeza daripada SQL Server Profiler?
J: Acara Lanjutan memberikan prestasi yang lebih baik, overhed yang lebih rendah dan konfigurasi yang lebih fleksibel daripada SQL Server Profiler. SQL Server Profiler ditamatkan dan Microsoft mengesyorkan menggunakan Peristiwa Lanjutan untuk semua tugas pemantauan.
S: Bolehkah Peristiwa Lanjutan memberi kesan SQL Server prestasi?
J: Apabila dikonfigurasikan dengan betul dengan predikat dan had sumber yang sesuai, Peristiwa Lanjutan mempunyai kesan prestasi yang minimum. Konfigurasi yang lemah tanpa penapisan boleh menjejaskan prestasi.
S: Apakah kebenaran yang diperlukan untuk membuat sesi Acara Lanjutan?
J: Anda memerlukan kebenaran MENGUBAH SEBARANG SESI ACARA untuk sesi berskop pelayan atau kebenaran KAWALAN pada pangkalan data untuk sesi berskop pangkalan data.
S: Bagaimanakah cara saya melihat data Peristiwa Lanjutan?
A: Gunakan SQL Server Pemapar data langsung Management Studio, fail peristiwa pertanyaan dengan sys.fn_xe_file_target_read_file atau data penimbal cincin pertanyaan melalui DMV.
S: Bolehkah Acara Lanjutan mengesan rasuah pangkalan data?
J: Ya, Peristiwa Lanjutan boleh menangkap ralat berkaitan rasuah (823, 824, 825) dan mengesyaki peristiwa halaman, memberikan amaran awal untuk kemungkinan isu rasuah.
S: Apakah perbezaan antara peristiwa, tindakan dan predikat?
A: Peristiwa ialah kejadian yang anda ingin pantau. Tindakan menambah maklumat tambahan pada peristiwa yang ditangkap. Menentukan peristiwa menapis berdasarkan keadaan untuk mengurangkan jumlah data.
S: Bagaimanakah cara saya memantau pertanyaan daripada aplikasi atau pangkalan data tertentu?
J: Gunakan predikat dalam konfigurasi acara anda untuk menapis mengikut nama_pangkalan data, nama_aplikasi_pelanggan atau medan lain yang berkaitan.
S: Apakah sasaran yang perlu saya gunakan untuk Acara Lanjutan?
J: Gunakan fail_peristiwa untuk storan yang berterusan dan analisis sejarah, ring_buffer untuk pemantauan masa nyata dengan overhed rendah, pembilang_peristiwa untuk penjejakan frekuensi mudah dan histogram untuk analisis pengedaran.
S: Adakah Acara Lanjutan tersedia dalam Pangkalan Data Azure SQL?
J: Ya, Pangkalan Data Azure SQL menyokong Acara Lanjutan berskop pangkalan data dengan fail acara yang disimpan dalam Storan Azure Blob.
S: Bagaimanakah cara saya menyelesaikan masalah sesi Acara Lanjutan yang tidak menangkap data?
A: Sahkan sesi telah dimulakan, semak predikat tidak menapis semua peristiwa, sahkan konfigurasi sasaran dan semak kebenaran menggunakan DMV sistem.
S: Bolehkah saya mengautomasikan pengurusan Acara Lanjutan?
A: Ya, gunakan SQL Server Tugas ejen untuk memulakan/menghentikan sesi, menganalisis fail acara, melaksanakan dasar pengekalan dan bertindak balas terhadap keadaan yang dikesan.
Rujukan
- Permulaan Pantas: Acara Lanjutan dalam SQL Server – Microsoft Learn
- Gambaran Keseluruhan Acara Lanjutan – Microsoft Learn
- SQL Server Sesi Acara Lanjutan – Microsoft Learn
- Sasaran untuk Acara Lanjutan dalam SQL Server – Microsoft Learn
- SQL Server Enjin Acara Lanjutan – Microsoft Learn
- SQL Server Profiler: Panduan Lengkap
- DBCC CHECKDB: Panduan Lengkap
- DataNumen SQL Recovery
Mengenai Penulis
Yuan Sheng ialah pentadbir pangkalan data kanan (DBA) dengan lebih 10 tahun pengalaman dalam SQL Server persekitaran dan pengurusan pangkalan data perusahaan. Beliau telah berjaya menyelesaikan ratusan senario pemulihan pangkalan data merentas perkhidmatan kewangan, penjagaan kesihatan dan organisasi pembuatan.
Yuan pakar dalam SQL Server pemulihan pangkalan data, penyelesaian ketersediaan tinggi, dan pengoptimuman prestasi. Pengalaman amali beliau yang luas termasuk mengurus pangkalan data berbilang terabait, melaksanakan Sentiasa Mengenai Kumpulan Ketersediaan, dan membangunkan strategi sandaran dan pemulihan automatik untuk sistem perniagaan yang kritikal.
Melalui kepakaran teknikal dan pendekatan praktikalnya, Yuan menumpukan pada mencipta panduan komprehensif yang membantu pentadbir pangkalan data dan profesional IT menyelesaikan kompleks SQL Server cabaran dengan cekap. Dia kekal terkini dengan yang terkini SQL Server keluaran dan teknologi pangkalan data Microsoft yang sedang berkembang, menguji senario pemulihan secara kerap untuk memastikan cadangannya mencerminkan amalan terbaik dunia sebenar.
Ada soalan tentang SQL Server pemulihan atau memerlukan panduan penyelesaian masalah pangkalan data tambahan? Yuan mengalu-alukan maklum balas dan cadangan untuk menambah baik sumber teknikal ini.

















