Azure SQL Veritabanı’nda en yüksek paralellik derecesini (MAXDOP) yapılandırma

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu makalede, Azure SQL Veritabanı'daki en yüksek paralellik derecesi (MAXDOP) yapılandırma ayarı açıklanmaktadır.

Dekont

Bu içerik Azure SQL Veritabanı odaklanmıştır. Azure SQL Veritabanı, Microsoft SQL Server veritabanı altyapısının en son kararlı sürümünü temel alır, bu nedenle içeriğin çoğu benzerdir ancak sorun giderme ve yapılandırma seçenekleri farklıdır. SQL Server'da MAXDOP hakkında daha fazla bilgi için bkz . En yüksek paralellik derecesini yapılandırma Sunucu Yapılandırma Seçeneği.

Genel Bakış

MAXDOP, veritabanı altyapısında sorgu içi paralelliği denetler. Daha yüksek MAXDOP değerleri genellikle sorgu başına daha fazla paralel iş parçacığına ve daha hızlı sorgu yürütmeye neden olur.

Azure SQL Veritabanı'nda her yeni tek veritabanı ve elastik havuz veritabanı için varsayılan MAXDOP ayarı 8'dir. Bu varsayılan, gereksiz kaynak kullanımını engellerken veritabanı altyapısının paralel iş parçacıkları kullanarak sorguları daha hızlı yürütmesine izin verir. Genellikle Azure SQL Veritabanı iş yüklerinde MAXDOP'un daha fazla yapılandırılması gerekmez, ancak gelişmiş performans ayarlama alıştırması olarak avantajlar sağlayabilir.

Dekont

Eylül 2020'de, Azure SQL Veritabanı hizmetindeki telemetri yıllarına dayanarak MAXDOP 8, en geniş müşteri iş yükleri için en uygun değer olarak yeni veritabanları için varsayılan olarak belirlenmiştir. Bu varsayılan, aşırı paralellik nedeniyle performans sorunlarının önlenmesine yardımcı oldu. Bundan önce, yeni veritabanları için varsayılan ayar MAXDOP 0'dı. MaxDOP, Eylül 2020'ye kadar oluşturulan mevcut veritabanları için otomatik olarak değiştirilmedi.

Genellikle veritabanı altyapısının bir sorguyu paralellik ile yürütmeye karar vermesi durumunda yürütme süresi daha kısa olur. Ancak paralelliğin aşırıya kaçması daha fazla işlemci kaynağının kullanılmasına yol açabilir ve bu durumda sorgu performansında iyileşme görülmez. Büyük ölçekli sistemlerde aşırı paralellik, aynı veritabanı altyapısı örneği üzerinde yürütülen tüm sorguların performansını olumsuz yönde etkileyebilir. Geleneksel olarak, paralellik için üst sınır ayarlamak, SQL Server iş yüklerinde sık kullanılan bir performans ayarlama alıştırması olmuştur.

Aşağıdaki tabloda, farklı MAXDOP değerlerine sahip sorgular yürütülürken veritabanı altyapısı davranışı açıklanmaktadır:

MAXDOP Davranış
= 1 Veritabanı altyapısı sorguları yürütmek için tek bir seri iş parçacığı kullanır. Paralel iş parçacıkları kullanılmaz.
> 1 Veritabanı altyapısı, paralel iş parçacıkları tarafından kullanılacak ek zamanlayıcı sayısını MAXDOP değerine veya mantıksal işlemcilerin toplam sayısını (hangisi daha küçükse) ayarlar.
= 0 Veritabanı altyapısı, paralel iş parçacıkları tarafından kullanılacak ek zamanlayıcı sayısını mantıksal işlemcilerin toplam sayısına veya hangisi daha küçükse 64'e ayarlar.

Dekont

Her sorgu, bu zamanlayıcıda en az bir zamanlayıcı ve bir çalışan iş parçacığı ile yürütülür.

Paralellik ile yürütülen bir sorgu ek zamanlayıcılar ve ek paralel iş parçacıkları kullanır. Aynı zamanlayıcıda birden çok paralel iş parçacığı yürütülebileceğinden, sorguyu yürütmek için kullanılan toplam iş parçacığı sayısı belirtilen MAXDOP değerinden veya toplam mantıksal işlemci sayısından yüksek olabilir. Daha fazla bilgi için bkz . Paralel görevleri zamanlama.

