این نقشه جایگاه Batch Mode Adaptive Joins را با محورهای Batch Mode، Nested Loops و Columnstore نشان میدهد.
این جریان، مسیر Query از Batch Mode تا مشاهده Columnstore را برای Batch Mode Adaptive Joins قابل پیگیری میکند.
مثالهای عملی از ساده تا پیشرفته
مثال 1: بررسی سطح سازگاری
پیش از تحلیل Batch Mode Adaptive Joins سطح سازگاری را ثبت میکنیم.
SELECT DB_NAME() DatabaseName,compatibility_level FROM sys.databases WHERE name=DB_NAME();
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Database | Current |
| Compatibility | 140 |
نکته کاربردی: سطح هدف این مقاله 140 است.
مثال 2: فعالسازی کنترلشده
تنظیم مرتبط با Batch Mode Adaptive Joins در محیط آزمایشی فعال میشود.
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ADAPTIVE_JOINS = ON;
SELECT name,value FROM sys.database_scoped_configurations ORDER BY name;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Action | Enable |
| Scope | Database |
نکته کاربردی: Baseline پیش از تغییر را نگه دارید.
مثال 3: ساخت داده نمونه
دادهای متناسب با Batch Mode و Hash Build ساخته میشود.
DROP TABLE IF EXISTS dbo.IQP_BATCH_MODE_ADAPTIV;
CREATE TABLE dbo.IQP_BATCH_MODE_ADAPTIV(ID bigint IDENTITY PRIMARY KEY,GroupID int NOT NULL,Amount decimal(12,2) NOT NULL,Notes nvarchar(150) NULL);
INSERT dbo.IQP_BATCH_MODE_ADAPTIV(GroupID,Amount,Notes)
SELECT TOP (50000) ABS(CHECKSUM(NEWID()))%200,1+ABS(CHECKSUM(NEWID()))%20000,N'داده '+CONVERT(nvarchar(20),ROW_NUMBER() OVER(ORDER BY (SELECT NULL)))
FROM sys.all_objects a CROSS JOIN sys.all_objects b;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Object | IQP_BATCH_MODE_ADA |
| Purpose | اتصال تطبیقی در حالت دستهای |
نکته کاربردی: حجم و Skew را شبیه Production تنظیم کنید.
مثال 4: اجرای سناریوی پایه
Query پایه برای مشاهده Nested Loops اجرا میشود.
DECLARE @GroupID int=7; SELECT GroupID,COUNT_BIG(*) Cnt,SUM(Amount) TotalAmount,MAX(Notes) SampleNote FROM dbo.IQP_BATCH_MODE_ADAPTIV WHERE GroupID=@GroupID GROUP BY GroupID;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Signal | Nested Loops |
| Expected | Inspect actual plan |
نکته کاربردی: Actual Plan را ذخیره کنید.
مثال 5: ثبت XML Plan
ویژگیهای Threshold و Columnstore در Plan بررسی میشوند.
SET STATISTICS XML ON;
DECLARE @GroupID int=7; SELECT GroupID,COUNT_BIG(*) Cnt,SUM(Amount) TotalAmount,MAX(Notes) SampleNote FROM dbo.IQP_BATCH_MODE_ADAPTIV WHERE GroupID=@GroupID GROUP BY GroupID;
SET STATISTICS XML OFF;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Artifact | Actual XML Plan |
| Inspect | Columnstore |
نکته کاربردی: Estimated Plan برای Feedback کافی نیست.
مثال 6: تکرار اجرا
برای شکلگیری تاریخچه Batch Mode Adaptive Joins چند اجرای متوالی انجام میشود.
DECLARE @i int=1; WHILE @i<=6 BEGIN
DECLARE @GroupID int=7; SELECT GroupID,COUNT_BIG(*) Cnt,SUM(Amount) TotalAmount,MAX(Notes) SampleNote FROM dbo.IQP_BATCH_MODE_ADAPTIV WHERE GroupID=@GroupID GROUP BY GroupID;
SET @i+=1; END;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Executions | 6 |
| Observation | Runtime evolution |
نکته کاربردی: بین اجراها Cache را بیدلیل پاک نکنید.
مثال 7: تحلیل Query Store
Runtime Stats و Planهای Batch Mode Adaptive Joins از Query Store خوانده میشوند.
ALTER DATABASE CURRENT SET QUERY_STORE=ON;
SELECT TOP (20) q.query_id,p.plan_id,p.is_forced_plan,rs.count_executions,rs.avg_duration,rs.avg_cpu_time,rs.avg_logical_io_reads
FROM sys.query_store_query_text qt JOIN sys.query_store_query q ON q.query_text_id=qt.query_text_id
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
WHERE qt.query_sql_text LIKE N'%IQP_BATCH_MODE_A%' ORDER BY rs.last_execution_time DESC;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Repository | Query Store |
| Metrics | CPU, IO, Duration |
نکته کاربردی: بازههای زمانی همسان را مقایسه کنید.
مثال 8: آزمون NULL و حالت مرزی
شاخه کمانتخاب یا NULL برای Batch Mode Adaptive Joins آزمایش میشود.
DECLARE @GroupID int=NULL; SELECT GroupID,SUM(Amount) TotalAmount FROM dbo.IQP_BATCH_MODE_ADAPTIV WHERE GroupID=@GroupID OR @GroupID IS NULL GROUP BY GroupID;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Case | NULL / Edge |
| Expected | No error |
نکته کاربردی: حالت مرزی را در Regression Test نگه دارید.
مثال 9: مقایسه A/B
اثر Batch Mode Adaptive Joins با خاموش و روشنکردن کنترلشده مقایسه میشود.
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ADAPTIVE_JOINS = OFF;
DECLARE @GroupID int=7; SELECT GroupID,COUNT_BIG(*) Cnt,SUM(Amount) TotalAmount,MAX(Notes) SampleNote FROM dbo.IQP_BATCH_MODE_ADAPTIV WHERE GroupID=@GroupID GROUP BY GroupID;
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ADAPTIVE_JOINS = ON;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| A | Feature OFF |
| B | Feature ON |
نکته کاربردی: در Production تغییر سراسری بدون Change Plan انجام ندهید.
مثال 10: پایش معیار پذیرش
CPU، IO و Duration برای پذیرش Batch Mode Adaptive Joins ثبت میشود.
SET STATISTICS IO ON; SET STATISTICS TIME ON;
DECLARE @GroupID int=7; SELECT GroupID,COUNT_BIG(*) Cnt,SUM(Amount) TotalAmount,MAX(Notes) SampleNote FROM dbo.IQP_BATCH_MODE_ADAPTIV WHERE GroupID=@GroupID GROUP BY GroupID;
SET STATISTICS TIME OFF; SET STATISTICS IO OFF;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Accept | Lower resource or stable plan |
| Rollback | Prior config |
نکته کاربردی: نتیجه را با SLA و Throughput کل سرور بسنجید.
این پنل، Best Path و خطای رایج Batch Mode Adaptive Joins را کنار CPU، IO و Latency قرار میدهد.
سؤالات متداول
Batch Mode Adaptive Joins چه مسئلهای را حل میکند؟
اتصال تطبیقی در حالت دستهای در بار تحلیلی میان Hash Join و Nested Loops بر اساس ردیف واقعی تصمیم میگیرد و برای انبار داده با فیلترهای کوچک و بزرگ مناسب است.
چگونه استفاده واقعی Batch Mode Adaptive Joins را تشخیص دهیم؟
Actual Plan، Query Store و شاخصهای Batch Mode و Columnstore را پیش و پس از اجرا مقایسه کنید.
آیا Batch Mode Adaptive Joins برای هر سامانه تجاری مناسب است؟
خیر؛ Baseline، SLA، توزیع داده و ریسک Regression باید پیش از استقرار بررسی شوند.
هزینه ارزیابی Batch Mode Adaptive Joins چگونه برآورد میشود؟
تعداد Queryهای بحرانی، محیط تست، آمادگی Query Store و زمان Regression Test عوامل اصلی هستند.
تفاوت Batch Mode Adaptive Joins با Tuning دستی چیست؟
این قابلیت بخشی از تصمیم Optimizer را تطبیقی میکند، اما جایگزین Index، Statistics و Query صحیح نیست.
برای اجرای پروژه Batch Mode Adaptive Joins چه خدماتی لازم است؟
ممیزی Plan، طراحی Benchmark، اجرای A/B، آموزش تیم و سند Rollback خروجیهای کاربردی پروژه هستند.
رایجترین خطای Batch Mode Adaptive Joins چیست؟
انتظار نتیجه بدون بررسی Compatibility Level 140، Eligibility Query و شواهد Actual Plan رایجترین خطاست.
مهمترین معیار Performance در Batch Mode Adaptive Joins چیست؟
Duration، CPU، Logical Reads و تغییر Nested Loops باید همزمان تحلیل شوند.
Best Practice استقرار Batch Mode Adaptive Joins چیست؟
Pilot محدود، داده شبیه Production، معیار پذیرش روشن و Monitoring پس از انتشار بهترین مسیر است.
Batch Mode Adaptive Joins در کدام نسخه پشتیبانی میشود؟
مبنای این راهنما SQL Server 2017 و Compatibility Level 140 است؛ Build دقیق را نیز کنترل کنید.