راهنمای جامع Plan Cache Commands و DMVs در SQL Server
مقدمه و دامنه این خانواده
راهنمای جامع Plan Cache Commands و DMVs در SQL Server یک نقشه جامع برای شناخت، مقایسه و انتخاب درست 13 موضوع مرتبط با Plan Cache Commands and DMVs است. اعضای این خانواده از ابزارهای مانیتورینگ و Configuration تا Commandهای عملیاتی را پوشش میدهند و هرکدام Scope، Permission و ریسک متفاوتی دارند.
این راهنما برای DBA، Database Developer و مهندس Performance نوشته شده است. پیشنیاز، آشنایی با SQL Server Engine، DMVs، Query Store، Plan Cache و اصول Change Management است.
پس از مطالعه میتوانید اعضای مجموعه را بر اساس هدف، خروجی، ریسک Production و مسیر Rollback دستهبندی کنید و برای هر موضوع به مقاله مستقل آن بروید.
دسترسی سریع
- تعریف خانواده و معماری
- دستهبندی اعضا
- جدول مقایسه تصمیممحور
- شش مثال ترکیبی
- سناریوهای واقعی و Performance
- FAQ، مصاحبه و چکلیست
تعریف مجموعه و جایگاه آن در SQL Server
این خانواده شامل 13 عضو است که در چرخه مشاهده State، تحلیل Evidence، اجرای Change و کنترل نتیجه استفاده میشوند. تصمیم درست زمانی شکل میگیرد که عضو مناسب با Scope مناسب انتخاب شود؛ برای مثال ابزار تشخیصی نباید بهجای اقدام اصلاحی و Command پاکسازی نباید بهجای Root Cause Analysis استفاده شود.
محورهای مشترک خانواده عبارتاند از cacheobjtype، objtype، usecounts، size_in_bytes، plan_handle، Plan Cache، total_worker_time، total_logical_reads. هر عضو فقط بخشی از این زنجیره را پوشش میدهد و ترکیب آنها باید بر اساس Runbook و Baseline انجام شود.
این تصویر جایگاه راهنمای جامع Plan Cache Commands و DMVs در SQL Server را میان اجزای مرتبط نشان میدهد و مشخص میکند cacheobjtype چگونه به objtype و usecounts متصل میشود.
دستهبندی و معرفی اعضای خانواده
sys.dm_exec_cached_plans
مشاهده Cache Entryهای Plan Cache و تحلیل نوع Object، اندازه Plan و تعداد استفاده مجدد
ریسک یا محدودیت اصلی: خواندن این DMV کمخطر است، اما تفسیر حجم Cache بدون درنظرگرفتن Memory Pressure میتواند نتیجه اشتباه ایجاد کند.
sys.dm_exec_query_stats
تحلیل آمار تجمعی Queryهای Cacheشده شامل CPU، Reads، Writes، Duration و Execution Count
ریسک یا محدودیت اصلی: آمار این DMV با Eviction یا Restart از بین میرود و Snapshot دائمی محسوب نمیشود.
sys.dm_exec_plan_attributes
استخراج Attributeهای یک Plan Handle مانند dbid، set_options و Cache Keyهای مؤثر بر Reuse
ریسک یا محدودیت اصلی: برای هر Plan باید با APPLY فراخوانی شود و بررسی تعداد زیاد Planها میتواند هزینه مانیتورینگ را افزایش دهد.
sys.dm_exec_cached_plan_dependent_objects
مشاهده Objectهای وابسته به یک Cached Plan و بررسی Cursor یا ساختارهای داخلی مرتبط
ریسک یا محدودیت اصلی: این DMV به Plan Handle معتبر وابسته است و روی نسخهها یا انواع Plan مختلف خروجی یکسانی ندارد.
sys.dm_os_memory_cache_counters
تحلیل Counterهای Memory Cache در سطح Instance و تشخیص رشد Cacheهای داخلی SQL Server
ریسک یا محدودیت اصلی: مقایسه مقادیر باید در بازه زمانی انجام شود؛ یک Snapshot منفرد برای تشخیص Memory Leak کافی نیست.
DBCC PROCCACHE
نمایش Summary مربوط به Procedure Cache و توزیع Cache بر اساس نوع Plan
ریسک یا محدودیت اصلی: فرمان تشخیصی است، اما خروجی آن محدودتر از DMVs جدید است و برای تحلیل عمیق باید با DMVها تکمیل شود.
DBCC FREEPROCCACHE
پاکسازی کل Plan Cache برای Test کنترلشده و بررسی اثر Compile مجدد Queryها
ریسک یا محدودیت اصلی: اجرای سراسری روی Production میتواند موج Compile و افزایش CPU ایجاد کند؛ فقط با Change Plan و Scope روشن اجرا شود.
DBCC FREEPROCCACHE(plan_handle)
حذف هدفمند یک Plan مشخص از Cache با استفاده از plan_handle
ریسک یا محدودیت اصلی: Handle باید دقیق و متعلق به همان Instance باشد؛ پس از Eviction ممکن است فوراً نامعتبر شود.
DBCC FREEPROCCACHE(sql_handle)
حذف Planهای مرتبط با یک sql_handle برای Recompile هدفمند Batch
ریسک یا محدودیت اصلی: sql_handle ممکن است چند Statement یا Plan مرتبط را پوشش دهد؛ Scope اثر باید پیش از اجرا بررسی شود.
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
پاکسازی Procedure Cache فقط برای Database جاری یا Database مشخص بدون اثر مستقیم بر سایر Databaseها
ریسک یا محدودیت اصلی: با وجود Scope محدودتر، باز هم Compile مجدد Queryهای همان Database میتواند CPU و Latency را افزایش دهد.
sp_recompile
علامتگذاری Stored Procedure، Trigger یا Table برای Compile مجدد در اجرای بعدی
ریسک یا محدودیت اصلی: استفاده مکرر میتواند Compile Overhead ایجاد کند و جایگزین رفع Root Cause نیست.
Stored Procedure WITH RECOMPILE
ساخت Stored Procedure با گزینه WITH RECOMPILE برای تولید Plan جدید در هر اجرا
ریسک یا محدودیت اصلی: برای Procedureهای پرتکرار هزینه Compile ممکن است از مزیت Plan اختصاصی بیشتر شود.
EXECUTE ... WITH RECOMPILE
اجرای موردی Stored Procedure با WITH RECOMPILE بدون تغییر دائمی تعریف Procedure
ریسک یا محدودیت اصلی: این روش باید برای مورد خاص استفاده شود و اگر دائماً لازم است طراحی Query یا Plan Strategy باید بازنگری شود.
جدول مقایسه تصمیممحور
| موضوع یا Command | کاربرد اصلی | خروجی یا نکته مهم | مسیر آموزش |
|---|
| sys.dm_exec_cached_plans | مشاهده Cache Entryهای Plan Cache و تحلیل نوع Object، اندازه Plan و تعداد استفاده مجدد | cacheobjtype | مقاله مستقل |
| sys.dm_exec_query_stats | تحلیل آمار تجمعی Queryهای Cacheشده شامل CPU، Reads، Writes، Duration و Execution Count | total_worker_time | مقاله مستقل |
| sys.dm_exec_plan_attributes | استخراج Attributeهای یک Plan Handle مانند dbid، set_options و Cache Keyهای مؤثر بر Reuse | plan_handle | مقاله مستقل |
| sys.dm_exec_cached_plan_dependent_objects | مشاهده Objectهای وابسته به یک Cached Plan و بررسی Cursor یا ساختارهای داخلی مرتبط | plan_handle | مقاله مستقل |
| sys.dm_os_memory_cache_counters | تحلیل Counterهای Memory Cache در سطح Instance و تشخیص رشد Cacheهای داخلی SQL Server | name | مقاله مستقل |
| DBCC PROCCACHE | نمایش Summary مربوط به Procedure Cache و توزیع Cache بر اساس نوع Plan | DBCC PROCCACHE | مقاله مستقل |
| DBCC FREEPROCCACHE | پاکسازی کل Plan Cache برای Test کنترلشده و بررسی اثر Compile مجدد Queryها | DBCC FREEPROCCACHE | مقاله مستقل |
| DBCC FREEPROCCACHE(plan_handle) | حذف هدفمند یک Plan مشخص از Cache با استفاده از plan_handle | plan_handle | مقاله مستقل |
| DBCC FREEPROCCACHE(sql_handle) | حذف Planهای مرتبط با یک sql_handle برای Recompile هدفمند Batch | sql_handle | مقاله مستقل |
| ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE | پاکسازی Procedure Cache فقط برای Database جاری یا Database مشخص بدون اثر مستقیم بر سایر Databaseها | DATABASE SCOPED CONFIGURATION | مقاله مستقل |
| sp_recompile | علامتگذاری Stored Procedure، Trigger یا Table برای Compile مجدد در اجرای بعدی | sp_recompile | مقاله مستقل |
| Stored Procedure WITH RECOMPILE | ساخت Stored Procedure با گزینه WITH RECOMPILE برای تولید Plan جدید در هر اجرا | WITH RECOMPILE | مقاله مستقل |
| EXECUTE ... WITH RECOMPILE | اجرای موردی Stored Procedure با WITH RECOMPILE بدون تغییر دائمی تعریف Procedure | EXECUTE WITH RECOMPILE | مقاله مستقل |
منطق انتخاب و گردشکار خانواده
گردشکار پیشنهادی با Capture State شروع میشود، سپس Evidence در بازه زمانی تحلیل، Change با Scope محدود اجرا و نتیجه با Metricهای Before/After کنترل میشود. اگر نتیجه نامطلوب بود، Rollback یا توقف مرحله بعد باید بدون تأخیر انجام شود.
در این خانواده، تفاوت میان Desired State و Actual State مهم است. وجود Configuration بهتنهایی موفقیت را ثابت نمیکند؛ Engine ممکن است بهدلیل Storage، Permission، Compile Pressure یا محدودیت نسخه به State دیگری برود.
این جریان، مسیر واقعی از ورودی و State اولیه تا نتیجه قابلمشاهده در راهنمای جامع Plan Cache Commands و DMVs در SQL Server را نمایش میدهد؛ نقاط کنترل cacheobjtype، objtype و size_in_bytes در آن برجسته شدهاند.
مثالهای ترکیبی خانواده
مثال ترکیبی 1: اندازه Plan Cache
این مثال ترکیبی نشان میدهد اعضای خانواده چگونه برای سناریوی اندازه Plan Cache کنار هم قرار میگیرند.
SELECT COUNT_BIG(*) AS cached_plans, SUM(CONVERT(bigint,size_in_bytes))/1024 AS cache_kb FROM sys.dm_exec_cached_plans;
| خروجی | تفسیر |
|---|
| مرحله | اندازه Plan Cache |
| خروجی | sys.dm_exec_cached_plans |
نکته فنی: خروجی را در Repository زماندار ذخیره و با SLA و Baseline مقایسه کنید.
مثال ترکیبی 2: Top CPU Query
این مثال ترکیبی نشان میدهد اعضای خانواده چگونه برای سناریوی Top CPU Query کنار هم قرار میگیرند.
SELECT TOP (10) qs.total_worker_time, qs.execution_count, st.text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st ORDER BY qs.total_worker_time DESC;
| خروجی | تفسیر |
|---|
| مرحله | Top CPU Query |
| خروجی | sys.dm_exec_query_stats |
نکته فنی: خروجی را در Repository زماندار ذخیره و با SLA و Baseline مقایسه کنید.
مثال ترکیبی 3: Plan Attributes
این مثال ترکیبی نشان میدهد اعضای خانواده چگونه برای سناریوی Plan Attributes کنار هم قرار میگیرند.
SELECT TOP (20) cp.plan_handle, pa.attribute, pa.value FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_plan_attributes(cp.plan_handle) AS pa WHERE pa.is_cache_key = 1;
| خروجی | تفسیر |
|---|
| مرحله | Plan Attributes |
| خروجی | sys.dm_exec_plan_attributes |
نکته فنی: خروجی را در Repository زماندار ذخیره و با SLA و Baseline مقایسه کنید.
مثال ترکیبی 4: Memory Cache Counters
این مثال ترکیبی نشان میدهد اعضای خانواده چگونه برای سناریوی Memory Cache Counters کنار هم قرار میگیرند.
SELECT name, type, pages_kb, entries_count FROM sys.dm_os_memory_cache_counters ORDER BY pages_kb DESC;
| خروجی | تفسیر |
|---|
| مرحله | Memory Cache Counters |
| خروجی | sys.dm_exec_cached_plan_dependent_objects |
نکته فنی: خروجی را در Repository زماندار ذخیره و با SLA و Baseline مقایسه کنید.
مثال ترکیبی 5: Procedure Cache Summary
این مثال ترکیبی نشان میدهد اعضای خانواده چگونه برای سناریوی Procedure Cache Summary کنار هم قرار میگیرند.
DBCC PROCCACHE WITH NO_INFOMSGS;
| خروجی | تفسیر |
|---|
| مرحله | Procedure Cache Summary |
| خروجی | sys.dm_os_memory_cache_counters |
نکته فنی: خروجی را در Repository زماندار ذخیره و با SLA و Baseline مقایسه کنید.
مثال ترکیبی 6: Recompile هدفمند
این مثال ترکیبی نشان میدهد اعضای خانواده چگونه برای سناریوی Recompile هدفمند کنار هم قرار میگیرند.
EXEC sys.sp_recompile N'dbo.ProcedureName';
| خروجی | تفسیر |
|---|
| مرحله | Recompile هدفمند |
| خروجی | DBCC PROCCACHE |
نکته فنی: خروجی را در Repository زماندار ذخیره و با SLA و Baseline مقایسه کنید.
سناریوهای واقعی در محیط سازمانی
در Incident Performance، تیم ابتدا باید زمان شروع، Databaseهای درگیر، Queryهای غالب و تغییرات اخیر را مشخص کند. سپس عضو مناسب این خانواده برای مشاهده State انتخاب میشود. اجرای Command تغییردهنده پیش از ثبت Evidence، امکان Root Cause Analysis را کاهش میدهد.
برای Capacity Planning، Snapshotهای زماندار از Counterها، Query Store و Cache جمعآوری میشود. Trendهای هفتگی و ماهانه باید کنار Release Calendar و Peak Load قرار بگیرند تا رشد طبیعی از Regression جدا شود.
در Change Window، Owner فنی باید معیار موفقیت، Threshold توقف، زمان مشاهده و دستور Rollback را بنویسد. این ساختار خطای انسانی را کم میکند و انتقال دانش میان شیفتها را سادهتر میسازد.
هشدار مهم خانواده
بعضی اعضای Plan Cache Commands and DMVs فقط تشخیصیاند و بعضی State یا Cache را تغییر میدهند. اجرای مورد تغییردهنده روی Production بدون Baseline، Approval و Monitoring میتواند CPU، I/O یا Latency را افزایش دهد.
اشتباهات رایج
- یکساندانستن Scope همه اعضای خانواده؛ بعضی Database-level و بعضی Instance-level هستند.
- اجرای Command پاکسازی برای هر مشکل Performance بدون اثبات Plan یا Cache Root Cause.
- نادیدهگرفتن Restart، Eviction، Cleanup و Reset Condition در تحلیل Counterها.
- گرفتن Snapshot بدون Timestamp، Login، Version و Database Context.
- تکرار Change موفق قبلی روی Workload جدید بدون بازآزمایی.
Performance Considerations
مانیتورینگ پرتکرار با خروجی بزرگ میتواند خود Overhead بسازد. Queryهای Collector باید ستونهای ضروری، Filter روشن و Interval متناسب داشته باشند. Changeهای Cache یا Configuration نیز باید Compile، Memory، I/O و Latency را همزمان پایش کنند.
برای Repository داخلی، Partitioning یا Retention مناسب، Index روی زمان Capture و شناسههای Query یا Plan و Compression میتواند هزینه نگهداری History را کنترل کند. Retention بسیار کوتاه Baseline را از بین میبرد و Retention بسیار بلند بدون Capacity Plan Storage را افزایش میدهد.
Best Practices خانواده
- هر عضو را بر اساس TopicType و Scope مستند کنید.
- Diagnostic Query را از Change Command جدا نگه دارید.
- Baseline و معیار موفقیت را پیش از اجرا ثبت کنید.
- برای Production از Canary، Change Window و Threshold توقف استفاده کنید.
- دادههای تاریخی را با Reset Condition و Version تفسیر کنید.
- پس از Incident، Runbook را با Evidence واقعی بهروزرسانی کنید.
این پنل تصمیم نشان میدهد در سناریوی راهنمای جامع Plan Cache Commands و DMVs در SQL Server چه زمانی مسیر پیشنهادی انتخاب شود، کجا Overhead یا ریسک افزایش مییابد و چگونه cacheobjtype با plan_handle سنجیده شود.
سؤالات متداول
راهنمای جامع Plan Cache Commands و DMVs در SQL Server دقیقاً چه مسئلهای را حل میکند؟
مسئله اصلی، شناخت، مقایسه و انتخاب درست 13 موضوع مرتبط با Plan Cache Commands and DMVs است. ارزش واقعی زمانی ایجاد میشود که خروجی با Baseline و Context درست تفسیر شود.
برای شروع کار با راهنمای جامع Plan Cache Commands و DMVs در SQL Server چه پیشنیازی لازم است؟
دسترسی مناسب، شناخت Scope، ثبت State اولیه و آشنایی با cacheobjtype و objtype ضروری است.
آیا استفاده از راهنمای جامع Plan Cache Commands و DMVs در SQL Server هزینه زیرساخت را کاهش میدهد؟
در صورت استفاده هدفمند، میتواند هزینه ناشی از CPU، I/O، Incident و زمان عیبیابی را کاهش دهد؛ نتیجه باید با Metric مالی و فنی سنجیده شود.
این موضوع برای پروژههای سازمانی چه ارزشی دارد؟
در پروژه سازمانی، استانداردسازی cacheobjtype و usecounts باعث Audit بهتر، تصمیم سریعتر و کاهش ریسک Change میشود.
راهنمای جامع Plan Cache Commands و DMVs در SQL Server با روشهای جایگزین چه تفاوتی دارد؟
تفاوت اصلی در Scope، میزان جزئیات، اثر عملیاتی و قابلیت بازگشت است؛ انتخاب باید بر اساس سناریو باشد نه محبوبیت ابزار.
برای پیادهسازی حرفهای راهنمای جامع Plan Cache Commands و DMVs در SQL Server میتوان از خدمات تخصصی استفاده کرد؟
بله، آموزش، مشاوره، طراحی Runbook و اجرای پروژه SQL Server میتواند متناسب با Workload و محدودیت سازمان انجام شود.
رایجترین خطا در استفاده از راهنمای جامع Plan Cache Commands و DMVs در SQL Server چیست؟
رایجترین خطا، اقدام بدون Baseline و تفسیر جداگانه cacheobjtype بدون توجه به size_in_bytes است.
راهنمای جامع Plan Cache Commands و DMVs در SQL Server چه اثری بر Performance دارد؟
اثر به نرخ اجرا، Scope و Workload وابسته است. CPU، Logical Reads، Compile، Blocking و Latency باید همزمان بررسی شوند.
Best Practice اصلی برای راهنمای جامع Plan Cache Commands و DMVs در SQL Server چیست؟
با Scope کوچک شروع کنید، State را ثبت کنید، معیار موفقیت تعریف کنید و پس از تغییر، objtype و plan_handle را دوباره اندازه بگیرید.
آیا راهنمای جامع Plan Cache Commands و DMVs در SQL Server در همه نسخههای SQL Server یکسان است؟
خیر. Availability گزینهها، Permissionها، ستونها و رفتار ممکن است با Version، Edition و Compatibility Level تفاوت داشته باشد؛ محیط هدف را مستقیماً بررسی کنید.
سؤالات مصاحبه
- چگونه Scope و Reset Condition مربوط به راهنمای جامع Plan Cache Commands و DMVs در SQL Server را توضیح میدهید؟
- برای اندازهگیری اثر راهنمای جامع Plan Cache Commands و DMVs در SQL Server چه Baseline و Metricهایی انتخاب میکنید؟
- تفاوت Diagnostic Action و Change Action در این موضوع چیست؟
- اگر cacheobjtype بهتر ولی objtype بدتر شود، تصمیم شما چیست؟
- چه Rollback Plan و Audit Trail برای استفاده از راهنمای جامع Plan Cache Commands و DMVs در SQL Server تعریف میکنید؟
چکلیست نهایی خانواده
- تعداد 13 عضو خانواده و Scope هرکدام را تأیید کنید.
- Permission و Version محیط هدف را بررسی کنید.
- Collector Query و Change Command را در Runbook جدا کنید.
- Baseline CPU، I/O، Latency، Compile و Blocking را ذخیره کنید.
- Change را مرحلهای اجرا و State واقعی را دوباره بخوانید.
- مقصد هر مقاله مستقل را برای مطالعه جزئیات مشخص کنید.
- نتیجه و Rollback را در Ticket ثبت کنید.
جمعبندی
راهنمای جامع Plan Cache Commands و DMVs در SQL Server زمانی بیشترین ارزش را دارد که اعضای آن بهعنوان یک Workflow دیده شوند، نه مجموعهای از Commandهای جدا. انتخاب عضو مناسب، ثبت Evidence و کنترل اثر، سه ستون اصلی تصمیم درست هستند.
برای ادامه، مقاله مستقل هر عضو را از بخش معرفی مطالعه کنید و فقط Query یا Command متناسب با Scope و ریسک محیط خود را وارد Runbook کنید.
خدمات برنامهنویسی و پایگاه داده
برنامهنویسی در اصفهان؛ قبول سفارشهای برنامهنویسی و پایگاه داده با شماره 09131253620.
انجام پروژه، آموزش برنامهنویسی و آموزش SQL Server توسط مجموعهای معتبر با سابقه فعالیت حرفهای از سال ۱۳۷۵ شمسی تاکنون.
برای سفارش پروژههای برنامهنویسی، پایگاه داده، سیستمهای تحت وب و راهکارهای نرمافزاری با 09131253620 تماس بگیرید؛ ایتا، واتساپ و تماس مستقیم در دسترس است.
تماس با ما