Dikkat edilmesi gerekenler

  • Azure SQL Veritabanı varsayılan MAXDOP değerini değiştirebilirsiniz:

  • Uzun süredir devam eden SQL Server MAXDOP ile ilgili önemli noktalar ve öneriler Azure SQL Veritabanı için geçerlidir.

  • Dizin oluşturan veya yeniden oluşturan veya kümelenmiş dizini bırakan dizin işlemleri yoğun kaynak kullanabilir. veya ALTER INDEX deyiminde MAXDOP dizin seçeneğini CREATE INDEX belirterek dizin işlemleri için veritabanı MAXDOP değerini geçersiz kılabilirsiniz. MAXDOP değeri yürütme zamanında deyimine uygulanır ve dizin meta verilerinde depolanmaz. Daha fazla bilgi için bkz . Paralel Dizin İşlemlerini Yapılandırma.

  • MAXDOP için veritabanı kapsamlı yapılandırma seçeneği, sorgulara ve dizin işlemlerine ek olarak DBCC CHECKTABLE, DBCC CHECKDB ve DBCC CHECKFILEGROUP gibi paralel yürütme kullanabilen diğer deyimlerin paralelliğini de denetler.

Öneriler

Veritabanı için MAXDOP'un değiştirilmesi, hem pozitif hem de negatif sorgu performansı ve kaynak kullanımı üzerinde büyük etkiye sahip olabilir. Ancak, tüm iş yükleri için en uygun olan tek bir MAXDOP değeri yoktur. MAXDOP ayarlama önerileri incedir ve birçok faktöre bağlıdır.

Bazı en yoğun eşzamanlı iş yükleri diğerlerinden farklı bir MAXDOP ile daha iyi çalışabilir. Düzgün yapılandırılmış bir MAXDOP, performans ve kullanılabilirlik olayları riskini azaltmalı ve bazı durumlarda gereksiz kaynak kullanımından kaçınarak maliyetleri düşürebilir ve böylece ölçeği daha düşük bir hizmet hedefine düşürebilir.

Aşırı paralellik

Daha yüksek bir MAXDOP genellikle yoğun CPU kullanan sorgular için süreyi azaltır. Ancak aşırı paralellik, cpu ve çalışan iş parçacığı kaynaklarının diğer sorgularını aç bırakarak diğer eşzamanlı iş yükü performansını kötüleştirebilir. Aşırı durumlarda aşırı paralellik tüm veritabanı veya elastik havuz kaynaklarını tüketerek sorgu zaman aşımlarına, hatalara ve uygulama kesintilerine neden olabilir.

Bahşiş

Müşterilerin şu anda sorunlara neden görünmüyor olsa bile MAXDOP'yi 0 olarak ayarlamaktan kaçınmalarını öneririz.

Aşırı paralellik, hizmet hedefi tarafından sağlanan CPU ve çalışan iş parçacığı kaynakları tarafından desteklenenden daha fazla eşzamanlı istek olduğunda en sorunlu hale gelir. Bir veritabanının ölçeği artırıldıysa veya Azure SQL Veritabanı gelecekteki donanım yapılandırmaları aynı veritabanı hizmeti hedefi için daha fazla çekirdek sağlıyorsa aşırı paralellik nedeniyle gelecekteki olası sorun riskini azaltmak için MAXDOP 0'ı önleyin.

MAXDOP'yi değiştirme

Varsayılandan farklı bir MAXDOP ayarının Azure SQL Veritabanı iş yükünüz için en uygun olduğunu belirlerseniz, T-SQL deyimini ALTER DATABASE SCOPED CONFIGURATION kullanabilirsiniz. Örnekler için aşağıdaki Transact-SQL kullanan örnekler bölümüne bakın. MAXDOP değerini oluşturduğunuz her yeni veritabanı için varsayılan olmayan bir değerle değiştirmek için bu adımı veritabanı dağıtım işleminize ekleyin.

Varsayılan olmayan MAXDOP, iş yükündeki sorguların yalnızca küçük bir alt kümesinden yararlanıyorsa OPTION (MAXDOP) ipucunu ekleyerek sorgu düzeyinde MAXDOP'yi geçersiz kılabilirsiniz. Örnekler için aşağıdaki Transact-SQL kullanan örnekler bölümüne bakın.

