راهنمای Intelligent Query Processing در SQL Server | مثال و Performance

راهنمای جامع قابلیت‌های پردازش هوشمند پرس‌وجو در SQL Server

توسط admin | گروه SQL Server | 1405/05/06

نظرات 0

راهنمای جامع قابلیت‌های پردازش هوشمند پرس‌وجو در SQL Server

IQP چیست و چرا یک کلید جادویی نیست؟

Intelligent Query Processing مجموعه‌ای از قابلیت‌های Optimizer و موتور اجرا است که تصمیم‌های Plan را به داده واقعی، تاریخچه اجرا و الگوی پارامتر نزدیک‌تر می‌کند. یک عضو نوع Join را در زمان اجرا انتخاب می‌کند، عضوی دیگر Memory Grant را اصلاح می‌کند و گروهی برای چندشکلی Plan یا کاهش هزینه Compile طراحی شده‌اند.

این مقاله نقشه تصمیم پانزده قابلیت را ارائه می‌کند، آن‌ها را به خانواده‌های منطقی تقسیم می‌کند و با جدول مقایسه و شش مثال ترکیبی نشان می‌دهد کدام قابلیت برای کدام علامت مناسب است. هر ردیف به مقاله مستقل و آماده انتشار همان موضوع لینک دارد.

مخاطب این راهنما DBA، Database Developer و تحلیلگر Performance است. پیش‌نیاز عملی، آشنایی با Actual Execution Plan، Statistics، Query Store و امکان آزمایش Compatibility Level خارج از Production است.

دسترسی سریع

  1. دسته‌بندی قابلیت‌ها
  2. جدول انتخاب سریع
  3. شش مثال ترکیبی
  4. Performance و استقرار
  5. سؤالات متداول

تعریف مجموعه و منطق مشترک

وجه مشترک IQP تبدیل بخشی از فرض ثابت Optimizer به تصمیم آگاه از اجرا است. با این حال، اثر اعضا یکسان نیست: برخی در همان Plan تصمیم می‌گیرند، برخی Feedback را میان اجراها نگه می‌دارند و برخی Dispatcher Plan، Query Variant یا Replay Script ایجاد می‌کنند.

انتخاب باید از علامت مسئله آغاز شود: Join نامناسب، Spill یا Overgrant، تخمین Cardinality، DOP نامتوازن، تخمین ضعیف MSTVF، هزینه Scalar UDF، نبود Batch Mode، نیاز به تقریب، Parameter Sniffing، Optional Predicate یا Compile Time زیاد.

نقشه مفهومی Intelligent Query Processing Featuresارتباط Adaptive Joins، Memory Grant Feedback، CE Feedback و PSP / OPPO در Intelligent Query Processing Features.Intelligent Query Processing FeaturesConcept Map + Readiness BarsAdaptive JoinsMemory Grant FeedbackCE FeedbackDOP FeedbackPSP / OPPOPlan ForcingAdaptive JoinsMemory Grant FeedbackCE FeedbackDOP FeedbackPSP / OPPO

این نقشه جایگاه Intelligent Query Processing Features را با محورهای Adaptive Joins، CE Feedback و PSP / OPPO نشان می‌دهد.

دسته‌بندی اجزا بر اساس نوع تصمیم

تصمیم در زمان اجرا

چرخه Feedback

تغییر شکل اجرا

چندپلنی و پایداری Plan

جریان اجرای Intelligent Query Processing Featuresمسیر ورودی تا خروجی Intelligent Query Processing Features با CE Feedback و PSP / OPPO.Intelligent Query Processing FeaturesExecution Flow + Runtime MetricsIntelligent Query Processing FeaturesAdaptive JoinsCE FeedbackPSP / OPPOQuery Store / OutputCompile: 55%Execute: 64%Observe: 73%Adapt: 82%

این جریان، مسیر Query از Adaptive Joins تا مشاهده PSP / OPPO را برای Intelligent Query Processing Features قابل پیگیری می‌کند.

جدول مقایسه و انتخاب سریع

