این نقشه جایگاه Batch Mode on Rowstore را با محورهای Batch Mode، Vectorized Execution و CPU Efficiency نشان میدهد.
این جریان، مسیر Query از Batch Mode تا مشاهده CPU Efficiency را برای Batch Mode on Rowstore قابل پیگیری میکند.
مثالهای عملی از ساده تا پیشرفته
مثال 1: بررسی سطح سازگاری
پیش از تحلیل Batch Mode on Rowstore سطح سازگاری را ثبت میکنیم.
SELECT DB_NAME() DatabaseName,compatibility_level FROM sys.databases WHERE name=DB_NAME();
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Database | Current |
| Compatibility | 150 |
نکته کاربردی: سطح هدف این مقاله 150 است.
مثال 2: فعالسازی کنترلشده
تنظیم مرتبط با Batch Mode on Rowstore در محیط آزمایشی فعال میشود.
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ON_ROWSTORE = ON;
SELECT name,value FROM sys.database_scoped_configurations ORDER BY name;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Action | Enable |
| Scope | Database |
نکته کاربردی: Baseline پیش از تغییر را نگه دارید.
مثال 3: ساخت داده نمونه
دادهای متناسب با Batch Mode و Rowstore ساخته میشود.
DROP TABLE IF EXISTS dbo.IQP_BATCH_MODE_ON_ROWS;
CREATE TABLE dbo.IQP_BATCH_MODE_ON_ROWS(ID bigint IDENTITY PRIMARY KEY,GroupID int NOT NULL,Amount decimal(12,2) NOT NULL,Notes nvarchar(150) NULL);
INSERT dbo.IQP_BATCH_MODE_ON_ROWS(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_ON_ |
| Purpose | حالت دستهای روی Rowstore |
نکته کاربردی: حجم و Skew را شبیه Production تنظیم کنید.
مثال 4: اجرای سناریوی پایه
Query پایه برای مشاهده Vectorized Execution اجرا میشود.
DECLARE @GroupID int=7; SELECT GroupID,COUNT_BIG(*) Cnt,SUM(Amount) TotalAmount,MAX(Notes) SampleNote FROM dbo.IQP_BATCH_MODE_ON_ROWS WHERE GroupID=@GroupID GROUP BY GroupID;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Signal | Vectorized Execution |
| Expected | Inspect actual plan |
نکته کاربردی: Actual Plan را ذخیره کنید.
مثال 5: ثبت XML Plan
ویژگیهای Aggregate و CPU Efficiency در 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_ON_ROWS WHERE GroupID=@GroupID GROUP BY GroupID;
SET STATISTICS XML OFF;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Artifact | Actual XML Plan |
| Inspect | CPU Efficiency |
نکته کاربردی: Estimated Plan برای Feedback کافی نیست.
مثال 6: تکرار اجرا
برای شکلگیری تاریخچه Batch Mode on Rowstore چند اجرای متوالی انجام میشود.
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_ON_ROWS WHERE GroupID=@GroupID GROUP BY GroupID;
SET @i+=1; END;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Executions | 6 |
| Observation | Runtime evolution |
نکته کاربردی: بین اجراها Cache را بیدلیل پاک نکنید.
مثال 7: تحلیل Query Store
Runtime Stats و Planهای Batch Mode on Rowstore از 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_O%' ORDER BY rs.last_execution_time DESC;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Repository | Query Store |
| Metrics | CPU, IO, Duration |
نکته کاربردی: بازههای زمانی همسان را مقایسه کنید.
مثال 8: آزمون NULL و حالت مرزی
شاخه کمانتخاب یا NULL برای Batch Mode on Rowstore آزمایش میشود.
DECLARE @GroupID int=NULL; SELECT GroupID,SUM(Amount) TotalAmount FROM dbo.IQP_BATCH_MODE_ON_ROWS WHERE GroupID=@GroupID OR @GroupID IS NULL GROUP BY GroupID;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Case | NULL / Edge |
| Expected | No error |
نکته کاربردی: حالت مرزی را در Regression Test نگه دارید.
مثال 9: مقایسه A/B
اثر Batch Mode on Rowstore با خاموش و روشنکردن کنترلشده مقایسه میشود.
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ON_ROWSTORE = OFF;
DECLARE @GroupID int=7; SELECT GroupID,COUNT_BIG(*) Cnt,SUM(Amount) TotalAmount,MAX(Notes) SampleNote FROM dbo.IQP_BATCH_MODE_ON_ROWS WHERE GroupID=@GroupID GROUP BY GroupID;
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ON_ROWSTORE = ON;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| A | Feature OFF |
| B | Feature ON |
نکته کاربردی: در Production تغییر سراسری بدون Change Plan انجام ندهید.
مثال 10: پایش معیار پذیرش
CPU، IO و Duration برای پذیرش Batch Mode on Rowstore ثبت میشود.
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_ON_ROWS 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 on Rowstore را کنار CPU، IO و Latency قرار میدهد.
سؤالات متداول
Batch Mode on Rowstore چه مسئلهای را حل میکند؟
حالت دستهای روی Rowstore اجرای برداری را برای برخی Queryهای تحلیلی روی Rowstore ممکن میکند و برای گزارشهای بزرگ روی جداول بدون Columnstore مناسب است.
چگونه استفاده واقعی Batch Mode on Rowstore را تشخیص دهیم؟
Actual Plan، Query Store و شاخصهای Batch Mode و CPU Efficiency را پیش و پس از اجرا مقایسه کنید.
آیا Batch Mode on Rowstore برای هر سامانه تجاری مناسب است؟
خیر؛ Baseline، SLA، توزیع داده و ریسک Regression باید پیش از استقرار بررسی شوند.
هزینه ارزیابی Batch Mode on Rowstore چگونه برآورد میشود؟
تعداد Queryهای بحرانی، محیط تست، آمادگی Query Store و زمان Regression Test عوامل اصلی هستند.
تفاوت Batch Mode on Rowstore با Tuning دستی چیست؟
این قابلیت بخشی از تصمیم Optimizer را تطبیقی میکند، اما جایگزین Index، Statistics و Query صحیح نیست.
برای اجرای پروژه Batch Mode on Rowstore چه خدماتی لازم است؟
ممیزی Plan، طراحی Benchmark، اجرای A/B، آموزش تیم و سند Rollback خروجیهای کاربردی پروژه هستند.
رایجترین خطای Batch Mode on Rowstore چیست؟
انتظار نتیجه بدون بررسی Compatibility Level 150، Eligibility Query و شواهد Actual Plan رایجترین خطاست.
مهمترین معیار Performance در Batch Mode on Rowstore چیست؟
Duration، CPU، Logical Reads و تغییر Vectorized Execution باید همزمان تحلیل شوند.
Best Practice استقرار Batch Mode on Rowstore چیست؟
Pilot محدود، داده شبیه Production، معیار پذیرش روشن و Monitoring پس از انتشار بهترین مسیر است.
Batch Mode on Rowstore در کدام نسخه پشتیبانی میشود؟
مبنای این راهنما SQL Server 2019 و Compatibility Level 150 است؛ Build دقیق را نیز کنترل کنید.