Extended Events چیست؟
Extended Events یک ابزار سبک، قدرتمند و قابل تنظیم برای مانیتورینگ SQL Server است که از نسخه ۲۰۰۸ معرفی شد. با این ابزار میتوان رفتار موتور پایگاه داده را بهصورت دقیق رصد و تحلیل کرد از بررسی عملکرد queryها گرفته تا شناسایی منابع بنبست و بلاک شدن.
مزایای کلیدی:
- جایگزین مدرن برای SQL Profiler
- مصرف منابع پایین
- قابلیت فیلتر دقیق دادهها
- پشتیبانی از Eventهای گسترده
اجزای اصلی Extended Events
مؤلفه | توضیح |
---|---|
Event | رویداد قابل رصد در SQL Server |
Target | محل ذخیره خروجی رویدادها (مثلاً فایل یا حافظه) |
Action | اطلاعات اضافی ثبتشده همراه رویداد |
Predicate | شرطهای فیلترینگ برای کاهش حجم |
Session | ترکیبی از اجزای بالا برای اجرا و مانیتورینگ |
ساخت و مدیریت یک Session ساده
ایجاد Session با T-SQL:
CREATE EVENT SESSION [MySession] ON SERVER
ADD EVENT sqlserver.sql_batch_completed
ADD TARGET package0.event_file (SET filename=N'MySession.xel')
WITH (STARTUP_STATE=OFF);
فعالسازی Session:
ALTER EVENT SESSION [MySession] ON SERVER STATE = START;
خواندن فایل خروجی:
SELECT * FROM sys.fn_xe_file_target_read_file('MySession*.xel', null, null, null);
پایش عملکرد queryها با Extended Events
برای بهینهسازی و تحلیل عملکرد queryها میتوان session مخصوصی ساخت. مثالی از تعریف یک session مانیتورینگ:
CREATE EVENT SESSION [QueryPerformanceMonitor] ON SERVER
ADD EVENT sqlserver.sql_batch_completed (
ACTION(sqlserver.sql_text, sqlserver.session_id)
WHERE duration > 1000000
),
ADD TARGET package0.event_file (SET filename=N'QueryPerfMonitor.xel')
WITH (STARTUP_STATE=OFF);
سپس دادهها را با query زیر تحلیل میکنیم:
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS event_name,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS duration,
event_data.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS query_text
FROM (
SELECT CAST(event_data AS XML)
FROM sys.fn_xe_file_target_read_file('QueryPerfMonitor*.xel', NULL, NULL, NULL)
) x;
مشکلات رایج Extended Events و راهحلها
مشکل | راهکار پیشنهادی |
---|---|
پیچیدگی پیکربندی | استفاده از SSMS برای طراحی گرافیکی |
حجم زیاد دادهها | اعمال فیلترهای دقیق و محدود کردن رویدادها |
خوانایی پایین خروجی | تبدیل خروجی XML به جدول با توابع سیستمی |
تاثیر بر عملکرد سرور | زمانبندی کوتاه اجرای session و محدود کردن targetها |
انتخاب Event مناسب | استفاده از اسکریپتها و تجربیات جامعه DBA |
بهبود عملکرد پایگاه داده با Extended Events
با تعریف sessionهای هدفمند میتوان queryهای کند، مصرف بالای CPU، بنبستها، و مشکلات wait را شناسایی و رفع کرد:
کاربردهای کلیدی:
- شناسایی queryهای با
duration
یاcpu_time
بالا - بررسی Deadlockها با
xml_deadlock_report
- تحلیل Execution Plan با
query_post_execution_showplan
- بررسی مصرف TempDB و I/O با
file_write
وtempdb_file_usage
قالب آماده برای Performance Tuning
CREATE EVENT SESSION [Perf_Tuning_XEvent] ON SERVER
ADD EVENT sqlserver.sql_batch_completed (
ACTION(sqlserver.sql_text, sqlserver.database_id)
WHERE duration > 1000000
),
ADD EVENT sqlserver.rpc_completed (
ACTION(sqlserver.sql_text)
WHERE cpu_time > 500000
),
ADD EVENT sqlserver.xml_deadlock_report,
ADD EVENT sqlserver.blocked_process_report (
SET blocked_process_threshold = 10
),
ADD TARGET package0.event_file (
SET filename = N'Perf_Tuning_XEvent.xel',
max_file_size = 50,
max_rollover_files = 5
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
TRACK_CAUSALITY = ON,
STARTUP_STATE = OFF
);
این Session همه چیز رو پایش میکنه: از کندی تا بنبست و منابع مصرفشده.
نتیجهگیری
Extended Events ابزاری حیاتی برای هر SQL DBA حرفهای است. با طراحی صحیح sessionها، فیلترهای مناسب و تحلیل دقیق خروجیها میتوان عملکرد پایگاه داده را بهینه کرد، مشکلات را پیشبینی نمود و تجربه کاربری را ارتقا داد.
سوالات متداول (FAQ)
۱. Extended Events چیست و چه تفاوتی با SQL Profiler دارد؟
Extended Events ابزار رسمی Microsoft برای مانیتورینگ و بررسی رفتار SQL Server است که جایگزین SQL Profiler محسوب میشود. برخلاف Profiler، حجم کمتری از منابع را مصرف میکند، قابلیت فیلتر پیشرفته دارد و از eventهای گستردهتری پشتیبانی میکند.
۲. چگونه میتوان یک Session مانیتورینگ بسازم؟
با استفاده از دستور CREATE EVENT SESSION
میتوان ترکیبی از eventها، actionها و فیلترها را تعریف کرده و خروجی را در فایل ذخیره کرد. مثال:
CREATE EVENT SESSION [MySession] ON SERVER
ADD EVENT sqlserver.sql_batch_completed
ADD TARGET package0.event_file (SET filename=N'MySession.xel');
۳. آیا Extended Events باعث کندی SQL Server میشود؟
خیر، اگر بهدرستی پیکربندی شود. استفاده از فیلترهای مناسب، انتخاب رویدادهای حیاتی و محدودسازی حافظه باعث حفظ عملکرد مطلوب سرور میشود.
۴. بهترین Eventها برای بررسی عملکرد query کدامند؟
sql_batch_completed
rpc_completed
query_post_execution_showplan
query_thread_profile
هرکدام اطلاعات متفاوتی درباره مدت اجرا، مصرف CPU، و ساختار اجرای queryها ارائه میدهند.
۵. چطور میتوان فایلهای خروجی .xel
را تحلیل کرد؟
با استفاده از تابع sys.fn_xe_file_target_read_file
و تبدیل به XML میتوان اطلاعات رویدادها را واکشی کرد. همچنین SSMS امکان مشاهده گرافیکی رویدادها را فراهم کرده است.
۶. آیا Extended Events در لحظه اجرا فعال میشود؟
بله، با دستور ALTER EVENT SESSION ... STATE = START
میتوان Session را فعال کرد. همچنین با گزینه STARTUP_STATE = ON
امکان فعالسازی خودکار هنگام راهاندازی SQL Server وجود دارد.
۷. آیا میتوان Events را با دیگر ابزارها ترکیب کرد؟
بله! میتوان اطلاعات خروجی را با Dynamic Management Views (DMVs) ترکیب کرد یا به Power BI و دیگر ابزارهای تحلیلی متصل نمود.
ارتباط و مشاوره
برای اطلاعات بیشتر و مشاوره میتوانید از طریق زیر با ما در ارتباط باشید:
نظری داده نشده