Gerçekçi eşzamanlı sorgu yüklerini içeren yük testi ile MAXDOP yapılandırma değişikliklerinizi kapsamlı bir şekilde test edin.

Okuma-yazma ve salt okunur iş yükleriniz için farklı MAXDOP ayarları en uygunsa, birincil ve ikincil çoğaltmalar için MAXDOP bağımsız olarak yapılandırılabilir. Bu, Azure SQL Veritabanı okuma ölçeği genişletme, coğrafi çoğaltma ve Hiper Ölçek ikincil çoğaltmaları için geçerlidir. Varsayılan olarak, tüm ikincil çoğaltmalar birincil çoğaltmanın MAXDOP yapılandırmasını devralır.

Güvenlik

İzinler

Deyiminin ALTER DATABASE SCOPED CONFIGURATION sunucu yöneticisi, veritabanı rolünün db_ownerbir üyesi veya izin verilmiş ALTER ANY DATABASE SCOPED CONFIGURATION bir kullanıcı olarak yürütülmesi gerekir.

Örnekler

Bu örneklerde, yeni tek bir Azure SQL Veritabanı veritabanı SAMPLE için seçenek belirtildiğinde en son AdventureWorksLT örnek veritabanı kullanılır.

PowerShell

MAXDOP veritabanı kapsamlı yapılandırma

Bu örnekte, yapılandırmayı 2olarak ayarlamak için ALTER DATABASE SCOPED CONFIGURATION deyiminin MAXDOP nasıl kullanılacağı gösterilmektedir. Ayar, yeni sorgular için hemen geçerlilik kazanır. PowerShell cmdlet'i Invoke-SqlCmd ayarlamak için T-SQL sorgularını yürütür ve MAXDOP veritabanı kapsamlı yapılandırmasını döndürür.

$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

Bu örnek okuma ölçeği genişletme çoğaltmaları etkinleştirilmiş, coğrafi çoğaltma ve hiper ölçek ikincil çoğaltmaları Azure SQL Veritabanı Azure SQL Veritabanı ile kullanım içindir. Örneğin, birincil çoğaltma, ikincil çoğaltma olarak farklı bir varsayılan MAXDOP'a ayarlanır ve okuma-yazma ile salt okunur iş yükü arasında farklar olabileceğini tahmin edilir.

$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 Veritabanı üzerinde T-SQL sorguları yürütmek için Azure portal sorgu düzenleyicisini, SQL Server Management Studio'yu (SSMS) veya Azure Data Studio'yu kullanabilirsiniz.

  1. Yeni bir sorgu penceresi açın.

  2. MAXDOP'yi değiştirmek istediğiniz veritabanına Bağlan. Veritabanındaki kapsamlı veritabanı yapılandırmalarını master değiştiremezsiniz.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın.

MAXDOP veritabanı kapsamlı yapılandırma

Bu örnekte, sys.database_scoped_configurations sistem kataloğu görünümünü kullanarak geçerli veritabanı MAXDOP veritabanı kapsamlı yapılandırmasını belirleme adımları gösterilmektedir.

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

Bu örnekte, yapılandırmayı 8olarak ayarlamak için ALTER DATABASE SCOPED CONFIGURATION deyiminin MAXDOP nasıl kullanılacağı gösterilmektedir. Ayar hemen etkinleşir.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;

Bu örnek, okuma ölçeği genişletme çoğaltmaları etkin, coğrafi çoğaltma ve Hiper Ölçek ikincil çoğaltmaları ile Azure SQL Veritabanı ile kullanım içindir. Örneğin, birincil çoğaltma, ikincil çoğaltmadan farklı bir MAXDOP'a ayarlanır ve okuma-yazma ile salt okunur iş yükleri arasında farklar olabileceğini tahmin eder. Tüm deyimler birincil çoğaltmada yürütülür. value_for_secondary sütunusys.database_scoped_configurations, ikincil çoğaltmanın ayarlarını içerir.

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 sorgu ipucu

Bu örnekte, için zorlamak için sorgu ipucunu kullanarak bir sorgunun nasıl yürütülecekleri gösterilmektedir max degree of parallelism2.

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 dizin seçeneği

Bu örnekte, dizinine zorlamak için dizin seçeneğini kullanarak dizinin nasıl yeniden derlenmesi gösterilmektedir max degree of parallelism12.

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

Ayrıca bkz.

Sonraki adımlar