این نقشه جایگاه Scalar UDF Inlining را با محورهای Scalar UDF، Relational Expression و Parallelism نشان میدهد.
این جریان، مسیر Query از Scalar UDF تا مشاهده Parallelism را برای Scalar UDF Inlining قابل پیگیری میکند.
مثالهای عملی از ساده تا پیشرفته
مثال 1: بررسی سطح سازگاری
پیش از تحلیل Scalar UDF Inlining سطح سازگاری را ثبت میکنیم.
SELECT DB_NAME() DatabaseName,compatibility_level FROM sys.databases WHERE name=DB_NAME();
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Database | Current |
| Compatibility | 150 |
نکته کاربردی: سطح هدف این مقاله 150 است.
مثال 2: فعالسازی کنترلشده
تنظیم مرتبط با Scalar UDF Inlining در محیط آزمایشی فعال میشود.
ALTER DATABASE SCOPED CONFIGURATION SET TSQL_SCALAR_UDF_INLINING = ON;
SELECT name,value FROM sys.database_scoped_configurations ORDER BY name;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Action | Enable |
| Scope | Database |
نکته کاربردی: Baseline پیش از تغییر را نگه دارید.
مثال 3: ساخت داده نمونه
دادهای متناسب با Scalar UDF و Inlining ساخته میشود.
CREATE OR ALTER FUNCTION dbo.IQP_Discount(@Amount decimal(12,2),@Rate decimal(5,4)) RETURNS decimal(12,2) AS BEGIN RETURN @Amount*(1-ISNULL(@Rate,0)); END;
DROP TABLE IF EXISTS dbo.IQP_UDF_Sales; CREATE TABLE dbo.IQP_UDF_Sales(ID int IDENTITY PRIMARY KEY,Amount decimal(12,2),Rate decimal(5,4));
INSERT dbo.IQP_UDF_Sales(Amount,Rate) SELECT TOP (30000) 10+ABS(CHECKSUM(NEWID()))%10000,(ABS(CHECKSUM(NEWID()))%30)/100.0 FROM sys.all_objects a CROSS JOIN sys.all_objects b;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Object | IQP_SCALAR_UDF_INL |
| Purpose | درونخطیسازی تابع اسکالر |
نکته کاربردی: حجم و Skew را شبیه Production تنظیم کنید.
مثال 4: اجرای سناریوی پایه
Query پایه برای مشاهده Relational Expression اجرا میشود.
SELECT TOP (1000) ID,dbo.IQP_Discount(Amount,Rate) NetAmount FROM dbo.IQP_UDF_Sales ORDER BY ID;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Signal | Relational Expression |
| Expected | Inspect actual plan |
نکته کاربردی: Actual Plan را ذخیره کنید.
مثال 5: ثبت XML Plan
ویژگیهای Context Switch و Parallelism در Plan بررسی میشوند.
SET STATISTICS XML ON;
SELECT TOP (1000) ID,dbo.IQP_Discount(Amount,Rate) NetAmount FROM dbo.IQP_UDF_Sales ORDER BY ID;
SET STATISTICS XML OFF;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Artifact | Actual XML Plan |
| Inspect | Parallelism |
نکته کاربردی: Estimated Plan برای Feedback کافی نیست.
مثال 6: تکرار اجرا
برای شکلگیری تاریخچه Scalar UDF Inlining چند اجرای متوالی انجام میشود.
DECLARE @i int=1; WHILE @i<=6 BEGIN
SELECT TOP (1000) ID,dbo.IQP_Discount(Amount,Rate) NetAmount FROM dbo.IQP_UDF_Sales ORDER BY ID;
SET @i+=1; END;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Executions | 6 |
| Observation | Runtime evolution |
نکته کاربردی: بین اجراها Cache را بیدلیل پاک نکنید.
مثال 7: تحلیل Query Store
Runtime Stats و Planهای Scalar UDF Inlining از 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_SCALAR_UDF_I%' ORDER BY rs.last_execution_time DESC;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Repository | Query Store |
| Metrics | CPU, IO, Duration |
نکته کاربردی: بازههای زمانی همسان را مقایسه کنید.
مثال 8: آزمون NULL و حالت مرزی
شاخه کمانتخاب یا NULL برای Scalar UDF Inlining آزمایش میشود.
SELECT dbo.IQP_Discount(NULL,.1) NullAmount,dbo.IQP_Discount(100,NULL) NullRate;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Case | NULL / Edge |
| Expected | No error |
نکته کاربردی: حالت مرزی را در Regression Test نگه دارید.
مثال 9: مقایسه A/B
اثر Scalar UDF Inlining با خاموش و روشنکردن کنترلشده مقایسه میشود.
ALTER DATABASE SCOPED CONFIGURATION SET TSQL_SCALAR_UDF_INLINING = OFF;
SELECT TOP (1000) ID,dbo.IQP_Discount(Amount,Rate) NetAmount FROM dbo.IQP_UDF_Sales ORDER BY ID;
ALTER DATABASE SCOPED CONFIGURATION SET TSQL_SCALAR_UDF_INLINING = ON;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| A | Feature OFF |
| B | Feature ON |
نکته کاربردی: در Production تغییر سراسری بدون Change Plan انجام ندهید.
مثال 10: پایش معیار پذیرش
CPU، IO و Duration برای پذیرش Scalar UDF Inlining ثبت میشود.
SET STATISTICS IO ON; SET STATISTICS TIME ON;
SELECT TOP (1000) ID,dbo.IQP_Discount(Amount,Rate) NetAmount FROM dbo.IQP_UDF_Sales ORDER BY ID;
SET STATISTICS TIME OFF; SET STATISTICS IO OFF;
| خروجی یا شاخص | نمونه نتیجه |
|---|
| Accept | Lower resource or stable plan |
| Rollback | Prior config |
نکته کاربردی: نتیجه را با SLA و Throughput کل سرور بسنجید.
این پنل، Best Path و خطای رایج Scalar UDF Inlining را کنار CPU، IO و Latency قرار میدهد.
سؤالات متداول
Scalar UDF Inlining چه مسئلهای را حل میکند؟
درونخطیسازی تابع اسکالر بدنه UDF واجد شرایط را به عبارت رابطهای Query تبدیل میکند و برای محاسبات ردیفبهردیف قیمت و امتیاز مناسب است.
چگونه استفاده واقعی Scalar UDF Inlining را تشخیص دهیم؟
Actual Plan، Query Store و شاخصهای Scalar UDF و Parallelism را پیش و پس از اجرا مقایسه کنید.
آیا Scalar UDF Inlining برای هر سامانه تجاری مناسب است؟
خیر؛ Baseline، SLA، توزیع داده و ریسک Regression باید پیش از استقرار بررسی شوند.
هزینه ارزیابی Scalar UDF Inlining چگونه برآورد میشود؟
تعداد Queryهای بحرانی، محیط تست، آمادگی Query Store و زمان Regression Test عوامل اصلی هستند.
تفاوت Scalar UDF Inlining با Tuning دستی چیست؟
این قابلیت بخشی از تصمیم Optimizer را تطبیقی میکند، اما جایگزین Index، Statistics و Query صحیح نیست.
برای اجرای پروژه Scalar UDF Inlining چه خدماتی لازم است؟
ممیزی Plan، طراحی Benchmark، اجرای A/B، آموزش تیم و سند Rollback خروجیهای کاربردی پروژه هستند.
رایجترین خطای Scalar UDF Inlining چیست؟
انتظار نتیجه بدون بررسی Compatibility Level 150، Eligibility Query و شواهد Actual Plan رایجترین خطاست.
مهمترین معیار Performance در Scalar UDF Inlining چیست؟
Duration، CPU، Logical Reads و تغییر Relational Expression باید همزمان تحلیل شوند.
Best Practice استقرار Scalar UDF Inlining چیست؟
Pilot محدود، داده شبیه Production، معیار پذیرش روشن و Monitoring پس از انتشار بهترین مسیر است.
Scalar UDF Inlining در کدام نسخه پشتیبانی میشود؟
مبنای این راهنما SQL Server 2019 و Compatibility Level 150 است؛ Build دقیق را نیز کنترل کنید.