تكوين أقصى درجة من التوازي (MAXDOP) في قاعدة بيانات SQL Azure

ينطبق على: قاعدة بيانات Azure SQL

توضّح هذه المقالة إعداد تكوين أقصى درجة من التوازي (MAXDOP) في Azure SQL Database.

ملاحظة

يركز هذا المحتوى على Azure SQL Database. تستند Azure SQL Database إلى أحدث إصدار ثابت من محرك قاعدة بيانات Microsoft SQL Server، لذا يوجد الكثير من المحتوى المتشابه على الرغم من اختلاف خيارات التكوين، واستكشاف الأخطاء وإصلاحها. لمزيد من الاطلاع على MAXDOP في خادم SQL، يُرجى الرجوع إلى تكوين أقصى درجة من توازي Server Configuration Option.

نظرة عامة

يتحكم MAXDOP في التوازي داخل الاستعلام في محرك قاعدة البيانات. تؤدي القيم الأعلى لـ MAXDOP بشكل عام إلى المزيد من سلاسل الرسائل المتوازية لكل استعلام وتنفيذ أسرع للاستعلام.

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

ملاحظة

في سبتمبر 2020، استناداً إلى سنوات من القياس عن بُعد في خدمة Azure SQL Database، تم جعل MAXDOP 8 هو الإجراء الافتراضي لقواعد البيانات الجديدة، باعتباره القيمة المثلى لأكبر مجموعة متنوعة من أحمال عمل العملاء. ساعد هذا الإعداد الافتراضي في منع مشاكل الأداء نتيجة للتوازي المفرط. قبل ذلك، كان الإعداد الافتراضي لقواعد البيانات الجديدة هو MAXDOP 0. لم يتم تغيير MAXDOP تلقائياً لقواعد البيانات الحالية التي تم إنشاؤها قبل سبتمبر 2020.

بشكل عام، إذا اختار محرك قاعدة البيانات تنفيذ استعلام باستخدام التوازي، فسيكون وقت التنفيذ أسرع. إلّا أنه يمكن أن يستهلك التوازي الزائد موارد إضافية للمعالج دون تحسين أداء الاستعلام. على نطاق واسع، يمكن أن يؤثر التوازي الزائد بالسلب على أداء الاستعلام لجميع الاستعلامات التي يتم تنفيذها على نفس مثيل محرك قاعدة البيانات. وبشكل تقليدي، كان تعيين حد أعلى للتوازي تمريناً شائعاً لضبط الأداء في أحمال عمل SQL Server.

يصف الجدول التالي سلوك محرك قاعدة البيانات عند تنفيذ الاستعلامات مع قيم MAXDOP مختلفة:

MAXDOP السلوك
= 1 يستخدم محرك قاعدة البيانات مؤشر ترابط تسلسلي واحد لتنفيذ الاستعلامات. لا يتم استخدام مؤشرات الترابط المتوازية.
> 1 مشغل قاعدة بيانات بتعيين عدد مجدولات إضافية لاستخدامها بواسطة مؤشرات الترابط المتوازية إلى قيمة MAXDOP أو إجمالي عدد المعالجات المنطقية، أيهما أصغر.
= 0 مشغل قاعدة البيانات بتعيين عدد مجدولات إضافية ليتم استخدامها بواسطة مؤشرات الترابط المتوازية إلى العدد الإجمالي للمعالجات المنطقية أو 64، أيهما أصغر.

ملاحظة

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

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

الاعتبارات

  • في Azure SQL Database، يمكنك تغيير قيمة MAXDOP الافتراضية:

    • على مستوى الاستعلام، باستخدام MAXDOPتلميح الاستعلام.
    • على مستوى قاعدة البيانات، باستخدام تكوين نطاق قاعدة بياناتMAXDOP.
  • تنطبق اعتبارات SQL Server MAXDOP طويلة الأمد والتوصيات على Azure SQL Database.

  • يمكن أن تكون عمليات الفهرس التي تنشئ فهرساً أو تعيد إنشاءه، أو التي تسقط فهرساً متفاوتاً، كثيفة الاستخدام للموارد. يمكنك تجاوز قيمة MAXDOP لقاعدة البيانات لعمليات الفهرس عن طريق تحديد خيار فهرس MAXDOP في العبارة CREATE INDEX أو ALTER INDEX. يتم تطبيق قيمة MAXDOP على العبارة في وقت التنفيذ ولا يتم تخزينها في بيانات تعريف الفهرس. لمزيدٍ من المعلومات، يُرجى الرجوع إلى تكوين عمليات الفهرس المتوازية.

  • بالإضافة إلى الاستعلامات وعمليات الفهرس، يتحكم خيار تكوين قاعدة البيانات ذات النطاق لـ MAXDOP أيضاً في التوازي مع العبارات الأخرى التي قد تستخدم التنفيذ المتوازي، مثل DBCC CHECKTABLE وDBCC CHECKDB وDBCC CHECKFILEGROUP.

