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ındaki maksimum paralellik derecesi (MAXDOP) yapılandırma ayarı açıklanmaktadır.

Not

Bu içerik Azure SQL Veritabanına 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'de MAXDOP hakkında daha fazla bilgi için bkz. Maksimum 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 ayar 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. MaxDOP'yi Azure SQL Veritabanı iş yüklerinde daha fazla yapılandırmak genellikle gerekli değildir, ancak gelişmiş bir performans ayarlama alıştırması olarak avantajlar sağlayabilir.

Not

Eylül 2020'de, Azure SQL Veritabanı hizmetindeki yıllar süren telemetri temelinde 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ı önlemeye 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 yaygın 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ı toplam mantıksal işlemci sayısına veya hangisi daha küçükse 64'e ayarlar.

Not

Her sorgu en az bir zamanlayıcı ve bu zamanlayıcıda 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ı'nda varsayılan MAXDOP değerini değiştirebilirsiniz:

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

  • Dizin oluşturan veya yeniden oluşturan ya da kümelenmiş dizini bırakan dizin işlemleri yoğun kaynak kullanımlı olabilir. 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.

  • Sorgulara ve dizin işlemlerine ek olarak, MAXDOP için veritabanı kapsamlı yapılandırma seçeneği 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'nin 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 bu nedenle ö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, diğer CPU ve çalışan iş parçacığı kaynakları 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.

İpucu

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ında gelecekteki donanım yapılandırmaları aynı veritabanı hizmeti hedefi için daha fazla çekirdek sağlıyorsa, gelecekteki olası paralellik sorunları 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. OLUŞTURDUĞUNUZ her yeni veritabanı için MAXDOP değerini 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ırsa 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 testleriyle MAXDOP yapılandırma değişikliklerinizi kapsamlı bir şekilde test edin.

Farklı MAXDOP ayarları okuma-yazma ve salt okunur iş yükleriniz için 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, Azure SQL Veritabanı'nın SAMPLE yeni tek veritabanı 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ırmasını 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. Invoke-SqlCmd PowerShell cmdlet'i ayarlanıp MAXDOP veritabanı kapsamlı yapılandırmasını döndürmek için T-SQL sorgularını yürütü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ş Azure SQL Veritabanları, coğrafi çoğaltma ve Azure SQL Veritabanı Hiper Ölçek ikincil çoğaltmaları ile kullanım içindir. Örneğin, birincil çoğaltma, ikincil çoğaltma olarak farklı bir varsayılan MAXDOP'ye 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ınızda T-SQL sorguları yürütmek için Azure portal sorgu düzenleyicisini, SQL Server Management Studio (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ın. Ana veritabanında veritabanı kapsamlı yapılandırmalarını 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ü kullanılarak geçerli veritabanı MAXDOP veritabanı kapsamlı yapılandırmanın nasıl belirleneceği gösterilmektedir.

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

Bu örnekte, yapılandırmasını 8olarak ayarlamak için ALTER DATABASE SCOPED CONFIGURATION deyiminin MAXDOP nasıl kullanılacağı gösterilmektedir. Ayar hemen geçerlilik kazanır.

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ı olan Azure SQL Veritabanları 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 sorgu ipucunu kullanarak sorgunun nasıl yürütülerek öğesinin olarak zorlanması 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, için zorlamak için dizin seçeneğini kullanarak bir 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