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