Güncelleme istatistikleri w / tam tarama SQL Server 2014 2008 R2% 100 işlemci kullanır, 15%


10

Tam tarama güncelleme istatistikleri, SQL Server 2008 R2'deki CPU'nun% 100'ünü, aynı donanımlar için, benzer donanım özelliklerine sahipken neden% 100 CPU kullanıyor?

MAXDOPDiğer seçeneklere bakıyordum ve gerçekten göze çarpan hiçbir şey görmüyorum. Buna neden olabilecek ayarlar olabileceğini anlıyorum, ancak ayarlar her iki veritabanı için de çok benzer (örneğin, MAXDOPher ikisi için de 4, her ikisi de birden çok çekirdeğe sahip). Her ikisi de Enterprise Edition.

SQL Server 2014'te SQL Server 2008 R2 ve bunu açıklayabilecek bir şey var mı? Her iki sunucu için% 90 bellek seçeneğine sahibim. Ne arayacağınız hakkında bir fikriniz var mı?

SQL Server 2008 R2 / SP3 ve SQL Server 2014 / SP2'yi kullanarak iki sunucuda haftada bir kez tam (% 100) tarama ile güncelleme istatistikleri çalıştırıyorum ve veritabanları aynı yapıya sahip. 2008 R2 sunucusunda, iki çok büyük tablonun güncelleme istatistikleri birkaç saat sürüyor, bu da beklediğim gibi, ancak CPU tüm zaman boyunca% 20'nin altında kalıyor. Ancak 2014 sunucusunda CPU yaklaşık 40 dakika boyunca% 100'e gidiyor. Tablolar 2014 sunucusunda biraz daha küçük. Bunu SQL Monitor analiz menülerini kullanarak görüyorum.

İşte 2014 SQL Server'daki Ola günlük dosyasının çıktısı, CPU yaklaşık 2:10 ila 2:45 arasında% 100'e gidiyor:

Date and time: 2017-06-24 02:10:20  
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:07:48  
Date and time: 2017-06-24 02:18:08  
Date and time: 2017-06-24 02:18:08  
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:32:22  
Date and time: 2017-06-24 02:50:30  

Yukarıdaki iki istatistik için 2008 R2 SQL Server'daki Ola günlük dosyasının çıktısı, ancak CPU belki% 15'e gidiyor:

Date and time: 2017-06-24 03:30:32  
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:05:00  
Date and time: 2017-06-24 03:35:32  
Date and time: 2017-06-24 03:35:32  
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN  
Outcome: Succeeded  
Duration: 00:52:31  
Date and time: 2017-06-24 04:28:03

Onları sunucu maxdop = 1 ile çalıştıramazsınız, çünkü bu tüm paralel plan üretimini ortadan kaldırır ve bu uygulama zarar verebilir. Ters yöne gitmeyi ve 8'e yükseltmeyi (kutuda 16 çekirdek var) ve ne olduğunu görmeyi planlıyorum. CPU'nun sabitlenme süresini azaltmak için daha hızlı gidebilir. Bu iş, kullanıcılar çoğunlukla yokken çalışır.


Sürecin 2008 R2 sunucusunda GÇ bağlı olup olmadığını kontrol ettiniz mi? Mı tempdbyapılandırma aynı? Çalışırken kullanılabilir UPDATE STATISTICS, bu da bir sorun olabilir.
MicSim

1
Ben de paralelliğin muhtemelen suçlu olduğundan şüphelenirim. Paralellik için Maliyet Eşiğini tesadüfen kontrol ettiniz mi? Ayrıca, tam sp_configure listesini her iki kutudan almak ve farklı olanı görmek için onları ayırmak iyi bir fikir olabilir.
DBADon

Yanıtlar:


1