التوصيات

يمكن أن يكون لتغيير MAXDOP لقاعدة البيانات تأثير كبير على أداء الاستعلام واستخدام الموارد، سواءً كانت إيجابية أو سلبية. ومع ذلك، لا توجد قيمة MAXDOP واحدة تعد مثاليةً لجميع أحمال العمل. تعد التوصيات الخاصة بتعيين MAXDOP دقيقة وتعتمد على العديد من العوامل.

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

التوازي المفرط

MAXDOP أعلى غالبا ما يقلل من مدة استعلامات CPU-مكثفة. ومع ذلك، يمكن أن يؤدي التوازي المفرط إلى تفاقم أداء حمل العمل المتزامن الآخر عن طريق تقليل الاستعلامات الأخرى من موارد مؤشر ترابط CPU والعامل. في الحالات القصوى، يمكن أن يستهلك التوازي المفرط كل موارد قاعدة البيانات أو التجمع المرن، ما يتسبب في انقضاء مهلات الاستعلام والأخطاء وانقطاعات التطبيق.

تلميح

نوصي العملاء بتجنب تعيين MAXDOP على 0 حتى إذا لم يبدُ أنه يسبب مشاكل في الوقت الحالي.

يصبح التوازي المفرط أكثر إشكالية عندما يكون هناك طلبات متزامنة أكثر مما يمكن دعمه بواسطة بـ CPU وموارد مؤشر ترابط العامل التي يوفرها هدف الخدمة. تجنب MAXDOP 0 لتقليل مخاطر المشاكل المستقبلية المحتملة بسبب التوازي المفرط إذا تم توسيع قاعدة البيانات، أو إذا كانت تكوينات الأجهزة المستقبلية في Azure SQL Database توفر المزيد من النوى لنفس هدف خدمة قاعدة البيانات.

تعديل MAXDOP

إذا حددت أن إعداد MAXDOP المختلف عن الإعداد الافتراضي هو الأمثل لأحمال عمل Azure SQL Database يمكنك استخدام ALTER DATABASE SCOPED CONFIGURATION عبارة T-SQL. على سبيل المثال، يُرجى الرجوع إلى القسم التالي أمثلة لاستخدام Transact-SQL. لتغيير MAXDOP إلى قيمة غير افتراضية لكل قاعدة بيانات جديدة تقوم بإنشائها، أضف هذه الخطوة إلى عملية نشر قاعدة البيانات.

إذا كان MAXDOP غير الافتراضي يستفيد فقط من مجموعة فرعية صغيرة من الاستعلامات في حمل العمل، فيمكنك تجاوز MAXDOP على مستوى الاستعلام عن طريق إضافة تلميح OPTION (MAXDOP). على سبيل المثال، يُرجى الرجوع إلى القسم التالي أمثلة لاستخدام Transact-SQL.

اختبر بدقة تغييرات تكوين MAXDOP الخاصة بك مع اختبار الحمل الذي يتضمن أحمال استعلام واقعية متزامنة.

يمكن تكوين MAXDOP للنسخ المتماثلة الأساسية والثانوية بشكل مستقل إذا كانت إعدادات MAXDOP المختلفة مثاليةً لأحمال العمل للقراءة والكتابة والقراءة فقط. ينطبق هذا على قاعدة بيانات Azure SQL read scale-out، وgeo-replication، والنسخ المتماثلة الثانوية Hyperscale. بشكل افتراضي، تكتسب جميع النسخ المتماثلة الثانوية تكوين MAXDOP للنسخة المتماثلة الأساسية.

الأمان

الأذونات

يجب تنفيذ العبارة ALTER DATABASE SCOPED CONFIGURATIONكمسؤول الخادم، أو كعضو في دور قاعدة البياناتdb_owner، أو مستخدم تم منحه إذنALTER ANY DATABASE SCOPED CONFIGURATION.

أمثلة

تستخدم هذه الأمثلة أحدث نموذج لقاعدة بيانات AdventureWorksLT عندما يتم اختيار الخيارSAMPLE لقاعدة بيانات واحدة جديدة من Azure SQL Database.

PowerShell

تكوين نطاق قاعدة بيانات MAXDOP

يوضح هذا المثال كيفية استخدام عباره ALTER DATABASE SCOPED CONFIGURATION لتعيين التكوين MAXDOP إلى 2. الإعداد ساري المفعول على الفور لطلبات البحث الجديدة. ينفذ الأمر Invoke-SqlCmd من PowerShell cmdlet استعلامات T-SQL لتعيين وإرجاع تكوين نطاق قاعدة بيانات MAXDOP.

