Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:Azure SQL Veritabanı
Fabric'teki SQL veritabanı
Bu makalede, Azure SQL Veritabanı'nda ve Doku'daki SQL veritabanında en yüksek paralellik derecesi (MAXDOP) yapılandırma ayarı açıklanmaktadır.
Note
Bu içerik, Fabric'te Azure SQL Veritabanı ve SQL Veritabanı üzerine 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 ve Azure SQL Yönetilen Örneği'nde MAXDOP hakkında daha fazla bilgi için bkz. En yüksek paralellik derecesini yapılandırma Sunucu Yapılandırma Seçeneği.
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ı ve Fabric'te SQL Veritabanı'nda, her yeni tekli veritabanı ve elastik havuz veritabanı için varsayılan MAXDOP ayarı 8 olarak ayarlanmıştır. 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. Azure SQL Veritabanı iş yüklerinde MAXDOP'un daha fazla yapılandırılması genellikle gerekli değildir, ancak gelişmiş performans ayarlama alıştırması olarak avantajlar sağlayabilir.
Note
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 şeklindeydi MAXDOP 0. 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 | Behavior |
|---|---|
= 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. |
Note
Her sorgu, en az bir zamanlayıcı ve o 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 Paralel görevleri zamanlama bölümüne bakın.
Considerations
Azure SQL Veritabanı ve Fabric'teki SQL Veritabanı içinde varsayılan MAXDOP değerini değiştirebilirsiniz:
- Sorgu düzeyinde MAXDOPsorgu ipucu kullanarak.
- Veritabanı düzeyinde, MAXDOPveritabanı kapsam yapılandırmasını kullanarak.
Uzun süredir devam eden SQL Server MAXDOP ile ilgili önemli noktalar ve öneriler, Azure SQL Veritabanı ve Fabric'teki SQL Veritabanı için geçerlidir.
Dizin oluşturan, yeniden oluşturan veya kümelenmiş bir dizini bırakan dizin işlemleri, yoğun kaynak kullanabilir.
CREATE INDEXveyaALTER INDEXdeyimlerinde MAXDOP dizin seçeneğini belirterek, dizin işlemleri için veritabanının 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 CHECKTABLEveDBCC CHECKDBgibiDBCC CHECKFILEGROUPparalel yürütme kullanabilen diğer deyimlerin paralelliğini de denetler.
Recommendations
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.
Tip
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. Aşırı paralellik nedeniyle gelecekte veritabanının ölçeği artırıldığında veya gelecekteki donanım yapılandırmaları aynı veritabanı hizmeti hedefi için daha fazla çekirdek sağladığında potansiyel sorun riskini azaltmak için MAXDOP 0 kullanımından kaçının.
MAXDOP'i değiştirme
Varsayılan ayardan farklı bir MAXDOP ayarının 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, ipucunu ekleyerek OPTION (MAXDOP) MAXDOP'yi sorgu düzeyinde geçersiz kılabilirsiniz. Örnekler için bkz. Transact-SQL kullanan örnekler.
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.
Farklı MAXDOP ayarları okuma-yazma ve salt okunur iş yükleriniz için en uygun olduğunda, birincil ve ikincil kopyalar 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 hizmet katmanı 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.
Permissions
ALTER DATABASE SCOPED CONFIGURATION deyiminin, sunucu yöneticisi olarak, veritabanı rolü db_owner üyesi ya da ALTER ANY DATABASE SCOPED CONFIGURATION izni verilmiş bir kullanıcı olarak yürütülmesi gerekir.
Examples
Yeni bir tek veritabanı için AdventureWorksLT seçeneği seçildiğinde, bu örneklerde en son SAMPLE örnek veritabanı kullanılır.
PowerShell
MAXDOP veritabanı kapsamlı yapılandırma
Bu örnek, ALTER DATABASE SCOPED CONFIGURATION deyimini kullanarak yapılandırmayı MAXDOP ayarına 2 olarak nasıl ayarlayacağınızı gösterir. 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ı etkin, coğrafi çoğaltma ve Azure SQL Veritabanı Hyperscale ikincil çoğaltmaları ile Azure SQL Veritabanları için kullanım içindir. Örneğin, birincil çoğaltma, ikincil çoğaltmadan farklı bir varsayılan MAXDOP'a ayarlanır ve okuma-yazma ve salt okunur iş yükleri arasında farklar olabileceği öngörülmektedir.
$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
T-SQL sorgularını yürütmek için Azure SQL Veritabanı, SQL Server Management Studio (SSMS) için Azure portalı sorgu düzenleyicisini, Visual Studio Code için MSSQL uzantısını veya Yapı portalındaki SQL sorgu düzenleyicisini kullanabilirsiniz.
Yeni bir sorgu penceresi açın.
MAXDOP'u değiştirmek istediğiniz veritabanına bağlanın.
masterveritabanındaki veritabanı kapsamlı yapılandırmaları değiştiremezsiniz.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 örnek, ALTER DATABASE SCOPED CONFIGURATION deyimini kullanarak yapılandırmayı MAXDOP ayarına 8 olarak nasıl ayarlayacağınızı gösterir. Ayar hemen etkinleşir.
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;
Bu örnek, Azure SQL Veritabanları ile okuma ölçeklendirme çoğaltmaları etkin, coğrafi çoğaltma ve Hiper Ölçek ikincil çoğaltmaları 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ği öngörülür. Tüm ifadeler birincil replikada 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 önerisi
Bu örnek, max degree of parallelism'yi 2'e zorlamak için sorgu ipucunu kullanarak bir sorgunun nasıl yürütüleceğini göstermektedir.
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 örnek, max degree of parallelism ile 12 arasında zorlamak amacıyla dizin seçeneğini kullanarak bir dizinin nasıl yeniden oluşturulacağını gösterir.
ALTER INDEX ALL ON SalesLT.SalesOrderDetail
REBUILD WITH
( MAXDOP = 12
, SORT_IN_TEMPDB = ON
, ONLINE = ON);