İstatistik güncelleştirmeleri SQL Server'daki birçok farklı seçeneğe göre paralel olabilir:

  • Paralellik için Maliyet Eşiği - Paralellik trenine binmek için bir sorgu bu kadar yüksek olmalıdır. İki sunucunuzda 2008R2 güncellemesinin tek iş parçacıklı, 2014 iş parçacığının çok iş parçacıklı çalışmasına neden olan farklı CTFP ayarları olabilir.
  • Maksimum Paralellik Derecesi - SQL Server bu kadar paralel hale getirmeye karar verirse, bir sorgunun kaç tane çekirdek kullanabileceğini belirler. 2008R2 kutusu MAXDOP'u 1 olarak ayarlayabilirken, 2014 kutusu varsayılan 0 (sınırsız) olarak ayarlanmış olabilir.
  • Kaynak Yöneticisi - Bu Enterprise Edition özelliği, farklı kullanıcı gruplarını veya uygulamaları farklı MAXDOP'lara indirmenizi sağlar.

SQL Server'ın (2016 ve daha yeni) sonraki sürümlerinde bu daha da karmaşık hale gelir:

  • Veritabanı düzeyinde kapsam seçenekleri - bir veritabanını sağ tıklatıp, özelliklere girebilir ve söz konusu veritabanı için MAXDOP düzeyini ayarlayabilirsiniz.
  • İstatistik paralellik ipuçları - 2016 SP2'den başlayarak, istatistik oluşturma ve güncelleme ifadeleri MAXDOP ipuçlarını kabul eder

Daha önce de belirttiğiniz gibi, 2008R2'niz tek iş parçacıklı gidiyor, 2014 olanı ise çok iş parçacıklı gidiyor (böylece daha hızlı bitiyor, ancak çalışırken CPU'yu maksimize ediyor.)

İstatistik işleriniz için doğru dengeyi bulmak için şunları düşünün:

  • Veritabanında aynı anda başka hangi iş yükleri oluyor ? Kutuya kısa dönemlerde hükmetmeyi göze alabilir misiniz? Örneğin, çoğu hafta sonu saatlerinde boşta duran veri ambarlarında, hiç kimsenin sunucuyu kullanmadığını bilmediğinde, insanların tam taramalarla istatistik güncellemelerinde zorlandığını gördüm. Ağır iş işlem ortamlarında, kullanıcılar gece yarısı dönemlerinde bile şikayet ederse, bakım görevleri için daha az etki kullanmaya başlamanız gerekir.
  • Fullscan gerçekten gerekli mi? Yalnızca fullscan seçeneğini kullandığınızda iyi planlar alan sorgular mı görüyorsunuz, yoksa yalnızca en iyi uygulamalar olarak mı yapıyorsunuz? Veritabanınız büyüdükçe, donanım yatırımlarınız hızlanmazsa, tam tarama yapmak yerine istatistik örneklemesinde denemeler yapmaya başlamanız gerekebilir.
  • İstatistikleri daha az güncelleyebilir misiniz? Örneğin, her hafta sonu istatistiklerinizin 1 / 4'ünü güncelleyin ve ardından her ay her şey istatistik güncellemelerini alacak mı?
  • Daha az nesne güncelleyebilir misiniz? Çoğu zaman, büyük denetim veya arşiv tablolarında bile istatistikleri güncelleyen insanlar görüyorum, çünkü birkaç düzine yeni ek yapıldı, ancak bu ekler tablodaki istatistikleri gerçekten etkilemiyor (ve yine de kimse sorgulamıyor).

0

Topluluk wiki yanıtı :

En iyi tahmin: İstatistikleri güncellemek için seçilen plan, 2014 kutusunda 2008 R2 kutusuna göre paralel veya daha paraleldir.

İçin paralel güncelleme istatistikleri fullscan2005'ten beri var ve 2016'dan başlayarak örneklenmiş istatistikler için SQL Server Veritabanı Motoru Blogunda Gjorgji Gjeorgjievski'nin SQL Server 2016'daki Sorgu Optimize Edici Eklemeleri konusuna bakın .

Enterprise Edition kullanıyorsanız , bakım işiniz tarafından kullanılan CPU'yu sınırlamak için Kaynak Yöneticisi'ni kullanabilirsiniz .

Ayrıca Bağlan öneri için oy düşünün Ekleme MAXDOPGüncelleme İstatistikleri için parametre Javier Villegas tarafından.

İlgili Soru-Cevap: Paralel İstatistik Güncellemesi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.