تشخيص واستكشاف مشكلات الاستخدام العالي لوحدة المعالجة المركزية في 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)، مما يؤدي إلى استهلاك واحد أو أكثر من الاستعلامات المزيد من وحدة المعالجة المركزية.
  • زيادة كبيرة في التحويل البرمجي أو إعادة التحويل البرمجي لخطط الاستعلام.
  • قواعد البيانات التي تستخدم فيها الاستعلامات التوازي المفرط.

لفهم ما يسبب حدث الاستخدام العالي لوحدة المعالجة المركزية، حدد متى يحدث الاستخدام العالي لوحدة المعالجة المركزية مقابل قاعدة بياناتك وأعلى الاستعلامات باستخدام وحدة المعالجة المركزية في ذلك الوقت.

افحص:

ملاحظة

تتطلب Azure SQL Database حساب الموارد لتنفيذ ميزات الخدمة الأساسية مثل قابلية الوصول العالية والإصلاح بعد الكارثة والنسخ الاحتياطي والاستعادة لقاعدة البيانات، والمراقبة وQuery Store والضبط التلقائي وما إلى ذلك. قد يكون استخدام موارد الحساب هذه ملحوظًا بشكل خاص في قواعد البيانات ذات عدد vCore المنخفض أو قواعد البيانات في التجمعات المرنة الكثيفة. تعرف على المزيد حول إدارة الموارد في Azure SQL Database.

استخدم مدخل Azure لتعقب المقاييس المختلفة لوحدة المعالجة المركزية، بما في ذلك النسبة المئوية لوحدة المعالجة المركزية المتوفرة التي تستخدمها قاعدة بياناتك بمرور الوقت. يجمع مدخل Azure بين مقاييس وحدة المعالجة المركزية والمعلومات من Query Store قاعدة بياناتك، مما يسمح لك بتحديد الاستعلامات التي استهلكت وحدة المعالجة المركزية في قاعدة بياناتك في وقت معين.

اتبع هذه الخطوات للعثور على مقاييس النسبة المئوية لوحدة المعالجة المركزية.

  1. انتقل إلى قاعدة البيانات في مدخل Azure.
  2. ضمن الأداء الذكي في القائمة اليسرى، حدد تحليلات أداء الاستعلام.

العرض الافتراضي "تحليلات أداء الاستعلام" يظهر 24 ساعة من البيانات. يتم عرض استخدام وحدة المعالجة المركزية كنسبة مئوية من إجمالي وحدة المعالجة المركزية المتوفرة المستخدمة لقاعدة البيانات.

يتم عرض أعلى خمسة استعلامات قيد التشغيل في تلك الفترة في أشرطة عمودية فوق الرسم البياني لاستخدام وحدة المعالجة المركزية. حدد نطاق زمني على المخطط البياني أو استخدم القائمة تخصيص لاستكشاف فترات زمنية محددة. يمكنك أيضًا زيادة عدد الاستعلامات المعروضة.

Screenshot shows Query Performance Insight in the Azure portal.

حدد كل معرف استعلام يعرض استخدام عالي لوحدة المعالجة المركزية لفتح تفاصيل الاستعلام. تشمل التفاصيل نص الاستعلام بالإضافة إلى محفوظات الأداء للاستعلام. افحص ما إذا كان استخدام وحدة المعالجة المركزية قد زاد للاستعلام مؤخرًا.

دوّن معرف الاستعلام لمزيد من التحقيق في خطة الاستعلام باستخدام Query Store في القسم التالي.

مراجعة خطط الاستعلام لأعلى الاستعلامات المحددة في مدخل Azure

