تشير أحمال العمل المخصصة في SQL Server إلى الاستعلامات التي يتم تنفيذها بشكل غير متكرر أو مرة واحدة فقط.
على عكس الاستعلامات المتكررة التي تستفيد من قدرة SQL Server على إعادة استخدام خطط التنفيذ، يمكن أن تؤدي الاستعلامات المخصصة إلى عدم الكفاءة عندما يتعلق الأمر باستخدام الذاكرة وتخطيط إدارة ذاكرة التخزين المؤقت.
الالأمثل لأحمال العمل المخصصةتم تصميم الخيار خصيصًا لمعالجة أوجه القصور هذه.
كيف يعمل
عند التمكين،الأمثل لأحمال العمل المخصصةيعدل الخيار سلوك SQL Server في التخزين المؤقت لخطط التنفيذ للاستعلامات ذات الاستخدام الفردي. بدلاً من تخزين خطة التنفيذ الكاملة عند التنفيذ الأول، يقوم SQL Server بتخزين كعب روتين أو تمثيل مضغوط للخطة. يؤدي هذا الأسلوب إلى تقليل استهلاك الذاكرة بشكل كبير في البيئات التي تنتشر فيها الاستعلامات المخصصة.
معايير القرار للتمكين
ضغط الذاكرة
إذا كان الخادم الخاص بك يواجه ضغطًا على الذاكرة، فإن تمكين هذا الخيار يمكن أن يخفف بعض الضغط عن طريق تقليل أثر الذاكرة لذاكرة التخزين المؤقت للخطة.
طبيعة أعباء العمل
استخدم أدوات مراقبة الأداء وDMVs (طرق عرض الإدارة الديناميكية) مثل
sys.dm_exec_cached_plans
و
sys.dm_exec_query_stats
الأنظمة التي تحتوي على حجم كبير من الاستعلامات الفريدة التي تتم لمرة واحدة ستستفيد أكثر من غيرها. بالنسبة للأنظمة التي تنفذ بشكل أساسي مجموعة صغيرة من الاستعلامات المتكررة، قد تكون الفوائد أقل وضوحًا.
المزيد من القراءة:كيفية تقسيم سلسلة بشكل فعال باستخدام وظيفة STRING_SPLIT في خادم SQL
تحليل الأداء
لتحليل طبيعة أعباء العمل لديك وتأثير الاستعلامات المخصصة على نظامك.
تمكين الخيار:
-- Connect to your SQL Server instance DECLARE @Servername nvarchar(128) = 'YOUR_SERVER_NAME'; DECLARE @UserName nvarchar(50) = 'YOUR_USERNAME'; DECLARE @Password nvarchar(50) = 'YOUR_PASSWORD'; CONNECT @Servername, @UserName, @Password;
الآثار العملية
DECLARE @BeforeSize int; EXEC sys.dm_os_memory_clerks WITH OBJECT = 'plan cache' OUTPUT, size = @BeforeSize; PRINT 'Plan cache size before: ' + CAST(@BeforeSize AS nvarchar(10)) + ' KB';
DECLARE @AfterSize int; EXEC sys.dm_os_memory_clerks WITH OBJECT = 'plan cache' OUTPUT, size = @AfterSize; PRINT 'Plan cache size after: ' + CAST(@AfterSize AS nvarchar(10)) + ' KB'; DECLARE @Difference int = @AfterSize - @BeforeSize; PRINT 'Size difference: ' + CAST(@Difference AS nvarchar(10)) + ' KB';
استكشاف الأخطاء وإصلاحها والتحسين
اختبار أداء الاستعلام المخصص
ينفذ هذا الكود استعلامًا مخصصًا بسيطًا قبل وبعد تمكين خيار مقارنة الأداء:
DECLARE @StartTime datetime = GETDATE(); SELECT TOP 100 * FROM YourTable; DECLARE @EndTime datetime = GETDATE(); PRINT 'Execution time before: ' + CAST(DATEDIFF(ms, @StartTime, @EndTime) AS nvarchar(10)) + ' ms'; DECLARE @StartTime datetime = GETDATE(); SELECT TOP 100 * FROM YourTable; DECLARE @EndTime datetime = GETDATE(); PRINT 'Execution time after: ' + CAST(DATEDIFF(ms, @StartTime, @EndTime) AS nvarchar(10)) + ' ms';
على الرغم من أن هذا الخيار يمكن أن يحسن الأداء، إلا أنه يؤدي أيضًا إلى تعقيد تحليل خطط التنفيذ للاستعلامات المخصصة. نظرًا لأنه يتم تخزين كعب الخطة فقط بعد التنفيذ الأول، فإن التحليل التفصيلي يتطلب خطوات إضافية لالتقاط خطة التنفيذ الكاملة.
- استراتيجية التنفيذ
ضع في اعتبارك خصائص عبء العمل على الخادم الخاص بك قبل تمكين هذا الخيار. إنه ليس حلاً عالميًا ولكنه يمكن أن يكون فعالاً للغاية في السياق الصحيح.
- المراقبة والضبط
بعد التمكين، قم بمراقبة أداء الخادم الخاص بك وحجم ذاكرة التخزين المؤقت لخطتك. وينبغي أن تستند التعديلات إلى بيانات تجريبية وأهداف أداء محددة.