موضوعکاربرد اصلینسخه و سازگاریلینک
Adaptive Joinsگزارش‌های پارامتری با Selectivity بسیار متغیرSQL Server 2017 / CL 140آموزش کامل
Batch Mode Adaptive Joinsانبار داده با فیلترهای کوچک و بزرگSQL Server 2017 / CL 140آموزش کامل
Memory Grant Feedbackگزارش‌های Sort و Aggregate با حجم نوسانیSQL Server 2017 / CL 140آموزش کامل
Persistent Memory Grant Feedbackسامانه‌های دارای Restart یا فشار Plan CacheSQL Server 2022 / CL 160آموزش کامل
Percentile Memory Grant Feedbackگزارش‌هایی با چند قله حجمیSQL Server 2022 / CL 160آموزش کامل
Cardinality Estimation Feedbackداده‌های دارای هم‌بستگی ستونیSQL Server 2022 / CL 160آموزش کامل
Degree of Parallelism Feedbackگزارش‌های موازی روی سرور پرتراکنشSQL Server 2022 / CL 160آموزش کامل
Interleaved Executionرویه‌های قدیمی مبتنی بر Multi-Statement TVFSQL Server 2017 / CL 140آموزش کامل
Table Variable Deferred Compilationرویه‌هایی با Table Variable چندصد یا چندهزار ردیفیSQL Server 2019 / CL 150آموزش کامل
Scalar UDF Inliningمحاسبات ردیف‌به‌ردیف قیمت و امتیازSQL Server 2019 / CL 150آموزش کامل
Batch Mode on Rowstoreگزارش‌های بزرگ روی جداول بدون ColumnstoreSQL Server 2019 / CL 150آموزش کامل
Approximate Query Processingداشبوردهای بزرگ که پاسخ سریع مهم‌تر از دقت مطلق استSQL Server 2019 و 2022 / CL 150آموزش کامل
Parameter Sensitive Plan Optimizationستون‌های دارای توزیع بسیار نامتوازنSQL Server 2022 / CL 160آموزش کامل
Optional Parameter Plan Optimizationصفحات جست‌وجو با فیلترهای اختیاریSQL Server 2025 / CL 170آموزش کامل
Optimized Plan ForcingQueryهای پیچیده با Compile Time بالاSQL Server 2022 / CL 160آموزش کامل

مثال‌های ترکیبی و قابل اجرا

مثال ترکیبی 1: ثبت Baseline

این سناریو چند عضو IQP را در یک فرایند کنترل‌شده به هم متصل می‌کند و خروجی آن برای Baseline یا تصمیم استقرار استفاده می‌شود.

SELECT @@VERSION SqlVersion; SELECT name,compatibility_level FROM sys.databases WHERE name=DB_NAME();
شاخصنتیجه نمونه
مرحلهثبت Baseline
هدفنسخه و CL ثبت می‌شود.

نکته فنی: همان Query و سیاست Cache را در مقایسه قبل و بعد حفظ کنید.

مثال ترکیبی 2: فعال‌سازی Query Store

این سناریو چند عضو IQP را در یک فرایند کنترل‌شده به هم متصل می‌کند و خروجی آن برای Baseline یا تصمیم استقرار استفاده می‌شود.

ALTER DATABASE CURRENT SET QUERY_STORE=ON; SELECT actual_state_desc,current_storage_size_mb FROM sys.database_query_store_options;
شاخصنتیجه نمونه
مرحلهفعال‌سازی Query Store
هدفمخزن Plan و Runtime آماده می‌شود.

نکته فنی: همان Query و سیاست Cache را در مقایسه قبل و بعد حفظ کنید.

مثال ترکیبی 3: بررسی Grant و Cardinality

این سناریو چند عضو IQP را در یک فرایند کنترل‌شده به هم متصل می‌کند و خروجی آن برای Baseline یا تصمیم استقرار استفاده می‌شود.

SET STATISTICS XML ON; SELECT object_id,COUNT_BIG(*) Cnt,MAX(name) MaxName FROM sys.all_objects GROUP BY object_id ORDER BY Cnt DESC; SET STATISTICS XML OFF;
شاخصنتیجه نمونه
مرحلهبررسی Grant و Cardinality
هدفMemoryGrantInfo و Actual Rows بررسی می‌شوند.

نکته فنی: همان Query و سیاست Cache را در مقایسه قبل و بعد حفظ کنید.

مثال ترکیبی 4: ساخت داده Skew برای PSP

این سناریو چند عضو IQP را در یک فرایند کنترل‌شده به هم متصل می‌کند و خروجی آن برای Baseline یا تصمیم استقرار استفاده می‌شود.

DROP TABLE IF EXISTS dbo.IQP_MainSkew; CREATE TABLE dbo.IQP_MainSkew(ID int IDENTITY PRIMARY KEY,CustomerID int); INSERT dbo.IQP_MainSkew(CustomerID) SELECT TOP (30000) CASE WHEN ABS(CHECKSUM(NEWID()))%100<80 THEN 1 ELSE 2+ABS(CHECKSUM(NEWID()))%500 END FROM sys.all_objects a CROSS JOIN sys.all_objects b; CREATE INDEX IX_IQP_MainSkew ON dbo.IQP_MainSkew(CustomerID);
شاخصنتیجه نمونه
مرحلهساخت داده Skew برای PSP
هدفمقادیر Hot و Cold ساخته می‌شوند.