اتبع هذه الخطوات لاستخدام معرف استعلام في أدوات Query Store التفاعلية لـ SSMS لفحص خطة تنفيذ الاستعلام بمرور الوقت.

  1. افتح SSMS.
  2. اتصل بـ Azure SQL Database في مستكشف العناصر.
  3. توسيع عقدة قاعدة البيانات في مستكشف العناصر
  4. وسّع مجلد Query Store.
  5. افتح جزء الاستعلامات المتعقبة.
  6. أدخل معرف الاستعلام في مربع تعقب الاستعلام في أعلى يسار الشاشة واضغط على إدخال.
  7. إذا لزم الأمر، حدد تكوين لضبط الفاصل الزمني لمطابقة الوقت الذي كان يحدث فيه استخدامًا عاليًا لوحدة المعالجة المركزية (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.

  1. افتح SSMS واتصل بقاعدة البيانات في مستكشف العناصر.
  2. توسيع عقدة قاعدة البيانات في مستكشف العناصر
  3. وسّع مجلد Query Store.
  4. افتح الجزء استهلاك الموارد الإجمالي.

يظهر إجمالي وقت وحدة المعالجة المركزية لقاعدة البيانات خلال الشهر الماضي بالمللي ثانية في أسفل يسار الجزء. في طريقة العرض الافتراضية، يتم تجميع وقت وحدة المعالجة المركزية حسب اليوم.

Screenshot shows the Overall Resource Consumption view of Query Store in SSMS.

حدد تكوين في أعلى يمين الجزء لتحديد فترة زمنية مختلفة. يمكنك أيضًا تغيير وحدة التجميع. على سبيل المثال، يمكنك اختيار عرض البيانات لنطاق تاريخ محدد وتجميع البيانات بالساعة.

استخدام أدوات Query Store التفاعلية لتحديد أعلى الاستعلامات حسب وقت وحدة المعالجة المركزية

حدد شريطًا في المخطط البياني للتنقل فيه ورؤية الاستعلامات قيد التشغيل في فترة زمنية محددة. سيفتح جزء أعلى الاستعلامات استهلاكًا للموارد. بدلاً من ذلك، يمكنك فتح أعلى الاستعلامات استهلاكًا للموارد من عقدة Query Store ضمن قاعدة البيانات في مستكشف العناصر مباشرة.

Screenshot shows the Top Resource Consuming Queries pane for Query Store in S S M S.

في طريقة العرض الافتراضية، يعرض جزء أعلى الاستعلامات استهلاكًا للموارد الاستعلامات حسب المدة (مللي ثانية). قد تكون المدة أحيانًا أقل من وقت وحدة المعالجة المركزية: قد تستخدم الاستعلامات التي تستخدم التوازي وقت CPU أكثر بكثير من المدة الإجمالية. قد تكون المدة أيضًا أعلى من وقت وحدة المعالجة المركزية إذا كانت فترات الانتظار كبيرة. لعرض الاستعلامات حسب وقت وحدة المعالجة المركزية، حدد القائمة المنسدلة المقاييس في أعلى يسار الجزء وحدد وقت CPU (مللي ثانية).

يمثل كل شريط في الربع العلوي الأيسر استعلامًا. حدد شريطًا لعرض تفاصيل هذا الاستعلام. يوضح الربع العلوي الأيمن من الشاشة عدد خطط التنفيذ الموجودة في Query Store لذلك الاستعلام ويقوم بتعيينها وفقًا لموعد تنفيذها ومقدار المقاييس المحددة التي تم استخدامها. حدد كل معرف خطة للتحكم في خطة تنفيذ الاستعلام التي يتم عرضها في النصف السفلي من الشاشة.

ملاحظة

للحصول على دليل لتفسير طرق عرض Query Store والأشكال التي تظهر في طريقة العرض «أعلى مستهلكات الموارد»، راجع أفضل الممارسات باستخدام Query Store

تقليل استخدام وحدة المعالجة المركزية

يجب أن يتضمن جزء من استكشاف الأخطاء وإصلاحها معرفة المزيد عن الاستعلامات المحددة في القسم السابق. يمكنك تقليل استخدام وحدة المعالجة المركزية عن طريق ضبط الفهارس وتعديل أنماط التطبيق وضبط الاستعلامات وضبط الإعدادات المرتبطة بوحدة المعالجة المركزية لقاعدة البيانات.

ضع في اعتبارك الاستراتيجيات التالية في هذا القسم.

تقليل استخدام وحدة المعالجة المركزية باستخدام الضبط التلقائي للفهرس

إن الضبط الفعال للفهرس يقلل من استخدام وحدة المعالجة المركزية للعديد من الاستعلامات. تقلل الفهارس المحسنة من القراءات المنطقية والمادية للاستعلام، مما يؤدي غالبًا إلى الحاجة إلى قيام الاستعلام بعمل أقل.

توفر 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 وضبط أدائها في المقالات التالية: