تشخيص واستكشاف مشكلات الاستخدام العالي لوحدة المعالجة المركزية في Azure SQL Database وإصلاحها
ينطبق على: Azure SQL Database
Azure SQL Database توفر أدوات مضمنة لتحديد أسباب الاستخدام العالي لوحدة المعالجة المركزية وتحسين أداء حمل العمل. يمكنك استخدام هذه الأدوات لاستكشاف مشكلات الاستخدام العالي لوحدة المعالجة المركزية أثناء حدوثه، أو بشكل تفاعلي بعد اكتمال الحدث. يمكنك أيضًا تمكين الضبط التلقائي لتقليل استخدام وحدة المعالجة المركزية بشكل استباقي بمرور الوقت لقاعدة بياناتك. تعلمك هذه المقالة تشخيص واستكشاف مشكلات الاستخدام العالي لوحدة المعالجة المركزية باستخدام أدوات مضمنة في Azure SQL Database وتوضح متى ينبغي إضافة موارد CPU.
فهم عدد vCore
من المفيد فهم عدد وحدات الذاكرة الأساسية الظاهرية (vCores) المتوفرة لقاعدة بياناتك عند تشخيص حدث استخدام عالي لوحدة المعالجة المركزية. vCore واحدة تكافئ وحدة معالجة مركزية منطقية. يساعدك عدد vCores على فهم موارد وحدة المعالجة المركزية المتوفرة لقاعدة بياناتك.
تحديد عدد vCore في مدخل Azure
يمكنك التعرف بسرعة على عدد vCore لقاعدة بيانات في مدخل Azure إذا كنت تستخدم مستوى خدمة يستند إلى vCore مع مستوى الحساب المزود. في هذه الحالة، سوف يحتوي مستوى التسعير المدرج لقاعدة البيانات في صفحة نظرة عامة الخاصة بها على عدد vCore. على سبيل المثال، قد يكون مستوى تسعير قاعدة بيانات "أغراض عامة: Gen5، 16 vCores".
لقواعد البيانات في مستوى الحساب بلا خادم، سيكون عدد vCore دائمًا مكافئًا لإعداد vCore الأقصى لقاعدة البيانات. سيظهر عدد VCore في مستوى التسعير المدرج لقاعدة البيانات في صفحة نظرة عامة الخاصة بها. على سبيل المثال، قد يكون مستوى تسعير قاعدة بيانات "أغراض عامة: بلا خادم، Gen5، 16 vCores".
إذا كنت تستخدم قاعدة بيانات ضمن نموذج الشراء المستند إلى DTU، فستحتاج إلى استخدام Transact-SQL للاستعلام عن عدد vCore لقاعدة البيانات.
تحديد عدد vCore باستخدام Transact-SQL
يمكنك تحديد عدد vCore الحالية لأي قاعدة بيانات باستخدام Transact-SQL. يمكنك تشغيل Transact-SQL مقابل Azure SQL Database باستخدام SQL Server Management Studio (SSMS) أو Azure Data Studio أو محرر الاستعلام في مدخل Azure (معاينة).
اتصل بقاعدة بياناتك وشغّل الاستعلام التالي:
SELECT
COUNT(*) as vCores
FROM sys.dm_os_schedulers
WHERE status = N'VISIBLE ONLINE';
GO
ملاحظة
لقواعد البيانات التي تستخدم أجهزة Gen4، قد يكون عدد المجدولات المرئية عبر الإنترنت في sys.dm_os_schedulers
ضعف عدد vCores المحدد في إنشاء قاعدة البيانات والمبين في مدخل Azure.
تحديد أسباب الاستخدام العالي لوحدة المعالجة المركزية
يمكنك قياس وتحليل استخدام وحدة المعالجة المركزية باستخدام مدخل Azure وأدوات Query Store التفاعلية في SSMS، واستعلامات Transact-SQL في SSMS وAzure Data Studio.
يعرض مدخل Azure وQuery Store إحصائيات التنفيذ، مثل مقاييس وحدة المعالجة المركزية، للاستعلامات المكتملة. إذا كنت تواجه حدث استخدام عالي لوحدة المعالجة المركزية قد يكون حدث بسبب واحد أو أكثر من الاستعلامات المستمرة طويلة الأمد، فحدد الاستعلامات قيد التشغيل حاليا باستخدام Transact-SQL.
الأسباب الشائعة للاستخدام العالي الجديد وغير المعتاد لوحدة المعالجة المركزية هي:
- استعلامات جديدة في حمل العمل تستخدم مقدارًا كبيرًا من وحدة المعالجة المركزية.
- زيادة في تكرار الاستعلامات التي يتم تشغيلها بانتظام.
- تراجع خطة الاستعلام، بما في ذلك التراجع بسبب مشكلات الخطة الحساسة للمعلمة (PSP)، مما يؤدي إلى استهلاك واحد أو أكثر من الاستعلامات المزيد من وحدة المعالجة المركزية.
- زيادة كبيرة في التحويل البرمجي أو إعادة التحويل البرمجي لخطط الاستعلام.
- قواعد البيانات التي تستخدم فيها الاستعلامات التوازي المفرط.
لفهم ما يسبب حدث الاستخدام العالي لوحدة المعالجة المركزية، حدد متى يحدث الاستخدام العالي لوحدة المعالجة المركزية مقابل قاعدة بياناتك وأعلى الاستعلامات باستخدام وحدة المعالجة المركزية في ذلك الوقت.
افحص:
- هل تظهر استعلامات جديدة تستخدم مقدارًا كبيرًا من وحدة المعالجة المركزية في حمل العمل، أو هل ترى زيادة في تكرار الاستعلامات التي يتم تشغيلها بانتظام؟ استخدم أي من الأساليب التالية للتحقيق. ابحث عن الاستعلامات ذات المحفوظات المحدودة (الاستعلامات الجديدة)، وعلى تكرار التنفيذ للاستعلامات ذات المحفوظات الأطول.
- هل بعض الاستعلامات في حمل العمل تستخدم المزيد من وحدة المعالجة المركزية لكل تنفيذ أكثر مما كانت عليه في الماضي؟ إذا كان الأمر كذلك، هل تغيرت خطة تنفيذ الاستعلام؟ قد تحتوي هذه الاستعلامات على مشكلات خطة حساسة للمعلمة (PSP). استخدم أي من التقنيات التالية للتحقيق. ابحث عن الاستعلامات ذات خطط تنفيذ الاستعلام المتعددة والاختلاف الكبير في استخدام وحدة المعالجة المركزية:
- هل هناك دليل على حدوث مقدار كبير من التحويل البرمجي أو إعادة التحويل البرمجي؟ استعلم عن أكثر الاستعلامات المحولة برمجيًا بشكل متكرر من خلال تجزئة الاستعلام وراجع عدد مرات تحويلها برمجيًا.
- هل تستخدم الاستعلامات التوازي المفرط؟ استعلم عن تكوين نطاق قاعدة بيانات MAXDOP وراجع عدد vCore. غالبًا ما يحدث التوازي المفرط في قواعد البيانات التي يتم فيها تعيين MAXDOP على 0 مع عدد وحدات ذاكرة أساسية أعلى من ثمانية.
ملاحظة
تتطلب Azure SQL Database حساب الموارد لتنفيذ ميزات الخدمة الأساسية مثل قابلية الوصول العالية والإصلاح بعد الكارثة والنسخ الاحتياطي والاستعادة لقاعدة البيانات، والمراقبة وQuery Store والضبط التلقائي وما إلى ذلك. قد يكون استخدام موارد الحساب هذه ملحوظًا بشكل خاص في قواعد البيانات ذات عدد vCore المنخفض أو قواعد البيانات في التجمعات المرنة الكثيفة. تعرف على المزيد حول إدارة الموارد في Azure SQL Database.
مراجعة مقاييس استخدام وحدة المعالجة المركزية وأعلى الاستعلامات ذات الصلة في مدخل Azure
استخدم مدخل Azure لتعقب المقاييس المختلفة لوحدة المعالجة المركزية، بما في ذلك النسبة المئوية لوحدة المعالجة المركزية المتوفرة التي تستخدمها قاعدة بياناتك بمرور الوقت. يجمع مدخل Azure بين مقاييس وحدة المعالجة المركزية والمعلومات من Query Store قاعدة بياناتك، مما يسمح لك بتحديد الاستعلامات التي استهلكت وحدة المعالجة المركزية في قاعدة بياناتك في وقت معين.
اتبع هذه الخطوات للعثور على مقاييس النسبة المئوية لوحدة المعالجة المركزية.
- انتقل إلى قاعدة البيانات في مدخل Azure.
- ضمن الأداء الذكي في القائمة اليسرى، حدد تحليلات أداء الاستعلام.
العرض الافتراضي "تحليلات أداء الاستعلام" يظهر 24 ساعة من البيانات. يتم عرض استخدام وحدة المعالجة المركزية كنسبة مئوية من إجمالي وحدة المعالجة المركزية المتوفرة المستخدمة لقاعدة البيانات.
يتم عرض أعلى خمسة استعلامات قيد التشغيل في تلك الفترة في أشرطة عمودية فوق الرسم البياني لاستخدام وحدة المعالجة المركزية. حدد نطاق زمني على المخطط البياني أو استخدم القائمة تخصيص لاستكشاف فترات زمنية محددة. يمكنك أيضًا زيادة عدد الاستعلامات المعروضة.
حدد كل معرف استعلام يعرض استخدام عالي لوحدة المعالجة المركزية لفتح تفاصيل الاستعلام. تشمل التفاصيل نص الاستعلام بالإضافة إلى محفوظات الأداء للاستعلام. افحص ما إذا كان استخدام وحدة المعالجة المركزية قد زاد للاستعلام مؤخرًا.
دوّن معرف الاستعلام لمزيد من التحقيق في خطة الاستعلام باستخدام Query Store في القسم التالي.
مراجعة خطط الاستعلام لأعلى الاستعلامات المحددة في مدخل Azure
اتبع هذه الخطوات لاستخدام معرف استعلام في أدوات Query Store التفاعلية لـ SSMS لفحص خطة تنفيذ الاستعلام بمرور الوقت.
- افتح SSMS.
- اتصل بـ Azure SQL Database في مستكشف العناصر.
- توسيع عقدة قاعدة البيانات في مستكشف العناصر
- وسّع مجلد Query Store.
- افتح جزء الاستعلامات المتعقبة.
- أدخل معرف الاستعلام في مربع تعقب الاستعلام في أعلى يسار الشاشة واضغط على إدخال.
- إذا لزم الأمر، حدد تكوين لضبط الفاصل الزمني لمطابقة الوقت الذي كان يحدث فيه استخدامًا عاليًا لوحدة المعالجة المركزية (CPU).
ستظهر الصفحة خطة (خطط) التنفيذ والمقاييس ذات الصلة للاستعلام على مدى الـ 24 ساعة الأخيرة.
تحديد الاستعلامات قيد التشغيل حاليًا باستخدام Transact-SQL
يتيح لك Transact-SQL التعرف على الاستعلامات الجارية حاليًا مع وقت وحدة المعالجة المركزية الذي استخدمته حتى الآن. يمكنك أيضًا استخدام Transact-SQL للاستعلام عن آخر استخدام لوحدة المعالجة المركزية في قاعدة البيانات، وأعلى الاستعلامات بواسطة CPU، والاستعلامات التي يتم تحويلها برمجيًا في أغلب الأحيان.
يمكنك الاستعلام عن مقاييس وحدة المعالجة المركزية باستخدام SQL Server Management Studio (SSMS) أو Azure Data Studio أو محرر الاستعلام في بمدخل Azure (معاينة). عند استخدام SSMS أو Azure Data Studio، افتح نافذة استعلام جديدة وقم بتوصيلها بقاعدة بياناتك (ليس قاعدة البيانات الرئيسية).
ابحث عن الاستعلامات قيد التشغيل حاليًا باستخدام وحدة المعالجة المركزية وخطط التنفيذ من خلال تنفيذ الاستعلام التالي. يتم إرجاع وقت وحدة المعالجة المركزية بالمللي ثانية.
SELECT
req.session_id,
req.status,
req.start_time,
req.cpu_time AS 'cpu_time_ms',
req.logical_reads,
req.dop,
s.login_name,
s.host_name,
s.program_name,
object_name(st.objectid,st.dbid) 'ObjectName',
REPLACE (REPLACE (SUBSTRING (st.text,(req.statement_start_offset/2) + 1,
((CASE req.statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
ELSE req.statement_end_offset END - req.statement_start_offset)/2) + 1),
CHAR(10), ' '), CHAR(13), ' ') AS statement_text,
qp.query_plan,
qsx.query_plan as query_plan_with_in_flight_statistics
FROM sys.dm_exec_requests as req
JOIN sys.dm_exec_sessions as s on req.session_id=s.session_id
CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) as st
OUTER APPLY sys.dm_exec_query_plan(req.plan_handle) as qp
OUTER APPLY sys.dm_exec_query_statistics_xml(req.session_id) as qsx
ORDER BY req.cpu_time desc;
GO
يقوم هذا الاستعلام بإرجاع نسختين من خطة التنفيذ. يحتوي العمود query_plan
على خطة التنفيذ من sys.dm_exec_query_plan(). يحتوي هذا الإصدار من خطة الاستعلام على تقديرات فقط لعدد الصفوف ولا يحتوي على أية إحصائيات تنفيذ.
إذا قام العمود query_plan_with_in_flight_statistics
بإرجاع خطة تنفيذ، توفر هذه الخطة المزيد من المعلومات. يبادر العمود query_plan_with_in_flight_statistics
بإرجاع البيانات من sys.dm_exec_query_statistics_xml()، الذي يتضمن إحصائيات تنفيذ «أثناء النقل» مثل العدد الفعلي للصفوف التي تم إرجاعها حتى الآن بواسطة استعلام قيد التشغيل حاليًا.
مراجعة مقاييس استخدام وحدة المعالجة المركزية للساعة الأخيرة
يقوم الاستعلام التالي مقابل sys.dm_db_resource_stats
بإرجاع متوسط استخدام وحدة المعالجة المركزية على فواصل زمنية من 15 ثانية للساعة الأخيرة تقريبًا.
SELECT
end_time,
avg_cpu_percent,
avg_instance_cpu_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;
GO
من المهم عدم التركيز فقط على العمود avg_cpu_percent
. يتضمن العمود avg_instance_cpu_percent
وحدة المعالجة المركزية المستخدمة من قبل كل من المستخدم وأحمال العمل الداخلية. إذا كان avg_instance_cpu_percent
قريبًا من 100٪، تكون موارد وحدة المعالجة المركزية مشبعة. في هذه الحالة، يجب عليك استكشاف مشكلات الاستخدام العالي لوحدة المعالجة المركزية إذا كان معدل نقل التطبيق غير كافٍ أو زمن انتقال الاستعلام مرتفعًا.
تعرف على المزيد حول إدارة الموارد في Azure SQL Database.
راجع الأمثلة في sys.dm_db_resource_stats لمزيد من الاستعلامات.
الاستعلام عن أعلى 15 استعلامًا حسب استخدام وحدة المعالجة المركزية
يتعقب Query Store إحصائيات التنفيذ، بما في ذلك استخدام وحدة المعالجة المركزية، للاستعلامات. يُرجع الاستعلام التالي أعلى 15 استعلامًا تم تشغيلها في آخر ساعتين، مرتبة حسب استخدام وحدة المعالجة المركزية. يتم إرجاع وقت وحدة المعالجة المركزية بالمللي ثانية.
WITH AggregatedCPU AS
(SELECT
q.query_hash,
SUM(count_executions * avg_cpu_time / 1000.0) AS total_cpu_ms,
SUM(count_executions * avg_cpu_time / 1000.0)/ SUM(count_executions) AS avg_cpu_ms,
MAX(rs.max_cpu_time / 1000.00) AS max_cpu_ms,
MAX(max_logical_io_reads) max_logical_reads,
COUNT(DISTINCT p.plan_id) AS number_of_distinct_plans,
COUNT(DISTINCT p.query_id) AS number_of_distinct_query_ids,
SUM(CASE WHEN rs.execution_type_desc='Aborted' THEN count_executions ELSE 0 END) AS aborted_execution_count,
SUM(CASE WHEN rs.execution_type_desc='Regular' THEN count_executions ELSE 0 END) AS regular_execution_count,
SUM(CASE WHEN rs.execution_type_desc='Exception' THEN count_executions ELSE 0 END) AS exception_execution_count,
SUM(count_executions) AS total_executions,
MIN(qt.query_sql_text) AS sampled_query_text
FROM sys.query_store_query_text AS qt
JOIN sys.query_store_query AS q ON qt.query_text_id=q.query_text_id
JOIN sys.query_store_plan AS p ON q.query_id=p.query_id
JOIN sys.query_store_runtime_stats AS rs ON rs.plan_id=p.plan_id
JOIN sys.query_store_runtime_stats_interval AS rsi ON rsi.runtime_stats_interval_id=rs.runtime_stats_interval_id
WHERE
rs.execution_type_desc IN ('Regular', 'Aborted', 'Exception') AND
rsi.start_time>=DATEADD(HOUR, -2, GETUTCDATE())
GROUP BY q.query_hash),
OrderedCPU AS
(SELECT *,
ROW_NUMBER() OVER (ORDER BY total_cpu_ms DESC, query_hash ASC) AS RN
FROM AggregatedCPU)
SELECT *
FROM OrderedCPU AS OD
WHERE OD.RN<=15
ORDER BY total_cpu_ms DESC;
GO
مجموعات الاستعلام هذه حسب قيمة مجزأة للاستعلام. إذا وجدت قيمة عالية في العمود number_of_distinct_query_ids
، فتحقق إذا كان لا يتم تحديد معلمات استعلام يتم تشغيله بشكل متكرر بشكل صحيح. قد يتم التحويل البرمجي للاستعلامات غير محددة المعلمات في كل تنفيذ، مما يستهلك مقدارًا كبيرًا من وحدة المعالجة المركزية ويؤثر على أداء Query Store.
لمعرفة المزيد حول استعلام فردي، لاحظ تجزئة الاستعلام واستخدمه لتحديد استخدام وحدة المعالجة المركزية وخطة الاستعلام لتجزئة استعلام معين.
الاستعلام عن الاستعلامات المحولة برمجيًا بشكل متكرر من خلال تجزئة الاستعلام
يعتبر التحويل البرمجي لخطة استعلام عملية كثيفة الاستخدام لوحدة المعالجة المركزية. تبادر Azure SQL Database بتخزين الخطط مؤقتًا في الذاكرة لإعادة استخدامها. قد يتم تحويل بعض الاستعلامات برمجيًا بشكل متكرر إذا لم تكن محددة المعلمات أو إذا كانت تلميحات RECOMPILE تفرض إعادة التحويل البرمجي.
يتعقب Query Store عدد المرات التي يتم فيها تحويل الاستعلامات برمجيًا. شغّل الاستعلام التالي لتحديد أعلى 20 استعلامًا في Query Store حسب عدد التحويل البرمجي، بالإضافة إلى متوسط عدد التحويلات البرمجية في الدقيقة:
SELECT TOP (20)
query_hash,
MIN(initial_compile_start_time) as initial_compile_start_time,
MAX(last_compile_start_time) as last_compile_start_time,
CASE WHEN DATEDIFF(mi,MIN(initial_compile_start_time), MAX(last_compile_start_time)) > 0
THEN 1.* SUM(count_compiles) / DATEDIFF(mi,MIN(initial_compile_start_time),
MAX(last_compile_start_time))
ELSE 0
END as avg_compiles_minute,
SUM(count_compiles) as count_compiles
FROM sys.query_store_query AS q
GROUP BY query_hash
ORDER BY count_compiles DESC;
GO
لمعرفة المزيد حول استعلام فردي، لاحظ تجزئة الاستعلام واستخدمه لتحديد استخدام وحدة المعالجة المركزية وخطة الاستعلام لتجزئة استعلام معين.
تحديد استخدام وحدة المعالجة المركزية وخطة الاستعلام لتجزئة استعلام معين
شغّل الاستعلام التالي للبحث عن معرف الاستعلام الفردي ونص الاستعلام وخطط تنفيذ الاستعلام لـ query_hash
معين. يتم إرجاع وقت وحدة المعالجة المركزية بالمللي ثانية.
استبدل قيمة المتغير @query_hash
بـ query_hash
صالح لحمل العمل.
declare @query_hash binary(8);
SET @query_hash = 0x6557BE7936AA2E91;
with query_ids as (
SELECT
q.query_hash,
q.query_id,
p.query_plan_hash,
SUM(qrs.count_executions) * AVG(qrs.avg_cpu_time)/1000. as total_cpu_time_ms,
SUM(qrs.count_executions) AS sum_executions,
AVG(qrs.avg_cpu_time)/1000. AS avg_cpu_time_ms
FROM sys.query_store_query q
JOIN sys.query_store_plan p on q.query_id=p.query_id
JOIN sys.query_store_runtime_stats qrs on p.plan_id = qrs.plan_id
WHERE q.query_hash = @query_hash
GROUP BY q.query_id, q.query_hash, p.query_plan_hash)
SELECT qid.*,
qt.query_sql_text,
p.count_compiles,
TRY_CAST(p.query_plan as XML) as query_plan
FROM query_ids as qid
JOIN sys.query_store_query AS q ON qid.query_id=q.query_id
JOIN sys.query_store_query_text AS qt on q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan AS p ON qid.query_id=p.query_id and qid.query_plan_hash=p.query_plan_hash
ORDER BY total_cpu_time_ms DESC;
GO
يُرجع هذا الاستعلام صفًا واحدًا لكل تباين خطة تنفيذ لـ query_hash
عبر محفوظات Query Store بالكامل. يتم فرز النتائج حسب إجمالي وقت وحدة المعالجة المركزية.
استخدام أدوات Query Store التفاعلية لتعقب الاستخدام التاريخي لوحدة المعالجة المركزية
إذا كنت تفضل استخدام الأدوات الرسومية، اتبع الخطوات التالية لاستخدام أدوات Query Store التفاعلية في SSMS.
- افتح SSMS واتصل بقاعدة البيانات في مستكشف العناصر.
- توسيع عقدة قاعدة البيانات في مستكشف العناصر
- وسّع مجلد Query Store.
- افتح الجزء استهلاك الموارد الإجمالي.
يظهر إجمالي وقت وحدة المعالجة المركزية لقاعدة البيانات خلال الشهر الماضي بالمللي ثانية في أسفل يسار الجزء. في طريقة العرض الافتراضية، يتم تجميع وقت وحدة المعالجة المركزية حسب اليوم.
حدد تكوين في أعلى يمين الجزء لتحديد فترة زمنية مختلفة. يمكنك أيضًا تغيير وحدة التجميع. على سبيل المثال، يمكنك اختيار عرض البيانات لنطاق تاريخ محدد وتجميع البيانات بالساعة.
استخدام أدوات Query Store التفاعلية لتحديد أعلى الاستعلامات حسب وقت وحدة المعالجة المركزية
حدد شريطًا في المخطط البياني للتنقل فيه ورؤية الاستعلامات قيد التشغيل في فترة زمنية محددة. سيفتح جزء أعلى الاستعلامات استهلاكًا للموارد. بدلاً من ذلك، يمكنك فتح أعلى الاستعلامات استهلاكًا للموارد من عقدة Query Store ضمن قاعدة البيانات في مستكشف العناصر مباشرة.
في طريقة العرض الافتراضية، يعرض جزء أعلى الاستعلامات استهلاكًا للموارد الاستعلامات حسب المدة (مللي ثانية). قد تكون المدة أحيانًا أقل من وقت وحدة المعالجة المركزية: قد تستخدم الاستعلامات التي تستخدم التوازي وقت CPU أكثر بكثير من المدة الإجمالية. قد تكون المدة أيضًا أعلى من وقت وحدة المعالجة المركزية إذا كانت فترات الانتظار كبيرة. لعرض الاستعلامات حسب وقت وحدة المعالجة المركزية، حدد القائمة المنسدلة المقاييس في أعلى يسار الجزء وحدد وقت CPU (مللي ثانية).
يمثل كل شريط في الربع العلوي الأيسر استعلامًا. حدد شريطًا لعرض تفاصيل هذا الاستعلام. يوضح الربع العلوي الأيمن من الشاشة عدد خطط التنفيذ الموجودة في Query Store لذلك الاستعلام ويقوم بتعيينها وفقًا لموعد تنفيذها ومقدار المقاييس المحددة التي تم استخدامها. حدد كل معرف خطة للتحكم في خطة تنفيذ الاستعلام التي يتم عرضها في النصف السفلي من الشاشة.
ملاحظة
للحصول على دليل لتفسير طرق عرض Query Store والأشكال التي تظهر في طريقة العرض «أعلى مستهلكات الموارد»، راجع أفضل الممارسات باستخدام Query Store
تقليل استخدام وحدة المعالجة المركزية
يجب أن يتضمن جزء من استكشاف الأخطاء وإصلاحها معرفة المزيد عن الاستعلامات المحددة في القسم السابق. يمكنك تقليل استخدام وحدة المعالجة المركزية عن طريق ضبط الفهارس وتعديل أنماط التطبيق وضبط الاستعلامات وضبط الإعدادات المرتبطة بوحدة المعالجة المركزية لقاعدة البيانات.
- إذا وجدت أن استعلامات جديدة تستخدم مقدارًا كبيرًا من وحدة المعالجة المركزية تظهر في حمل العمل، فتحقق من أن الفهارس قد تم تحسينها لهذه الاستعلامات. يمكنك ضبط الفهارس يدويًا أو تقليل استخدام وحدة المعالجة المركزية باستخدام الضبط التلقائي للفهرس. قيّم ما إذا كان إعداد أقصى درجة من التوازي صحيحًا لحمل العمل المتزايد لديك.
- إذا وجدت أن عدد التنفيذ الإجمالي من الاستعلامات أعلى مما كان عليه، فاضبط الفهارس للاستعلامات التي تستهلك أعلى مقدار من وحدة المعالجة المركزية مع مراعاة الضبط التلقائي للفهرس. قيّم ما إذا كان إعداد أقصى درجة من التوازي صحيحًا لحمل العمل المتزايد لديك.
- إذا وجدت استعلامات في حمل العمل ذات مشكلات خطة حساسة للمعلمة (PSP)، ففكر في تصحيح الخطة التلقائي (فرض الخطة ). يمكنك أيضًا فرض خطة يدويًا في Query Store أو ضبط Transact-SQL للاستعلام لينتج عن ذلك خطة استعلام عالية الأداء باستمرار.
- إذا وجدت دليلاً على حدوث كمية كبيرة من التحويل البرمجي أو إعادة التحويل البرمجي، فاضبط الاستعلامات بحيث تكون محددة المعلمات بشكل صحيح أو لا تتطلب تلميحات إعادة تحويل برمجي.
- إذا وجدت أن الاستعلامات تستخدم التوازي المفرط، فاضبط أقصى درجة من التوازي.
ضع في اعتبارك الاستراتيجيات التالية في هذا القسم.
تقليل استخدام وحدة المعالجة المركزية باستخدام الضبط التلقائي للفهرس
إن الضبط الفعال للفهرس يقلل من استخدام وحدة المعالجة المركزية للعديد من الاستعلامات. تقلل الفهارس المحسنة من القراءات المنطقية والمادية للاستعلام، مما يؤدي غالبًا إلى الحاجة إلى قيام الاستعلام بعمل أقل.
توفر Azure SQL Database إدارة فهرس تلقائية لأحمال العمل على النسخ المتماثلة الأساسية. تستخدم إدارة الفهرس التلقائية التعلم الآلي لمراقبة حمل العمل وتحسين الفهارس غير متفاوتة المسافات المستندة إلى القرص في مخزن الصفوف لقاعدة البيانات.
راجع توصيات الأداء، بما في ذلك توصيات الفهرس، في مدخل Azure. يمكنك تطبيق هذه التوصيات يدويًا أو تمكين خيار الضبط التلقائي CREATE INDEX لإنشاء والتحقق من أداء الفهارس الجديدة في قاعدة البيانات.
تقليل استخدام وحدة المعالجة المركزية من خلال التصحيح التلقائي للخطة (فرض الخطة)
سبب شائع آخر من لأحداث الاستخدام العالي لوحدة المعالجة المركزية هو تراجع اختيار خطة التنفيذ. توفر Azure SQL Database خيار الضبط التلقائي فرض الخطة لتحديد التراجعات في خطط تنفيذ الاستعلام في أحمال العمل على النسخ المتماثلة الأساسية. من خلال تمكين ميزة الضبط التلقائي هذه، ستختبر Azure SQL Database ما إذا كان فرض خطة تنفيذ استعلام يؤدي إلى أداء محسن موثوق للاستعلامات ذات تراجع خطة التنفيذ.
إذا تم إنشاء قاعدة البيانات بعد مارس 2020، فقد تم تمكين خيار الضبط التلقائي فرض الخطة تلقائيًا. إذا تم إنشاء قاعدة البيانات قبل هذا الوقت، فقد ترغب في تمكين خيار الضبط التلقائي فرض الخطة.
ضبط الفهارس يدويًا
استخدم الأساليب الموضحة في تحديد أسباب الاستخدام العالي لوحدة المعالجة المركزية لتحديد خطط الاستعلام للاستعلامات الأعلى استهلاكًا لوحدة المعالجة المركزية. ستساعدك خطط التنفيذ هذه في تحديد وإضافة فهارس غير متفاوتة المسافات لتسريع استعلاماتك.
يتطلب كل فهرس غير متفاوت المسافات يستند إلى القرص في قاعدة البيانات مساحة تخزين ويجب أن يتم صيانته بواسطة محرك SQL. عدّل الفهارس الموجودة بدلاً من إضافة فهارس جديدة عندما يكون ذلك ممكنًا وتأكد من أن الفهارس الجديدة تقلل استخدام وحدة المعالجة المركزية بنجاح. للحصول على نظرة عامة حول الفهارس غير متفاوتة المسافات، راجع إرشادات تصميم الفهرس غير متفاوت المسافات.
بالنسبة لبعض أحمال العمل، قد تكون فهارس تخزين الأعمدة الخيار الأفضل لتقليل استعلامات القراءة المتكررة من وحدة المعالجة المركزية. راجع فهارس تخزين الأعمدة - إرشادات التصميم للاطلاع على التوصيات عالية المستوى حول السيناريوهات عندما تكون فهارس تخزين الأعمدة مناسبة.
ضبط إعدادات التطبيق والاستعلامات وقاعدة البيانات
عند فحص أعلى الاستعلامات، قد تجد خصائص تطبيق تتطلب الضبط مثل سلوك "الدردشة" وأحمال العمل التي قد تستفيد من التقسيم، وتصميم الوصول إلى قاعدة البيانات دون المستوى الأمثل. بالنسبة لأحمال العمل ثقيلة القراءة، ضع بعين الاعتبار النسخ المتماثلة للقراءة فقط لتفريغ أحمال عمل استعلامات القراءة فقط والتخزين المؤقت على مستوى التطبيق كالاستراتيجيات طويلة الأجل لتوسيع نطاق البيانات المقروءة بشكل متكرر.
يمكنك أيضًا اختيار ضبط وحدة المعالجة المركزية عالية الاستخدام يدويًا باستخدام الاستعلامات المحددة في حمل العمل. تتضمن خيارات الضبط اليدوي إعادة كتابة عبارات Transact-SQL وفرض الخطط في Query Store وتطبيق تلميحات الاستعلام.
إذا حددت حالات تستخدم فيها الاستعلامات أحيانًا خطة تنفيذ غير مثالية للأداء، راجع الحلول في الاستعلامات ذات مشكلات الخطة الحساسة للمعلمة (PSP)
إذا حددت استعلامات غير محددة المعلمات ذات عدد كبير من الخطط، فضع بعين الاعتبار تحديد معلمات هذه الاستعلامات، مع التأكد من الإعلان الكامل عن أنواع بيانات المعلمات، بما في ذلك الطول والدقة. قد يتم ذلك من خلال تعديل الاستعلامات أو إنشاء دليل خطة لفرض تحديد معلمات استعلام معين أو عن طريق تمكين تحديد المعلمات المفروض على مستوى قاعدة البيانات.
إذا حددت استعلامات ذات معدلات تحويل برمجي عالية، فحدد سبب التحويل البرمجي المتكرر. السبب الأكثر شيوعًا للتحويل البرمجي المتكرر هو تلميحات RECOMPILE. كلما أمكن، حدد متى تم إضافة تلميح RECOMPILE
وما هي المشكلة التي كان من المفترض أن يحلها. تحقق مما إذا كان يمكن تطبيق حل ضبط أداء بديل لتوفير أداء متسق لاستعلامات التشغيل المتكرر بدون تلميح RECOMPILE
.
تقليل استخدام وحدة المعالجة المركزية من خلال ضبط أقصى درجة من التوازي
يتحكم إعداد أقصى درجة من التوازي (MAXDOP) في التوازي داخل الاستعلام في محرك قاعدة البيانات. تؤدي القيم الأعلى لـ MAXDOP بشكل عام إلى المزيد من سلاسل الرسائل المتوازية لكل استعلام وتنفيذ أسرع للاستعلام.
في بعض الحالات، يمكن أن يؤدي تشغيل عدد كبير من الاستعلامات المتوازية بشكل متزامن إلى إبطاء حمل العمل والتسبب في الاستخدام العالي لوحدة المعالجة المركزية. يكون التوازي المفرط أكثر احتمالًا في الحدوث في قواعد البيانات ذات عدد vCores الكبير حيث يتم تعيين MAXDOP على رقم مرتفع أو على صفر. عند تعيين MAXDOP على صفر، يعيّن محرك قاعدة البيانات عدد المجدولات المطلوب استخدامها بواسطة مؤشرات الترابط المتوازية على العدد الإجمالي للذاكرات الأساسية المنطقية أو 64، أيهما أصغر.
يمكنك تحديد إعداد أقصى درجة من التوازي لقاعدة البيانات باستخدام Transact-SQL. اتصل بقاعدة البيانات باستخدام SSMS أو Azure Data Studio وشغّل الاستعلام التالي:
SELECT
name,
value,
value_for_secondary,
is_value_default
FROM sys.database_scoped_configurations
WHERE name=N'MAXDOP';
GO
ضع بعين الاعتبار تجربة إجراء تغييرات صغيرة في تكوين MAXDOP على مستوى قاعدة البيانات أو تعديل الاستعلامات الفردية المسببة للمشاكل لاستخدام MAXDOP غير افتراضي باستخدام تلميح استعلام. لمزيد من المعلومات، راجع الأمثلة في تكوين أقصى درجة من التوازي.
متى يتم إضافة موارد وحدة المعالجة المركزية
قد تجد أن استعلامات وفهارس حمل العمل يتم ضبطها بشكل صحيح، أو أن ضبط الأداء يتطلب تغييرات لا يمكنك إجراؤها على المدى القصير بسبب العمليات الداخلية أو أسباب أخرى. قد يكون إضافة المزيد من موارد وحدة المعالجة المركزية مفيدًا لقواعد البيانات هذه. يمكنك توسيع موارد قاعدة البيانات مع الحد الأدنى لوقت التعطل.
يمكنك إضافة مزيد من موارد وحدة المعالجة المركزية إلى Azure SQL Database عن طريق تكوين عدد vCore أو تكوين الأجهزة لقواعد البيانات باستخدام نموذج شراء vCore.
ضمن نموذج الشراء المستند إلى DTU، يمكنك رفع مستوى الخدمة وزيادة عدد وحدات معاملات قاعدة البيانات (DTUs). تمثل DTU مقياسًا مختلطًا لوحدة المعالجة المركزية والذاكرة والقراءة والكتابة. إحدى فوائد نموذج شراء vCore هو أنه يسمح بمزيد من التحكم الدقيق في الأجهزة المستخدمة وعدد vCore. يمكنك ترحيل Azure SQL Database من النموذج المستند إلى DTU إلى النموذج المستند إلى vCore للانتقال بين نماذج الشراء.
الخطوات التالية
تعرف على المزيد حول مراقبة Azure SQL Database وضبط أدائها في المقالات التالية:
- مراقبة Azure SQL Database وأداء المثيل المُدار من Azure SQL باستخدام طرق عرض الإدارة الديناميكية
- تصميم فهرس SQL Server ودليل التصميم
- تمكين الضبط التلقائي لمراقبة الاستعلامات وتحسين أداء حمل العمل
- دليل هندسة معالجة الاستعلام
- أفضل الممارسات باستخدام Query Store
- أنواع قابلة للكشف عن ازدحامات أداء الاستعلام في Azure SQL Database
- تحليل ومنع حالات التوقف التام في Azure SQL Database