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