نکته فنی: همان Query و سیاست Cache را در مقایسه قبل و بعد حفظ کنید.

مثال ترکیبی 5: مقایسه دقیق و تقریبی

این سناریو چند عضو IQP را در یک فرایند کنترل‌شده به هم متصل می‌کند و خروجی آن برای Baseline یا تصمیم استقرار استفاده می‌شود.

DROP TABLE IF EXISTS dbo.IQP_MainVisitors; CREATE TABLE dbo.IQP_MainVisitors(VisitorID bigint); INSERT dbo.IQP_MainVisitors SELECT TOP (80000) ABS(CHECKSUM(NEWID()))%25000 FROM sys.all_objects a CROSS JOIN sys.all_objects b; SELECT COUNT(DISTINCT VisitorID) ExactCount,APPROX_COUNT_DISTINCT(VisitorID) ApproxCount FROM dbo.IQP_MainVisitors;
شاخصنتیجه نمونه
مرحلهمقایسه دقیق و تقریبی
هدفخطای تقریب قابل سنجش می‌شود.

نکته فنی: همان Query و سیاست Cache را در مقایسه قبل و بعد حفظ کنید.

مثال ترکیبی 6: گزارش Query Store

این سناریو چند عضو IQP را در یک فرایند کنترل‌شده به هم متصل می‌کند و خروجی آن برای Baseline یا تصمیم استقرار استفاده می‌شود.

SELECT TOP (30) q.query_id,p.plan_id,p.is_forced_plan,rs.count_executions,rs.avg_duration,rs.avg_cpu_time FROM sys.query_store_query q JOIN sys.query_store_plan p ON p.query_id=q.query_id JOIN sys.query_store_runtime_stats rs ON rs.plan_id=p.plan_id ORDER BY rs.last_execution_time DESC;
شاخصنتیجه نمونه
مرحلهگزارش Query Store
هدفPlan و Runtime در یک خروجی دیده می‌شوند.

نکته فنی: همان Query و سیاست Cache را در مقایسه قبل و بعد حفظ کنید.

سناریوهای واقعی انتخاب قابلیت

در سامانه فروش، PSP برای مشتریان با اندازه متفاوت، OPPO برای فیلترهای اختیاری و Memory Grant Feedback برای گزارش‌های تجمعی به کار می‌روند. این قابلیت‌ها جایگزین یکدیگر نیستند؛ هر کدام علامت متفاوتی را هدف می‌گیرند.

در انبار داده، Batch Mode on Rowstore، Batch Mode Adaptive Join و Approximate Query Processing می‌توانند مسیر تحلیلی را تغییر دهند. انتخاب باید با دقت موردنیاز، نوع Operator و اندازه داده انجام شود.

در محیط دارای Query Store، CE Feedback، DOP Feedback، Persistent Memory Grant Feedback و Optimized Plan Forcing لایه مدیریتی عمیق‌تری می‌سازند؛ Query Store ناسالم یا Read Only این چرخه را ناقص می‌کند.

هشدار نسخه و Compatibility Level

وجود نام قابلیت در نسخه SQL Server به معنی فعال بودن آن در هر پایگاه نیست. Compatibility Level، Database Scoped Configuration، Build و Eligibility Query هم‌زمان تعیین‌کننده‌اند. تغییر سطح سازگاری باید با Regression Test و Rollback Plan مدیریت شود.

اشتباهات رایج

اشتباهپیامداصلاح
فعال‌سازی هم‌زمانمنبع تغییر نامشخصتغییر مرحله‌ای
نبود Baselineبهبود اثبات‌ناپذیرثبت CPU، IO و Plan
داده یکنواختپنهان‌شدن Adaptive behaviorSkew و NULL
پاک‌کردن Cacheحذف Feedbackسیاست ثابت
نادیده‌گرفتن Query Storeشواهد ناقصپایش state و فضا

Performance Considerations و برنامه استقرار

استقرار باید Query محور باشد. Top Queryها را از Query Store یا DMV انتخاب کنید، علامت مسئله را به خانواده Join، Grant، Cardinality، Parallelism، Compilation یا Parameter Sensitivity نگاشت کنید و فقط قابلیت مرتبط را آزمایش کنید.

  • Baseline را در بازه پرترافیک و کم‌ترافیک ثبت کنید.
  • صدک ۹۵ یا ۹۹ زمان پاسخ و Throughput را کنار میانگین بسنجید.
  • هر تغییر معیار توقف و Rollback داشته باشد.
  • پس از ارتقای Build، Forced Plan و Feedback پایدار بازبینی شود.
  • فضا و Cleanup Policy Query Store پایش شود.