$dbName = "sample" 
$serverName = <server name here>
$serveradminLogin = <login here>
$serveradminPassword = <password here>
$desiredMAXDOP = 8

$params = @{
    'database' = $dbName
    'serverInstance' =  $serverName
    'username' = $serveradminLogin
    'password' = $serveradminPassword
    'outputSqlErrors' = $true
    'query' = 'ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = ' + $desiredMAXDOP + ';
     SELECT [value] FROM sys.database_scoped_configurations WHERE [name] = ''MAXDOP'';'
  }
  Invoke-SqlCmd @params

هذا المثال مخصص للاستخدام مع Azure SQL Databases باستخدام read scale-out replicas enabled وgeo-replication والنسخ المتماثلة الثانوية لـ Azure SQL Database hyperscale. كمثال، تم تعيين النسخة المتماثلة الأساسية إلى MAXDOP افتراضي مختلف كنسخة متماثلة ثانوية، مع توقع أنه قد تكون هناك اختلافات بين حمل عمل للقراءة والكتابة والقراءة فقط.

$dbName = "sample" 
$serverName = <server name here>
$serveradminLogin = <login here>
$serveradminPassword = <password here>
$desiredMAXDOP_primary = 8
$desiredMAXDOP_secondary_readonly = 1
 
$params = @{
    'database' = $dbName
    'serverInstance' =  $serverName
    'username' = $serveradminLogin
    'password' = $serveradminPassword
    'outputSqlErrors' = $true
    'query' = 'ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = ' + $desiredMAXDOP_primary + ';
    ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = ' + $desiredMAXDOP_secondary_readonly + ';
    SELECT [value], value_for_secondary FROM sys.database_scoped_configurations WHERE [name] = ''MAXDOP'';'
  }
  Invoke-SqlCmd @params

Transact-SQL

يمكنك استخدام محرر استعلام مدخل Azureأو SQL Server Management Studio (SSMS)أو Azure Data Studio لتنفيذ استعلامات T-SQL مقابل Azure SQL Database.

  1. افتح إطار استعلام جديد.

  2. الاتصال إلى قاعدة البيانات حيث ترغب في تغيير MAXDOP. لا يمكنك تغيير تكوينات قاعدة البيانات في قاعدة البيانات الرئيسية.

  3. انسخ والصق المثال التالي في إطار الاستعلام وحدد Execute.

تكوين نطاق قاعدة بيانات MAXDOP

يوضح هذا المثال كيفية تحديد تكوين نطاق قاعدة البيانات MAXDOP الحالي باستخدام طريقة عرض كتالوج النظام sys.database_scoped_configurations.

SELECT [value] FROM sys.database_scoped_configurations WHERE [name] = 'MAXDOP';

يوضح هذا المثال كيفية استخدام عباره ALTER DATABASE SCOPED CONFIGURATION لتعيين التكوين MAXDOP إلى 8. الإعداد نافذ المفعول على الفور.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;

هذا المثال مخصص للاستخدام مع Azure SQL Databases باستخدام read scale-out replicas enabled وgeo-replication والنسخ المتماثلة الثانوية لـ Hyperscale. كمثال، تم تعيين النسخة المتماثلة الأساسية إلى MAXDOP مختلف كنسخة متماثلة ثانوية، مع توقع أنه قد تكون هناك اختلافات بين حمل عمل للقراءة والكتابة والقراءة فقط. يتم تنفيذ جميع العبارات على النسخة المتماثلة الأساسية. يحتوي العمود value_for_secondary في sys.database_scoped_configurations على إعدادات النسخة المتماثلة الثانوية.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;
ALTER DATABASE SCOPED CONFIGURATION FOR SECONDARY SET MAXDOP = 1;
SELECT [value], value_for_secondary FROM sys.database_scoped_configurations WHERE [name] = 'MAXDOP';

تلميح استعلام MAXDOP

يوضح هذا المثال كيفية تنفيذ استعلام باستخدام تلميح الاستعلام لفرض max degree of parallelism إلى 2.

SELECT ProductID, OrderQty, SUM(LineTotal) AS Total  
FROM SalesLT.SalesOrderDetail  
WHERE UnitPrice < 5  
GROUP BY ProductID, OrderQty  
ORDER BY ProductID, OrderQty  
OPTION (MAXDOP 2);    
GO

خيار مؤشر MAXDOP

يوضح هذا المثال كيفية إعادة إنشاء فهرس باستخدام خيار الفهرس لفرض max degree of parallelism إلى 12.

ALTER INDEX ALL ON SalesLT.SalesOrderDetail 
REBUILD WITH 
   (     MAXDOP = 12
       , SORT_IN_TEMPDB = ON
       , ONLINE = ON);

راجع أيضًا

الخطوات التالية