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:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
İşletim sistemi görev zamanlaması
İş parçacıkları, bir işletim sistemi tarafından yürütülen ve uygulama mantığının birkaç eşzamanlı yürütme yoluna ayrılmasını sağlayan en küçük işlem birimleridir. İş parçacıkları, karmaşık uygulamaların eşzamanlı olarak yürütülebilecek çok sayıda görevi olduğunda kullanışlıdır.
bir işletim sistemi bir uygulamanın örneğini yürüttüğünde, örneği yönetmek için işlem adlı bir birim oluşturur. İşlemin bir yürütme iş parçacığı vardır. Bu, uygulama kodu tarafından gerçekleştirilen programlama yönergeleri dizisidir. Örneğin, basit bir uygulamanın seri olarak gerçekleştirilebilecek tek bir yönerge kümesi varsa, bu yönergeler kümesi tek birgörevi olarak işlenir ve uygulama aracılığıyla yalnızca bir yürütme yolu (veya iş parçacığı) vardır. Daha karmaşık uygulamalarda seri olarak yerine eşzamanlı olarak gerçekleştirilebilecek çeşitli görevleri olabilir. Bir uygulama, her görev için kaynak yoğunluklu bir işlem olan ayrı işlemler başlatarak veya görece daha az kaynak yoğunluklu ayrı iş parçacıkları başlatarak bunu yapabilir. Ayrıca, her iş parçacığı bir işlemle ilişkili diğer iş parçacıklarından bağımsız olarak yürütülecek şekilde zamanlanabilir.
İş parçacıkları, karmaşık uygulamaların tek bir CPU'ya sahip bilgisayarlarda bile bir işlemciyi (CPU) daha etkili bir şekilde kullanmasına olanak tanır. Bir CPU ile aynı anda yalnızca bir iş parçacığı yürütülebilir. Bir iş parçacığı, disk okuma veya yazma gibi CPU kullanmayan uzun süre çalışan bir işlem yürütürse, iş parçacıklarından biri ilk işlem tamamlanana kadar yürütülebilir. Diğer iş parçacıkları işlemin tamamlanmasını beklerken iş parçacıklarını yürütebilmek, bir uygulama CPU kullanımını en üst düzeye çıkarabilir. Bu durum özellikle veritabanı sunucusu gibi çok kullanıcılı, yoğun disk G/Ç kullanan uygulamalar için geçerlidir. Birden çok CPU'su olan bilgisayarlar CPU başına aynı anda bir iş parçacığı yürütebilir. Örneğin, bir bilgisayarda sekiz CPU varsa, aynı anda sekiz iş parçacığı yürütebilir.
SQL Server görev zamanlaması
SQL Server kapsamında, isteği bir sorgunun veya toplu işlemin mantıksal gösterimidir. İstek ayrıca denetim noktası veya günlük yazıcı gibi sistem iş parçacıkları için gereken işlemleri de temsil eder. İstekler yaşamları boyunca çeşitli durumlarda bulunur ve isteği yürütmek için gereken kaynaklar, örneğin kilitler veya mandalları gibi unsurlar mevcut olmadığında bekleme sürelerini biriktirebilir. İstek durumları hakkında daha fazla bilgi için bkz. sys.dm_exec_requests.
Görev
görev, isteği karşılamak için tamamlanması gereken çalışma birimini temsil eder. Tek bir isteğe bir veya daha fazla görev atanabilir.
- Paralel istekler, bir ebeveyn görev (veya eşgüdümlü görev) ve birden çok alt görev ile seriye göre değil, eşzamanlı olarak yürütülen birkaç etkin göreve sahiptir. Paralel bir istek için yürütme planının sıralı dalları olabilir, yani planın paralel olarak yürütülmeyen operatörleri bulunan alanları. Ana görev ayrıca bu seri operatörleri yürütmekten de sorumludur.
- Seri isteklerin yürütme sırasında belirli bir noktada yalnızca bir etkin görevi vardır. Görevler yaşamları boyunca çeşitli durumlarda bulunur. Görev durumları hakkında daha fazla bilgi için bkz. sys.dm_os_tasks. ASKIDA durumundaki görevler, kullanılabilir duruma gelmek üzere görevi yürütmek için gereken kaynakları bekliyor. Bekleyen görevler hakkında daha fazla bilgi için bkz. sys.dm_os_waiting_tasks.
Işçi
SQL Server çalışan iş parçacığı, aynı zamanda çalışan veya iş parçacığı olarak da bilinen, işletim sistemi iş parçacığının mantıksal bir temsilidir. seri istekleri yürütürken, SQL Server Veritabanı Altyapısı etkin görevi yürütmek için bir çalışan oluşturur (1:1). Paralel isteklersatır modunda yürütülürken, SQL Server Veritabanı Altyapısı, kendilerine atanan görevleri tamamlamaktan sorumlu alt çalışanları koordine etmesi için bir çalışan atar (ayrıca 1:1 atama olarak da bilinir), bu iş parçacığına ana iş parçacığı (veya koordinatör iş parçacığı) denir. Ana iş parçacığı, kendisiyle ilişkilendirilmiş bir ana göreve sahiptir. Ana iş parçacığı, isteğin giriş noktasıdır ve motor sorguyu ayrıştırmadan önce bile mevcuttur. Ana iş parçacığının ana sorumlulukları şunlardır:
- Paralel tarama koordine edin.
- Paralel alt çalışanları başlatın.
- Paralel iş parçacıklarından satırları toplayın ve istemciye gönderin.
- Yerel ve genel toplamalar gerçekleştirin.
Not
Sorgu planında seri ve paralel dallar varsa, paralel görevlerden biri seri dalı yürütmekle sorumludur.
Her görev için oluşturulan çalışan iş parçacıklarının sayısı aşağıdakilere bağlıdır:
İsteğin Sorgu İyileştiricisi tarafından belirlenen paralellik için uygun olup olmadığı.
Geçerli yüke bağlı olarak sistemde mevcut olan gerçek paralellik derecesi (DOP) nedir? Bu, maksimum paralellik derecesi (MAXDOP) için sunucu yapılandırmasını temel alan tahmini DOP'dan farklı olabilir. Örneğin, MAXDOP için sunucu yapılandırması 8 olabilir, ancak çalışma zamanında kullanılabilen DOP yalnızca 2 olabilir ve bu da sorgu performansını etkiler. Bellek baskısı ve çalışan eksikliği, çalışma zamanında kullanılabilir DOP'un azaltılmasına neden olan iki koşuldandır.
Not
maksimum paralellik derecesi (MAXDOP) sınırı istek başına değil görev başına ayarlanır. Bu, paralel sorgu yürütme sırasında tek bir isteğin MAXDOP sınırına kadar birden çok görev oluşturabileceği ve her görevin bir çalışan kullanacağı anlamına gelir. MAXDOP hakkında daha fazla bilgi için bkz. En yüksek paralellik derecesini yapılandırma Sunucu Yapılandırma Seçeneği.
Zamanlayıcılar
SOS zamanlayıcı olarak da bilinen zamanlayıcı, görevler adına işlem gerçekleştirmek için işlem süresine ihtiyaç duyan işçi dizilerini yönetir. Her zamanlayıcı tek bir işlemciye (CPU) eşlenir. Bir çalışanın zamanlayıcıda etkin kalabileceği süre, en fazla 4 ms olan işletim sistemi kuantumu olarak adlandırılır. Kuantum süresi dolduktan sonra, çalışan zamanını CPU kaynaklarına erişmesi gereken diğer çalışanlara verir ve durumunu değiştirir. CPU kaynaklarına erişimi en üst düzeye çıkarmak için çalışanlar arasındaki bu işbirliği,işbirliği zamanlama olarak da adlandırılır. Bu, önleyici olmayan zamanlama olarak da bilinir. Buna karşılık, çalışan durumundaki değişiklik söz konusu çalışanla ilişkili göreve ve görevle ilişkili isteğe yayılır. Çalışan durumları hakkında daha fazla bilgi için bkz. sys.dm_os_workers. Zamanlayıcılar hakkında daha fazla bilgi için bkz. sys.dm_os_schedulers.
Özetle, bir isteği, çalışma birimlerini gerçekleştirmek için bir veya daha fazla görevi ortaya çıkarabilir. Her görev, görevi tamamlamaktan sorumlu bir iş parçacığına atanır. Görevin etkin yürütülmesi için her çalışan iş parçacığı zamanlanmalıdır (zamanlayıcıüzerine yerleştirilir).
Aşağıdaki senaryoyu göz önünde bulundurun:
- Worker 1, uzun süre çalışan bir görevdir; örneğin, disk tabanlı tablolar üzerinde ön okuma kullanan bir okuma sorgusu. Çalışan 1, gerekli veri sayfalarının zaten Arabellek Havuzu'nda olduğunu bulur, bu nedenle G/Ç işlemlerini beklemesi gerekmez ve verim vermeden önce tam kuantumunu kullanabilir.
- Çalışan 2, milisaniyeden daha kısa süreli görevler yapıyor ve bu nedenle tam kuantumu tükenmeden önce ara vermesi gerekiyor.
Bu senaryoda ve SQL Server 2014'e (12.x) kadar çalışan 1'in genel kuantum süresi daha fazla olduğundan zamanlayıcıyı temel olarak tekeline almasına izin verilir.
SQL Server 2016'den (13.x) başlayarak, işbirlikçi zamanlama Büyük Eksiklik İlk (LDF) zamanlamasını içerir. LDF zamanlamasıyla kuantum kullanım desenleri izlenir ve bir çalışan iş parçacığı bir zamanlayıcıyı tekeline almaz. Aynı senaryoda Çalışan 1'e daha fazla kuantum izni verilmeden önce Çalışan 2'nin yinelenen kuantumları kullanmasına izin verilir ve bu nedenle Çalışan 1'in zamanlayıcıyı olumsuz bir şekilde tekeline almasını engeller.
Paralel görevlerin zamanlaması
MaxDOP 8 ile yapılandırılmış bir SQL Server'ı ve NUMA düğümleri 0 ve 1 arasında, 24 CPU (zamanlayıcı) için CPU Bağlılığı'nın yapılandırıldığını düşünün. 0 ile 11 arasında zamanlayıcılar NUMA düğüm 0'a, zamanlayıcılar 12 ile 23 arasında NUMA düğümü 1'e aittir. Bir uygulama Veritabanı Altyapısı'na aşağıdaki sorguyu (isteği) gönderir:
SELECT h.SalesOrderID,
h.OrderDate,
h.DueDate,
h.ShipDate
FROM Sales.SalesOrderHeaderBulk AS h
INNER JOIN Sales.SalesOrderDetailBulk AS d
ON h.SalesOrderID = d.SalesOrderID
WHERE (h.OrderDate >= '2014-3-28 00:00:00');
Bahşiş
Örnek sorgu, AdventureWorks2016_EXT örnek veritabanı veritabanı kullanılarak yürütülebilir.
Sales.SalesOrderHeader ve Sales.SalesOrderDetail tablolar 50 kez büyütüldü ve Sales.SalesOrderHeaderBulk ve Sales.SalesOrderDetailBulkolarak yeniden adlandırıldı.
Yürütme planı, Karma Birleştirme ile iki tablo arasında birleştirme yapıldığını gösterir ve her bir işleç, iki oklu sarı daire ile gösterildiği gibi paralel olarak yürütülür. Her Paralellik işleci planda farklı bir daldır. Bu nedenle, aşağıdaki yürütme planında üç dal vardır.
Paralel Sorgu Planı gösteren
Not
Yürütme planını ağaç olarak düşünüyorsanız, dalı, planın Exchange Yineleyicileri olarak da adlandırılan Paralellik işleçleri arasında bir veya daha fazla işleci gruplandıran bir alanıdır. Plan işleçleri hakkında daha fazla bilgi için bkz. Showplan Mantıksal ve Fiziksel İşleçler Başvurusu .
Yürütme planında üç dal olsa da, yürütme sırasında herhangi bir noktada bu yürütme planında aynı anda yalnızca iki dal yürütülebilir:
-
Kümelenmiş Dizin Tarama'nin, birleştirmenin derleme girişi
Sales.SalesOrderHeaderBulküzerinde kullanılan dal kendi başına çalışır. - Ardından, üzerinde bir
Sales.SalesOrderDetailBulkkullanılan dal (birleştirmenin yoklama girişi), Bit Eşlem oluşturulmuş olan ve şu anda Karma Eşleştirme yürütülmekte olan dal ile eşzamanlı olarak çalışır.
Showplan XML, NUMA düğüm 0'da 16 çalışan iş parçacığının ayrıldığını ve kullanıldığını gösterir.
<ThreadStat Branches="2" UsedThreads="16">
<ThreadReservation NodeId="0" ReservedThreads="16" />
</ThreadStat>
İş parçacığı ayırma, Veritabanı Altyapısı'nın istek için gereken tüm görevleri gerçekleştirmek için yeterli çalışan iş parçacığına sahip olmasını sağlar. İş parçacıkları birkaç NUMA düğümü arasında ayrılabilir veya yalnızca bir NUMA düğümünde ayrılabilir. İş parçacığı ayırma işlemi çalışma zamanında yürütme başlamadan önce gerçekleştirilir ve zamanlayıcı yüküne bağlıdır. Ayırılan çalışan iş parçacıkları sayısı, concurrent branches * runtime DOP formülünden genellikle türetilir ve ana çalışan iş parçacığını hariç tutar. Her bir dal, MaxDOP'a eşit olan bir dizi çalışan iş parçacığıyla sınırlıdır. Bu örnekte iki eşzamanlı dal vardır ve MaxDOP 8 olarak ayarlanmıştır ve bu nedenle 2 * 8 = 16.
Referans olarak, bir dalın tamamlandığı ve iki dalın eşzamanlı olarak yürütüldüğü Canlı Sorgu İstatistikleri'den canlı yürütme planını gözlemleyin.
Canlı Paralel Sorgu Planını gösteren
SQL Server Veritabanı Altyapısı, aşağıdaki örnekte görüldüğü gibi sys.dm_os_tasks DMV sorgulanarak sorgu yürütme sırasında gözlemlenebilen etkin bir görevi (1:1) yürütmek için bir çalışan iş parçacığı atar:
SELECT parent_task_address, task_address,
task_state, scheduler_id, worker_address
FROM sys.dm_os_tasks
WHERE session_id = <insert_session_id>
ORDER BY parent_task_address, scheduler_id;
Bahşiş
parent_task_address sütunu üst görev için her zaman NULL olarak kalır.
Bahşiş
Çok meşgul bir SQL Server Veritabanı Altyapısı'nda, ayrılmış iş parçacıkları tarafından ayarlanan sınırı aşan bir dizi etkin görev görmek mümkündür. Bu görevler artık kullanılmayan bir dala ait olabilir ve geçici durumda olup temizlenmeyi beklemektedir.
Sonuç kümesi aşağıdadır. Şu anda yürütülmekte olan dallar için 17 etkin görev olduğuna dikkat edin: Ayrılmış iş parçacıklarına karşılık gelen 16 alt görev ve üst görev, yani koordinasyon görevi.
| üst_görev_adresi | görev_adresi | görev_durumu | zamanlayıcı_id | çalışan_adresi |
|---|---|---|---|---|
| null | 0x000001EF4758ACA8 |
ASKIDA | 3 | 0x000001EFE6CB6160 |
| 0x000001EF4758ACA8 | 0x000001EFE43F3468 | ASKIDA | 0 | 0x000001EF6DB70160 |
| 0x000001EF4758ACA8 | 0x000001EEB243A4E8 | ASKIDA | 0 | 0x000001EF6DB7A160 |
| 0x000001EF4758ACA8 | 0x000001EC86251468 | ASKIDA | 5 | 0x000001EEC05E8160 |
| 0x000001EF4758ACA8 | 0x000001EFE3023468 | ASKIDA | 5 | 0x000001EF6B46A160 |
| 0x000001EF4758ACA8 | 0x000001EFE3AF1468 | ASKIDA | 6 | 0x000001EF6BD38160 |
| 0x000001EF4758ACA8 | 0x000001EFE4AFCCA8 | ASKIDA | 6 | 0x000001EF6ACB4160 |
| 0x000001EF4758ACA8 | 0x000001EFDE043848 | ASKIDA | 7 | 0x000001EEA18C2160 |
| 0x000001EF4758ACA8 | 0x000001EF69038108 | ASKIDA | 7 | 0x000001EF6AEBA160 |
| 0x000001EF4758ACA8 | 0x000001EFCFDD8CA8 | ASKIDA | 8 | 0x000001EFCB6F0160 |
| 0x000001EF4758ACA8 | 0x000001EFCFDD88C8 | ASKIDA | 8 | 0x000001EF6DC46160 |
| 0x000001EF4758ACA8 | 0x000001EFBCC54108 | ASKIDA | 9 | 0x000001EFCB886160 |
| 0x000001EF4758ACA8 | 0x000001EC86279468 | ASKIDA | 9 | 0x000001EF6DE08160 |
| 0x000001EF4758ACA8 | 0x000001EFDE901848 | ASKIDA | 10 | 0x000001EFF56E0160 |
| 0x000001EF4758ACA8 | 0x000001EF6DB32108 | ASKIDA | 10 | 0x000001EFCC3D0160 |
| 0x000001EF4758ACA8 | 0x000001EC8628D468 | ASKIDA | 11 | 0x000001EFBFA4A160 |
| 0x000001EF4758ACA8 | 0x000001EFBD3A1C28 | ASKIDA | 11 | 0x000001EF6BD72160 |
16 alt görevin her birine farklı bir çalışan iş parçacığı atandığını (worker_address sütununda görüldüğü gibi), ancak tüm çalışanların sekiz zamanlayıcıdan oluşan aynı havuza (0,5,6,7,8,9,10,11) atandığını ve üst görevin ise bu havuzun dışındaki bir zamanlayıcıya (3) atandığını gözlemleyin.
Önemli
Belirli bir daldaki ilk paralel görev kümesi zamanlandıktan sonra, Veritabanı Altyapısı diğer dallardaki ek görevler için aynı zamanlayıcı havuzunu kullanır. Bu, aynı zamanlayıcı kümesinin yürütme planının tamamında tüm paralel görevler için kullanılacağı ve yalnızca MaxDOP ile sınırlı olacağı anlamına gelir.
SQL Server Veritabanı Altyapısı, görev yürütme için her zaman aynı NUMA düğümünden zamanlayıcıları atamayı dener ve zamanlayıcılar varsa bunları sırayla (hepsini bir kez deneme biçiminde) atar. Ancak, üst göreve atanan çalışan iş parçacığı diğer görevlerden farklı bir NUMA düğümüne yerleştirilebilir.
Bir çalışan iş parçacığı, yalnızca kuantum süresi boyunca (4 ms) zamanlayıcıda etkin kalabilir; bu süre dolduğunda, başka bir göreve atanan bir çalışan iş parçacığının etkin hale gelebilmesi için zamanlayıcıdaki hakkını devretmesi gerekir. Bir çalışanın kuantumunun süresi dolduğunda ve artık etkin olmadığında, görev, mandal veya kilit gibi şu anda kullanılamayan kaynaklara erişim gerektirmediği varsayılarak, ilgili görev ÇALIŞTIRILABİLİR (RUNNABLE) durumda bir FIFO kuyruğuna yerleştirilir. Eğer bu kaynaklar gerekli ise, görev SÜRECEK (RUNNING) duruma geçmeden önce, bu kaynaklar kullanılabilir olana kadar ASKIDA (SUSPENDED) durumda bekletilir.
Bahşiş
Yukarıda görülen DMV çıktısına göre, tüm etkin görevler ASKIDA durumundadır. Bekleme görevleri hakkında daha fazla ayrıntı, sys.dm_os_waiting_tasks DMV'sini sorgulayarak elde edilebilir.
Özetle, paralel istek birden çok görev oluşturur. Her bir görev tek bir çalışan iş parçacığına atanmalıdır. Her bir iş parçacığı tek bir zamanlayıcıya atanmalıdır. Bu nedenle, kullanılan zamanlayıcı sayısı, MaxDOP yapılandırması veya sorgu ipucu tarafından ayarlanan dal başına paralel görevlerin sayısını aşamaz. Koordinasyon iş parçacığı MaxDOP sınırına etki etmez.
CPU'lara iş parçacıklarının tahsisi
Varsayılan olarak, her SQL Server örneği her iş parçacığını başlatır ve işletim sistemi SQL Server örneklerindeki iş parçacıklarını bir bilgisayardaki işlemciler (CPU' lar) arasında yüke göre dağıtır. İşletim sistemi düzeyinde işlem benzenşimi etkinleştirildiyse, işletim sistemi her iş parçacığını belirli bir CPU'ya atar. Buna karşılık, SQL Server Veritabanı Altyapısı, SQL Server çalışan iş parçacıklarını dairesel bir sırayla CPU'lar arasında eşit olarak dağıtan zamanlayıcılara atar.
Birden çok uygulamanın aynı CPU kümesine erişmesi gibi birden çok görevi gerçekleştirmek için, işletim sistemi bazen çalışan iş parçacıklarını farklı CPU'lar arasında taşır. İşletim sistemi açısından verimli olsa da, her işlemci önbelleği sürekli olarak verilerle yeniden yüklendiğinden bu etkinlik yoğun sistem yükleri altında SQL Server performansını düşürebilir. Belirli iş parçacıklarına CPU atamak, işlemci yeniden yüklemelerini ortadan kaldırarak ve CPU'lar arasında iş parçacığı geçişlerini azaltarak (böylece bağlam değiştirme oranını düşürerek) bu koşullar altında performansı iyileştirebilir. Bir iş parçacığı ile işlemci arasındaki böyle bir ilişki, işlemci bağlılığı olarak adlandırılır. Benzenşim etkinleştirildiyse, işletim sistemi her iş parçacığını belirli bir CPU'ya atar.
benşim maskesi seçeneği ALTER SERVER CONFIGURATIONkullanılarak ayarlanır. Uyum maskesi ayarlanmamışsa, SQL Server örneği iş parçacıklarını maskelenmemiş zamanlayıcılar arasında eşit olarak ayırır.
Dikkat
İşletim sisteminde CPU bağlılığını yapılandırmayın ve ayrıca SQL Server'da bağlılık maskesini yapılandırın. Bu ayarlar aynı sonucu elde etmeye çalışır ve yapılandırmalar tutarsızsa, tahmin edilemeyen sonuçlara sahip olabilirsiniz. Daha fazla bilgi için bkz. benşim maskesi seçeneği.
İş parçacığı havuzu, sunucuya çok sayıda istemci bağlandığında performansı iyileştirmeye yardımcı olur. Genellikle her sorgu isteği için ayrı bir işletim sistemi iş parçacığı oluşturulur. Ancak, sunucuya yüzlerce bağlantıyla, sorgu isteği başına bir iş parçacığı kullanmak büyük miktarda sistem kaynağı tüketebilir. en fazla çalışan iş parçacığı seçeneği SQL Server'ın daha fazla sayıda sorgu isteğine hizmet vermek için bir çalışan iş parçacığı havuzu oluşturmasına olanak tanır ve bu da performansı artırır.
Hafif havuz oluşturma seçeneğinin kullanımı
Önemli
SQL Server 2025 'den (17.x) başlayarak, seçeneğin etkinleştirdiği lightweight pooling özelliği kullanım dışıdır ve SQL Server'ın gelecekteki bir sürümünde kaldırılması planlanır. Bilinen kararlılık ve uyumluluk sorunları nedeniyle Microsoft, bu özelliği SQL Server'ın herhangi bir sürümünde kullanmaktan kaçınmanızı önerir.
İş parçacığı bağlamları arasında geçiş yapma yükü çok büyük olmayabilir. ÇOĞU SQL Server örneği, basit havuz seçeneğini 0 veya 1 olarak ayarlamak arasında herhangi bir performans farkı görmez. basit havuzlama yararlanabilecek tek SQL Server örnekleri, aşağıdaki özelliklere sahip bir bilgisayarda çalışanlardır:
- Büyük bir çok CPU'lu sunucu
- Tüm CPU'lar maksimum kapasiteye yakın çalışıyor
- Yüksek düzeyde bağlam geçişi vardır
Hafif havuz değeri 1 olarak ayarlandığında, bu sistemler performansta küçük bir artış görebilir.
Önemli
Rutin işlem için fiber modu zamanlama kullanmayın. Bu, bağlam değiştirmenin normal avantajlarını engelleyerek ve SQL Server'ın bazı bileşenleri fiber modunda düzgün çalışmadığından performansı düşürebilir. Daha fazla bilgi için bkz. hafif havuzlama.
İş parçacığı ve fiber yürütme
Microsoft Windows, iş parçacıklarını yürütme için zamanlamak için 1 ile 31 arasında bir sayısal öncelik sistemi kullanır. Sıfır, işletim sistemi kullanımı için ayrılmıştır. Birkaç iş parçacığı yürütülmeyi beklediğinde, Windows iş parçacığını en yüksek önceliğe sahip olarak sevk eder.
Varsayılan olarak, her SQL Server örneğinin önceliği, normal öncelik olarak adlandırılan 7'dir. Bu varsayılan, SQL Server iş parçacıklarına diğer uygulamaları olumsuz etkilemeden yeterli CPU kaynaklarını elde etmek için yeterli önceliğe sahip olmasını sağlar.
Önemli
Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.
öncelik artırma yapılandırma seçeneği, SQL Server örneğinden gelen iş parçacıklarının önceliğini 13'e çıkarmak için kullanılabilir. Buna yüksek öncelik denir. Bu ayar, SQL Server iş parçacıklarına diğer uygulamaların çoğundan daha yüksek bir öncelik verir. Bu nedenle, SQL Server iş parçacıkları genellikle çalışmaya hazır olduklarında çalıştırılır ve diğer uygulamalardan gelen iş parçacıkları tarafından engellenmezler. Bu, bir sunucu yalnızca SQL Server örneklerini çalıştırdığında ve başka hiçbir uygulama çalıştırdığında performansı geliştirebilir. Bununla birlikte, SQL Server'da yoğun bellek kullanan bir işlem gerçekleşirse, diğer uygulamaların SQL Server iş parçacığını önceden yüklemek için yeterince yüksek önceliğe sahip olma olasılığı yoktur.
Bir bilgisayarda birden çok SQL Server örneği çalıştırıyorsanız ve yalnızca bazı örnekler için öncelik artırmayı açarsanız, normal öncelikli çalışan tüm örneklerin performansı olumsuz etkilenebilir. Ayrıca, öncelik artırma özelliği açıksa, sunucudaki diğer uygulama ve bileşenlerin performansı düşebilir. Bu nedenle, sadece sıkı kontrollü koşullar altında kullanılmalıdır.
Çalışan sisteme CPU ekleme
Önemli
SQL Server 2025'ten (17.x) itibaren, hot add CPU özelliği kullanımdan kaldırılmıştır ve SQL Server'ın gelecekteki bir sürümünden çıkarılması planlanmaktadır. Bilinen kararlılık sorunları nedeniyle, Microsoft bu özelliği SQL Server'ın herhangi bir sürümünde SQL Server yönetiminde kullanmaktan kaçınmanızı önerir.
Sıcak CPU ekleme, çalışan bir sisteme dinamik olarak CPU ekleme yeteneğidir. CPU'ları eklemek fiziksel olarak yeni donanım ekleyerek, mantıksal olarak çevrimiçi donanım bölümleme yoluyla veya sanallaştırma katmanı aracılığıyla gerçekleşebilir.
Anında eklenen CPU için gereksinimler:
- Çalışma sırasında CPU eklemeyi destekleyen donanım gerektirir.
- Windows Server Datacenter veya Enterprise sürümünün desteklenen bir sürümünü gerektirir. Windows Server 2012'den başlayarak, "hot add" Standart sürümde desteklenmektedir.
- SQL Server Enterprise sürümü gerektirir.
- SQL Server geçici NUMA kullanacak şekilde yapılandırılamaz. Yumuşak NUMA hakkında daha fazla bilgi için bkz. Soft-NUMA (SQL Server).
SQL Server, CPU'lar eklendikten sonra onları otomatik olarak kullanmaz. Bu, SQL Server'ın başka bir amaçla eklenebilen CPU'ları kullanmasını engeller. CPU'ları ekledikten sonra RECONFIGURE deyimini yürüterek SQL Server'ın yeni CPU'ları kullanılabilir kaynaklar olarak tanımasını sağlayın.
affinity64 maskesi yapılandırılmışsa, affinity64 maskesi yeni CPU'ları kullanacak şekilde değiştirilmelidir.
64'ten fazla CPU'su olan bilgisayarlarda SQL Server çalıştırmaya yönelik en iyi yöntemler
Donanım iş parçacıklarını CPU'lara atama
Belirli işlemcilere iş parçacıklarını bağlamak için affinity mask ve affinity64 mask sunucu yapılandırma seçeneklerini kullanmayın. Bu seçenekler 64 CPU ile sınırlıdır. Bunun yerine ALTER SERVER CONFIGURATION SET PROCESS AFFINITY seçeneğini kullanın.
İşlem günlüğü dosya boyutu yönetimi
İşlem günlüğü dosyasının boyutunu artırmak için otomatik büyütmeye güvenmeyin. İşlem günlüğünün artırılması bir seri işlem olmalıdır. Günlüğün genişletilmesi, günlük uzantısı bitene kadar işlem yazma işlemlerinin devam etmesini engelleyebilir. Bunun yerine, dosya boyutunu ortamdaki tipik iş yükünü destekleyecek kadar büyük bir değere ayarlayarak günlük dosyaları için alanı önceden ayırın.
Dizin işlemleri için en yüksek paralellik derecesini ayarlama
Dizin oluşturma veya yeniden derleme gibi dizin işlemlerinin performansı, birçok CPU'ya sahip bilgisayarlarda, veritabanının kurtarma modelini geçici olarak toplu günlüklü veya basit kurtarma modeline ayarlayarak geliştirilebilir. Bu dizin işlemleri önemli günlük etkinliği oluşturabilir ve günlük çekişmesi SQL Server tarafından yapılan en iyi paralellik (DOP) seçimini etkileyebilir.
sunucu yapılandırma seçeneğinde maksimum paralellik derecesi (MAXDOP) ayarlamaya ek olarak, MAXDOP seçeneğini kullanarak dizin işlemleri için paralelliği ayarlamayı göz önünde bulundurun. Daha fazla bilgi için bkz. Paralel Dizin İşlemlerini Yapılandırma. En yüksek paralellik derecesi sunucu yapılandırma seçeneğini ayarlama hakkında daha fazla bilgi ve yönergeler için bkz. Paralellik sunucu yapılandırmasının en yüksek derecesini yapılandırma seçeneği.
En fazla çalışan iş parçacığı sayısı seçeneği
SQL Server, başlangıçta sunucu yapılandırma seçeneğini en fazla çalışan iş parçacığı sayısını dinamik olarak yapılandırır. SQL Server, başlangıç sırasında bu sunucu yapılandırmasını belirlemek için kullanılabilir CPU sayısını ve sistem mimarisini kullanır ve belgelenmiş birformülü kullanır.
Bu seçenek gelişmiş bir seçenektir ve yalnızca deneyimli bir veritabanı uzmanı tarafından değiştirilmelidir.
Bir performans sorunu olduğundan şüpheleniyorsanız, sorun muhtemelen çalışan iş parçacıklarının kullanılabilirliği değildir. Çalışan iş parçacıklarının beklemesine neden olan neden muhtemelen Girdi/Çıktı (G/Ç) gibi bir şeydir. En yüksek çalışan iş parçacığı ayarını değiştirmeden önce performans sorununun kök nedenini bulmak en iyisidir. Ancak, en fazla çalışan iş parçacığı sayısını el ile ayarlamanız gerekiyorsa, bu yapılandırma değeri her zaman sistemde bulunan CPU sayısının en az yedi katı bir değere ayarlanmalıdır. Daha fazla bilgi için bkz. en fazla çalışan iş parçacığını yapılandırma.
SQL İzleme ve SQL Server Profil Oluşturucu'nun kullanımından kaçının
Üretim ortamında SQL İzleme ve SQL Profil Oluşturucu kullanmamanızı öneririz. CPU sayısı arttıkça bu araçları çalıştırmanın ek yükü de artar. Sql İzleme'yi üretim ortamında kullanmanız gerekiyorsa izleme olaylarının sayısını en düşük değerle sınırlayın. Yük altındaki her izleme olayının profilini dikkatlice oluşturun ve test edin ve performansı önemli ölçüde etkileyen olayların birleşimlerini kullanmaktan kaçının.
Önemli
SQL İzleme ve SQL Server Profiler kullanım dışı bırakıldı. SQL Server İzleme ve Yeniden Yürütme nesnelerini içeren Microsoft.SqlServer.Management.Trace ad alanı da kullanım dışıdır.
Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.
Bunun yerine Genişletilmiş Olaylar'ı kullanın. Genişletilmiş Olaylarhakkında daha fazla bilgi için bkz. Hızlı Başlangıç: SQL Server genişletilmiş olaylar ve SSMS XEvent Profiler.
Not
Analysis Services iş yükleri için SQL Server Profiler kullanım dışı DEĞİlDİr ve desteklenmeye devam edecektir.
tempdb veri dosyalarının sayısını ayarlama
Dosya sayısı, makinedeki (mantıksal) işlemci sayısına bağlıdır. Genel bir kural olarak, mantıksal işlemci sayısı sekizden küçük veya buna eşitse, mantıksal işlemcilerle aynı sayıda veri dosyası kullanın. Mantıksal işlemci sayısı sekizden büyükse, sekiz veri dosyası kullanın ve çekişme devam ederse, çekişme kabul edilebilir düzeylere düşürülene kadar veri dosyası sayısını 4'ün katlarını artırın veya iş yükünde/kodunda değişiklik yapın. SQL Server tempdbiçinde bulunan için diğer önerileri de göz önünde bulundurmayı unutmayın, tempdb performansını optimize etme.
Ancak, tempdbeşzamanlılık gereksinimlerini dikkatle göz önünde bulundurarak veritabanı yönetimi ek yükünü azaltabilirsiniz. Örneğin, bir sistemde 64 CPU varsa ve genellikle yalnızca 32 sorgu tempdbkullanıyorsa, tempdb dosya sayısını 64'e yükseltmek performansı iyileştirmez.
64'ten fazla CPU kullanabilen SQL Server bileşenleri
Aşağıdaki tabloda SQL Server bileşenleri listelenmiştir ve bu 64 CPU'yu daha fazla kullanıp kullanamayacağını gösterir.
| İşlem adı | Yürütülebilir program | 64'ten fazla CPU kullanın |
|---|---|---|
| SQL Server Veritabanı Altyapısı | Sqlserver.exe | Evet |
| Raporlama Hizmetleri | Rs.exe | Hayır |
| Analiz Servisleri | As.exe | Hayır |
| Entegrasyon Hizmetleri | Is.exe | Hayır |
| Hizmet Aracısı | Sb.exe | Hayır |
| Full-Text Arama | Fts.exe | Hayır |
| SQL Server Aracısı | Sqlagent.exe | Hayır |
| SQL Server Management Studio | Ssms.exe | Hayır |
| SQL Server Kurulumu | Setup.exe | Hayır |