Best Practices

  1. مسئله را با شواهد Plan تعریف کنید.
  2. قابلیت را در کوچک‌ترین Scope ممکن آزمایش کنید.
  3. Skew، NULL و حجم‌های متفاوت را پوشش دهید.
  4. CPU کل سرور و Concurrency را کنار زمان Query بسنجید.
  5. نسخه و Cumulative Update را در Change Record ثبت کنید.
  6. انتشار تدریجی و Monitoring پس از انتشار انجام دهید.
پنل تصمیم و کارایی Intelligent Query Processing Featuresمقایسه خطا، Best Path، CPU و IO برای Intelligent Query Processing Features.Intelligent Query Processing FeaturesDecision Grid + Before/After BenchmarkSignalCE FeedbackCommon ErrorMemory Grant FeedbackBest PathPSP / OPPOOutput ShapePlan ForcingCPUIOLatency

این پنل، Best Path و خطای رایج Intelligent Query Processing Features را کنار CPU، IO و Latency قرار می‌دهد.

سؤالات متداول

آیا IQP بدون تغییر کد کار می‌کند؟

بسیاری از اعضا بدون تغییر متن Query اثر می‌گذارند، اما نسخه، Compatibility Level و Eligibility شرط هستند.

کدام قابلیت را اول انتخاب کنیم؟

از علامت مسئله شروع کنید: Spill، Skew، Optional Predicate، UDF یا Compile Time.

آیا Query Store ضروری است؟

برای همه اعضا نه، اما برای Feedback پایدار، Variant، Forced Plan و تحلیل قبل و بعد بسیار مهم است.

آیا IQP جایگزین Index Tuning است؟

خیر؛ Index، Statistics و Query SARGable همچنان پایه کارایی هستند.

ارزش تجاری IQP چگونه سنجیده می‌شود؟

Tail Latency، Throughput، CPU، tempdb Spill و رخداد Regression را به SLA متصل کنید.

خروجی پروژه مشاوره IQP چیست؟

فهرست Query کاندید، Baseline، ماتریس مسئله-قابلیت، A/B و Rollback Plan.

رایج‌ترین خطای استقرار چیست؟

تغییر چند گزینه بدون Baseline و بدون امکان نسبت‌دادن نتیجه.

آیا ارتقای CL همیشه بهتر است؟

خیر؛ Planها ممکن است تغییر کنند و Regression Test ضروری است.

بهترین روش آزمایش چیست؟

محیط مشابه Production، داده Skew، پارامتر نماینده و ثبت چند معیار.

کدام نسخه پوشش بیشتری دارد؟

نسخه جدیدتر قابلیت بیشتری دارد؛ OPPO به Compatibility Level 170 وابسته است.

سؤالات مصاحبه

  1. تفاوت Feedback جاری و پایدار چیست؟
  2. چگونه مشکل Cardinality را از Memory Grant جدا می‌کنید؟
  3. Dispatcher Plan در PSP و OPPO چه نقشی دارد؟
  4. چرا Query Store برای IQP مهم است؟
  5. Rollback پس از تغییر Compatibility Level چگونه است؟
  6. تفاوت Adaptive Join و Batch Mode Adaptive Join چیست؟

چک‌لیست نهایی

  1. نسخه، Build و CL ثبت شد.
  2. Query Store سالم است.
  3. Queryهای کاندید اولویت‌بندی شدند.
  4. هر Query به قابلیت متناظر نگاشت شد.
  5. Skew و NULL آزمایش شد.
  6. A/B و معیار پذیرش تعریف شد.
  7. Rollback و مالک تغییر مشخص است.
  8. Monitoring پس از انتشار انجام می‌شود.

جمع‌بندی

IQP یک بسته ناهمگن است. انتخاب موفق از تشخیص علامت آغاز می‌شود و سپس فقط قابلیت متناظر با آزمایش قابل تکرار سنجیده می‌شود. فعال‌سازی همه گزینه‌ها بدون Baseline راهکار حرفه‌ای نیست.

برای ادامه، مقاله تخصصی هر عضو را از جدول انتخاب کنید و ده آزمایش آن را روی Query واقعی اجرا کنید. لینک‌های زیر به Slugهای قطعی همین فایل SQL متصل هستند.

خدمات برنامه‌نویسی و پایگاه داده

برنامه‌نویسی در اصفهان؛ قبول سفارش‌های برنامه‌نویسی و پایگاه داده: 09131253620.

انجام پروژه، آموزش برنامه‌نویسی و آموزش SQL Server توسط مجموعه‌ای معتبر با سابقه فعالیت حرفه‌ای از سال ۱۳۷۵ شمسی تاکنون.

برای سفارش پروژه، آموزش تخصصی، ایتا، واتساپ و تماس مستقیم با ما در ارتباط باشید.

تماس مستقیم با 09131253620

تماس با ما و ثبت درخواست

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر