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