Son zamanlarda bir SQL Server 2008 R2 sisteminde ciddi bir spinlock çekişmesi sorununu çözmek için SQL Server başlangıcı İzleme Bayrağı 8048 dahil edildi.
Performans değerinin izleme bayrağı 8048 tarafından iletildiği kullanım durumlarını bulan diğer kişilerden duymak (NUMA düğümü başına çekirdek başına sorgu belleği verme stratejisini teşvik etmek), izleme bayrağı 8015'i (SQL Server fiziksel NUMA'yı yok sayar) veya SUMA ( Yeterince üniform bellek erişimi, bazı NUMA makinelerde bir BIOS seçeneği araya sokuldu).
İz bayrağı 8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx
Sistem iş yükünün kanlı detayları, sorunlu sistemden metrikler toplandı ve müdahale sonrasında sistemden metrikler toplandı.
İz bayrağı 8048 'düzeltme' idi, ancak en iyi düzeltme miydi? SQL Server 8015 izleme bayrağı nedeniyle fiziksel NUMA'yı görmezden geliyorsa aynı şeyi yapmış mıydı? BIOS'u belleği araya sokacak şekilde ayarlayıp sunucuyu NUMA davranışı yerine SMP taklit eden SUMA davranışıyla bırakmaya ne dersiniz?
Barış! tw: @sql_handle
Sistem hakkında: - 4 hex core Xeon E7540 @ 2.00GHz, aşırı dişli - 128 GB RAM - WS2008R2 - MSSQL 2008 R2 SP2 - maxdop 6
İş yükü hakkında: - 2 rapor uygulama sunucusundan alınan 1000'lerce Toplu iş planlı / sıralı rapor. - 3 parti parti: günlük, haftalık, aylık - Tüm rapor uygulama sunucularının SQL Server'a bağlantıları tek bir hizmet hesabı olarak yapılır - Maksimum rapor eşzamanlılığı = 90
Sorunlu sistemdeki önemli bulgular: - Perfmon'dan 15 saniyelik aralıklarla - - Sistem% 95 -% 100 CPU'da meşgul - - SQL Server arabellek sayfası aramaları saniyede 10000 / saniye
- Bekleme ve spinlock DMV'lerinden 5 dakikalık aralıklarla
- Yüksek CMEMTHREAD garsonlar ve bekleme süresi
- Yüksek SOS_SUSPEND_QUEUE dönüş ve geri çekilme
Bob Dorr'ın 8048 izleme bayrağı üzerindeki CSS Engineer Blog yazısı, NUMA düğümü başına 8 çekirdekten fazla olan sistemlerin, sorgu belleği verimindeki tıkanıklık nedeniyle benzer belirtilerle karşılaşabileceğini gösteriyor. İzleme bayrağı 8048, stratejiyi NUMA düğümü yerine çekirdek başına olarak değiştirir.
Müdahale
MSSQL, -T8048 ile yerinde yeniden başlatıldı. Fark hemen belli oldu: tampon sayfa arama oranı 1 milyonun üzerine çıktı ve saniyede 8 milyona yükseldi. Daha önce 24 saatte tamamlanamayan sorunlu toplu iş yükü 4 saatten daha az bir sürede tamamlandı. Araştırma ya da müdahalenin odağı olmayan bir başka toplu iş yükü, izleme bayrağı 8048'in düzeltici değerini doğrulamanın bir parçası olarak (ve istenmeyen yan etkilerinin en az düzeyde olmasını sağlamanın bir parçası olarak) sunuldu. Bu rapor partisi daha önce 2 saat içinde tamamlandı; izleme bayrağı 8048 yerinde olduğunda, rapor partisi yaklaşık 20 dakikada tamamlandı.
Gecelik ETL de bir fayda ile karşılaştı. ETL süresi yaklaşık 60 dakikadan 40 dakikaya düştü.
Birkaç yerden bilgiyi bir araya getirerek, yüksek dereceli rapor kuyruğu derecesinin, eşzamanlı raporun donanım iş parçacığı sayısından daha büyük olduğunu ve çalışanların iş parçacığı baskısı neden olana kadar bir NUMA düğümü üzerinde baskı oluşturmak için birleştirilmiş tüm raporlar için tek bir kullanıcı hesabının olduğunu tahmin ediyorum. Aynı kullanıcı hesabı için bir sonraki bağlantı talebinde bulunmaktan zevk alacaksınız, bu noktada bir sonraki NUMA düğümü anında bazı bağlantılara kavuşacaktır. Her NUMA düğümü, sorgu belleği verim tıkanmasını vurgulama olasılığı yüksek olacak.
Sorgu belleği için daha fazla şerit açmak, tıkanıklığı giderdi. Ama bunun maliyetinden emin değilim. Bob Dorr'ın CSS yazısı, 8048 izleme bayrağıyla ek bir ek bellek olduğunu açıkça ortaya koyuyor. Bu, MSSQL 2008 R2 maksimum sunucu belleği tarafından yönetilen tek sayfalık ayırıcı bölgedeki ek yük mü? Öyleyse, sistemin tampon havuzu önbelleğinde daha az sayıda veritabanı sayfasına sahip olacağını tahmin ediyorum. Değilse, maksimum sunucu belleği yerleştirmek için düşürülmeli midir?