آموزش کامل fn_trace_getinfo در SQL Server با مثالهای عملی و نکات حرفهای
مسئلهای که fn_trace_getinfo حل میکند
fn_trace_getinfo در خانواده «راهنمای جامع SQL Trace و SQL Server Profiler و مهاجرت از ابزارهای منسوخ» قرار دارد. این مقاله نام فنی را به یک گردشکار عملی تبدیل میکند تا بدانید چه داده یا اقدامی فراهم میشود، چه مجوزی لازم است و چگونه نتیجه را بدون ریسک غیرضروری تفسیر کنید.
مخاطب، مدیر پایگاه داده، توسعهدهنده و کارشناس پشتیبانی است. در پایان میتوانید پشتیبانی از سامانههای Legacy، تحلیل فایلهای Trace و طراحی مهاجرت کنترلشده به Extended Events. را با Queryهای مستند و کنترلشده انجام دهید.
برای دیدن جایگاه موضوع در خانواده کامل، راهنمای جامع SQL Trace و SQL Server Profiler و مهاجرت از ابزارهای منسوخ را مطالعه کنید. مسیر آموزش از تعریف شروع میشود و به مثال، خطا، Performance و چکلیست میرسد.
دسترسی سریع
- تعریف و Scope
- نحو و مجوز
- منطق اجرا
- ۱۰ مثال عملی
- خطا و Performance
- FAQ و چکلیست
تعریف و جایگاه فنی fn_trace_getinfo
fn_trace_getinfo یک تابع سیستمی از زیرساخت قدیمی SQL Trace است که برای تعریف، کنترل، خواندن یا تحلیل رخدادهای موتور SQL Server به کار میرود.
کاربرد اصلی آن چنین است: پشتیبانی از سامانههای Legacy، تحلیل فایلهای Trace و طراحی مهاجرت کنترلشده به Extended Events. خروجی خام باید با زمان، Database، Session و وضعیت همزمان موتور مرتبط شود تا نشانه با علت اشتباه نشود.
این موضوع در دسته LEGACY_TRACE قرار میگیرد؛ بنابراین مقاله روی Scope، اثر عملیاتی و مسیر تصمیم تمرکز دارد.
نقشه نخست، ارتباط TraceID، EventClass، ColumnID و خروجی تصمیم را برای fn_trace_getinfo نمایش میدهد.
نحو، پیشنیاز و شکل خروجی
الگوی اصلی اجرا
SELECT * FROM sys.fn_trace_getinfo(DEFAULT);
مجوز موردنیاز
مجوز ALTER TRACE یا سطح مدیریتی متناظر، همراه دسترسی فایل در سناریوهای مبتنی بر trc.
ورودیها و خروجی
- Scope با TraceID مشخص میشود.
- خروجی با EventClass و ColumnID تفسیر میشود.
- رفتار شناسه نامعتبر یا مقدار NULL در محیط آزمایش بررسی شود.
- نسخه SQL Server و نام مجوزها پیش از انتشار Runbook کنترل شوند.
منطق اجرا و نکات فنی
Scope و زمان
fn_trace_getinfo را در سطح Session، Database یا Server تفسیر کنید و زمان Reset یا تغییر داده را ثبت نمایید.
همبستگی شواهد
خروجی fn_trace_getinfo با Catalog View، Execution Plan، Wait Stats یا لاگ مناسب ترکیب شود تا تشخیص قابل دفاع باشد.
مرز مشاهده و تغییر
Query تشخیصی و اقدام تغییردهنده مرتبط با fn_trace_getinfo در دو Runbook جدا نگهداری شوند.
جریان دوم از ورودی TraceID به اجرای محدود، Snapshot، تفسیر ColumnID و اعتبارسنجی ثانویه میرسد.
ده مثال عملی از ساده تا حرفهای
مثال 1: سناریوی 1
این مثال، کاربرد مرحله 1 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT * FROM sys.fn_trace_getinfo(DEFAULT);
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 1 | خروجی یا پیام مرحله 1 متناسب با وضعیت جاری سرور | نتیجه مرحله 1 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 1: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 2: سناریوی 2
این مثال، کاربرد مرحله 2 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT id,status,path,is_default FROM sys.traces;
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 2 | خروجی یا پیام مرحله 2 متناسب با وضعیت جاری سرور | نتیجه مرحله 2 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 2: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 3: سناریوی 3
این مثال، کاربرد مرحله 3 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT * FROM sys.fn_trace_getinfo(DEFAULT);
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 3 | خروجی یا پیام مرحله 3 متناسب با وضعیت جاری سرور | نتیجه مرحله 3 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 3: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 4: سناریوی 4
این مثال، کاربرد مرحله 4 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT trace_event_id,name FROM sys.trace_events ORDER BY trace_event_id;
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 4 | خروجی یا پیام مرحله 4 متناسب با وضعیت جاری سرور | نتیجه مرحله 4 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 4: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 5: سناریوی 5
این مثال، کاربرد مرحله 5 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT trace_column_id,name,type_name FROM sys.trace_columns ORDER BY trace_column_id;
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 5 | خروجی یا پیام مرحله 5 متناسب با وضعیت جاری سرور | نتیجه مرحله 5 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 5: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 6: سناریوی 6
این مثال، کاربرد مرحله 6 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT name,startup_state FROM sys.server_event_sessions;
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 6 | خروجی یا پیام مرحله 6 متناسب با وضعیت جاری سرور | نتیجه مرحله 6 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 6: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 7: سناریوی 7
این مثال، کاربرد مرحله 7 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT TOP (20) name,description FROM sys.dm_xe_objects WHERE object_type=N'event';
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 7 | خروجی یا پیام مرحله 7 متناسب با وضعیت جاری سرور | نتیجه مرحله 7 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 7: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 8: سناریوی 8
این مثال، کاربرد مرحله 8 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT N'fn_trace_getinfo' AS LegacyComponent,N'Extended Events' AS RecommendedTarget;
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 8 | خروجی یا پیام مرحله 8 متناسب با وضعیت جاری سرور | نتیجه مرحله 8 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 8: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 9: سناریوی 9
این مثال، کاربرد مرحله 9 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT SYSDATETIME() AS CaptureTime,COUNT(*) AS TraceCount FROM sys.traces;
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 9 | خروجی یا پیام مرحله 9 متناسب با وضعیت جاری سرور | نتیجه مرحله 9 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 9: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
مثال 10: سناریوی 10
این مثال، کاربرد مرحله 10 برای fn_trace_getinfo را در یک گردشکار کنترلشده نشان میدهد.
SELECT * FROM sys.fn_trace_getinfo(DEFAULT);
SELECT N'Review output and stop trace promptly' AS NextStep;
| مرحله | خروجی مورد انتظار | تفسیر |
|---|
| 10 | خروجی یا پیام مرحله 10 متناسب با وضعیت جاری سرور | نتیجه مرحله 10 برای fn_trace_getinfo با Baseline سنجیده شود. |
نکته مثال 10: نتیجه fn_trace_getinfo را با Scope، زمان نمونهبرداری و وضعیت قبل از اجرا مقایسه کنید؛ روی Production ابتدا مجوز، نام اشیا و برنامه بازگشت کنترل شود.
کاربردهای واقعی در پروژه
fn_trace_getinfo میتواند در Runbook پاسخ به رخداد، داشبورد ظرفیت، بررسی Deployment یا تحلیل پس از Incident قرار گیرد. خروجی همراه نام سرور، Database، زمان و اجراکننده ذخیره شود.
در آموزش عملی، ابتدا وضعیت پایه ثبت، سپس بار کاری کنترلشده اجرا و در پایان Snapshot دوم گرفته شود. تفاوت دو لحظه از حفظکردن Syntax ارزش بیشتری دارد.
Queryها در Source Control نگهداری و مقادیر SessionID، FileName، Threshold و Database به پارامتر تبدیل شوند تا اجرای اشتباه کاهش یابد.
هشدار مهم Production
SQL Trace و SQL Server Profiler منسوخ هستند؛ اجرای طولانی یا ثبت ستونهای زیاد روی Production سربار و حجم فایل ایجاد میکند.
اشتباهات رایج و روش اصلاح
- تفسیر یک Snapshot fn_trace_getinfo بهعنوان علت قطعی؛ دو نمونه زماندار و منبع دوم بگیرید.
- اجرای SELECT * در پایش دائمی؛ ستونها، TOP و Filter را محدود کنید.
- نادیدهگرفتن مجوز؛ حساب کماختیار را در محیط Test بررسی کنید.
- اقدام بدون Baseline؛ وضعیت قبل، معیار موفقیت و Rollback را ثبت کنید.
- تعمیم نتیجه Test به Production؛ اختلاف نسخه، Edition و بار همزمان را بسنجید.
Performance Considerations
هزینه fn_trace_getinfo از حجم داده، نرخ اجرا و سطح جزئیات ناشی میشود. Query مکمل را SARGable نگه دارید، از تبدیل تابعی ستون بزرگ در WHERE پرهیز کنید و Snapshot کوچک را به تکرار منبع پویا ترجیح دهید.
Execution Plan، IO و CPU Queryهای پایش بررسی شوند. برای فرمانهای Cache یا فایل، اثر پس از اجرا مانند Compile، IO سرد، Fragmentation و Autogrowth نیز اندازهگیری شود.
داده تجمعی بدون زمان Reset گمراهکننده است. اختلاف دو Snapshot و نرخ تغییر، معمولاً از مقدار مطلق برای تصمیم عملیاتی مفیدتر است.
Best Practices
- هدف fn_trace_getinfo را قابل سنجش بنویسید.
- نسخه، Scope و Permission را کنترل کنید.
- مشاهده را از تغییر جدا کنید.
- Snapshot زماندار ذخیره کنید.
- نتیجه را با منبع دوم تأیید کنید.
- اثر اقدام را با Baseline مقایسه و Runbook را اصلاح کنید.
تصویر سوم مسیر کمریسک و پرهزینه را برای fn_trace_getinfo بر اساس Extended Events، Overhead و امکان Rollback مقایسه میکند.
مزایا، محدودیتها و زمان نامناسب استفاده
| بُعد | ارزش | محدودیت |
|---|
| مزیت اصلی | پشتیبانی از سامانههای Legacy، تحلیل فایلهای Trace و طراحی مهاجرت کنترلشده به Extended Events. | نیازمند Context واقعی |
| سرعت تشخیص | دسترسی سریع به شواهد | Snapshot کوتاه ممکن است علت را پنهان کند |
| خودکارسازی | قابل استفاده در Script و Runbook | تکرار زیاد سربار یا نویز میسازد |
| زمان نامناسب | — | SQL Trace و SQL Server Profiler منسوخ هستند؛ اجرای طولانی یا ثبت ستونهای زیاد روی Production سربار و حجم فایل ایجاد میکند. |
سؤالات متداول
fn_trace_getinfo چه مسئلهای را حل میکند؟
برای پایش رخدادهای قدیمی و مهاجرت به Extended Events در Scope مشخص استفاده میشود و خروجی آن باید به تصمیم قابل سنجش منجر شود.
fn_trace_getinfo پیشنیاز یادگیری چیست؟
آشنایی با T-SQL، Session، Transaction و خواندن خروجیهای تشخیصی کافی است.
fn_trace_getinfo هزینه پنهان سازمانی چیست؟
زمان تحلیل، سربار نمونهبرداری و ریسک اقدام نادرست باید در طراحی Runbook دیده شود.
fn_trace_getinfo خروجی پروژه حرفهای چیست؟
Query نسخهبندیشده، Snapshot، معیار هشدار، Runbook و آموزش تیم بهرهبردار خروجی مناسب هستند.
fn_trace_getinfo با روش جایگزین چه تفاوتی دارد؟
Scope، ماندگاری داده، سربار، نسخه و قابلیت Rollback معیار مقایسه هستند.
fn_trace_getinfo چه زمانی مشاوره تخصصی لازم است؟
در Production، SLA سخت، داده حساس یا عملیات اثرگذار بر Cache و فایل، بازبینی متخصص ضروری است.
fn_trace_getinfo رایجترین خطا چیست؟
اجرای بدون Baseline و تفسیر یک Snapshot بهعنوان علت قطعی، خطای متداول است.
fn_trace_getinfo اثر Performance چگونه کنترل میشود؟
با TOP، Filter، نرخ نمونهبرداری، پنجره اجرا و مقایسه قبل و بعد کنترل میشود.
fn_trace_getinfo Best Practice اصلی چیست؟
ابتدا مشاهده کمهزینه، سپس اعتبارسنجی با منبع دوم و در پایان اقدام محدود انجام شود.
fn_trace_getinfo سازگاری نسخه چگونه بررسی میشود؟
مستندات همان Edition و نسخه نصبشده، بهویژه نام مجوزها و ستونهای DMV، کنترل شود.
سؤالات مصاحبه
Scope fn_trace_getinfo را چگونه توضیح میدهید؟
سطح Session، Database یا Server، زمان Reset و منبع Join را مشخص میکنم.
ریسک Production در fn_trace_getinfo چگونه کم میشود؟
Baseline، مجوز، پنجره اجرا، Scope محدود و Rollback از پیش تعریف میشوند.
خروجی fn_trace_getinfo چگونه به اقدام تبدیل میشود؟
نشانه با Query مکمل تأیید و اقدام کمریسک ابتدا در Test آزمایش میشود.
چه زمانی fn_trace_getinfo مناسب نیست؟
وقتی ابزار جدیدتر، سربار کمتر یا ماندگاری بهتر دارد یا SLA اجازه اقدام مستقیم نمیدهد.
چه متریکی کنار آن ثبت میکنید؟
CPU، IO، Duration، Page Count، SessionID یا وضعیت Transaction متناسب با موضوع ثبت میشود.
نتیجه گمراهکننده چگونه تشخیص داده میشود؟
با تکرار نمونهبرداری، کنترل Scope و مقایسه با Plan، Wait یا لاگ.
چکلیست نهایی
- هدف و آستانه موفقیت مشخص است.
- نسخه و مجوز بررسی شدهاند.
- نام Database، فایل یا Session کنترل شده است.
- Snapshot قبل از اجرا موجود است.
- Query محدود و قابل بازبینی است.
- Backup و Rollback برای تغییر وجود دارد.
- خروجی با منبع مستقل تأیید شده است.
- نتیجه در Source Control ثبت میشود.
خدمات برنامهنویسی و پایگاه داده
برنامهنویسی در اصفهان؛ قبول سفارشهای برنامهنویسی و پایگاه داده با شماره 09131253620، انجام پروژه، آموزش برنامهنویسی و آموزش SQL Server.
مجموعهای معتبر با سابقه فعالیت حرفهای از سال ۱۳۷۵ شمسی تاکنون در طراحی نرمافزار، پایگاه داده، سامانه تحت وب و راهکارهای سازمانی فعالیت میکند.
برای سفارش پروژههای برنامهنویسی و پایگاه داده با شماره 09131253620 تماس بگیرید.
ایتا، واتساپ و تماس مستقیم: +989131253620 — تماس با ما