Özet
Microsoft SQL ServerSQL Server 2005, mikrosaniye zamanlama yetenekleri sağlamak için yüksek çözünürlüklü CPU sayacını kullanır. Mikrosaniye, saniyenin milyonda biridir (veya milisaniyenin binde biridir). Ancak, CPU frekanslarını değiştiren teknolojiler kullanıyorsanız SQL Server zamanlama değerleri yanlış olabilir. Örneğin, aşağıdaki teknolojilerden birini kullandığınızda bu sorunla karşılaşabilirsiniz:
- CPU adımlaması
- AMD Cool'n'Quiet teknolojisi
- Çeşitli güç şemaları
Bu makale, bu sorunu geçici olarak çözmenize yardımcı olacak yöntemler ve ek bilgiler içermektedir.
Belirtiler
Sunucu yürütme, ayrıştırma ve derleme zamanlarını görüntülemek için SET İSTATİSTİK ZAMAN deyimini kullandığınızda, hatalı değerler elde edebilirsiniz. Örneğin, SQL Server yürütme süresinin geçen süresinin CPU süresinden çok daha fazla olduğunu fark edebilirsiniz. Bu sorun, performans ayarının doğruluğunu etkileyebilir. Bu sorun, sunucudaki "Özet" bölümünde listelenen teknolojilerden birini kullandığınızda oluşur.
Neden
Bu sorunları CPU frekansları bu teknolojileri kullanırken değiştirdiği için oluşur. SQL ServerSQL Server 2005, mikrosaniye zamanlama yetenekleri sağlamak için yüksek çözünürlüklü CPU sayacını kullanır. CPU frekansları enerji tasarrufu sağlamak ve ısı çıkışını azaltmak için değiştirilirse, hesaplanan süreler yanlış olabilir.
Çözüm
Hizmet paketi bilgileri
Bu sorunu gidermek için SQL ServerSQL Server 2005 için en son hizmet paketini edinin. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
913089 En son SQL Server 2005 hizmet paketi nasıl edinilir
Not SQL Server 2005 Service Pack 3 ve sonraki hizmet paketlerinde işlemci zaman damgası kullanılmaz. SQL Server 2005'in bu sürümlerinde, maksimum 1 milisaniye duyarlığı olan daha güvenilir bir zamanlayıcı kullanılır.
Durum
Bu sorun ilk olarak SQL Server 2005 Service Pack 3'te düzeltilmiştir.
Geçici çözüm
SQL ServerSQL Server 2005, doğru performans ayarı yapmak için bilinen ve kararlı veri noktalarına ihtiyaç duyar. Bilgisayarda dinamik CPU frekans ayarlamaları etkinleştirilmişse, performansı izlemeye ve ayarlamaya başlamadan önce CPU'ların sabit bir frekans hızında kalması için bunları devre dışı bırakabilirsiniz SQL Server. Bunu yapmak için aşağıdaki yöntemleri kullanın.
CPU'ları en yüksek frekansta kalmaya zorlamak için bilgisayardaki güç düzenini yapılandırın
Bunu yapmak için aşağıdaki adımları izleyin:
Başlat'a tıklayın, Çalıştır'a tıklayın, Powercfg.cpl yazın ve Tamam'a tıklayın.
Güç Seçenekleri Özellikleri iletişim kutusunda, Güç düzenleri listesinde Her Zaman Açık'ı tıklatın.
Tamam'a tıklayın.
Bir sürüklenme meydana gelebilir. Sapma, CPU frekans değerleri arasındaki sapmadır. Daha fazla bilgi için "Sürüklenme" bölümüne bakın. Bu durumda, güç düzenini değiştirdikten sonra tüm CPU'ların frekanslarını yeniden eşitlemek için Microsoft Windows'u yeniden başlatmanız gerekir.
Bilgisayarı yeniden başlatamıyorsanız, SQL ServerSQL Server işlemci benzeşimini etkinleştirerek SQL ServerSQL Server çalışan iş parçacıklarının CPU'lar arasında taşınmasını önleyin. Bunu yaptığınızda, CPU frekans değerleri arasında bir sapma olsa bile bilgisayarı yeniden başlatmanız gerekmez. Sunucudaki tüm CPU'lar için SQL Server işlemci benzeşimini etkinleştirmek için, sunucudaki mantıksal işlemci sayısına bağlı olarak farklı bir maske kullanmanız gerekir.
Aşağıdaki tabloda örnek senaryolar listelenmiştir.
| CPU numarası | İşlemci benzeşimini etkinleştirmeye yönelik deyimler |
|---|---|
| 02 CPU'lar | Yönetici sp_configure 'yakın ilgi maskesi', 0x00000003 GO yeniden yapılandır GO |
| 04 CPU'lar | 'Yakınlık maskesi' sp_configure yönetici, 0x0000000F GO yeniden yapılandır GO |
| 08 CPU'lar | Yönetici sp_configure 'yakınlık maskesi', 0x000000FF GO yeniden yapılandır GO |
| 16 İşlemci | 'Yakınlık maskesi' sp_configure yönetici, 0x0000FFFF GO yeniden yapılandır GO |
| 32 İşlemci | 'Yakınlık maskesi' sp_configure yönetici, 0xFFFFFFFF GO yeniden yapılandır GO |
Not: BIOS düzeyinde CPU frekansı değişimi özelliklerini devre dışı bırakmak yetersiz olabilir. Çeşitli üçüncü taraf yardımcı programları CPU frekanslarını değiştirebilir. Bazı uygulamalar, CPU'lar maksimum güç şeması ayarları altındayken bile frekans ayarlamalarına olanak tanır. Bu durumda, SQL ServerSQL Server 2005'te performans ayarlaması yaparken bu üçüncü taraf yardımcı programlarını devre dışı bırakmanız gerekir.
CPU frekanslarını ve CPU saat sayaçlarını eşitlemek için üçüncü taraf yardımcı programları ve sürücüleri kullanın
Nadir durumlarda, bir sistem CPU frekansı sorunlarını düzeltmek için üreticiden bir güncelleme gerektirebilir. Sistemde bir sorun olabileceğinden şüpheleniyorsanız, en iyi yöntem sistemi en son BIOS, mikro kod ve üretici yazılımı güncellemeleri açısından kontrol etmektir.
Daha Fazla Bilgi
Microsoft SQL Server 2000 ve SQL Server'in daha önceki sürümleri Windows zamanlama mekanizmalarını kullanır. Zamanlama mekanizmaları milisaniye hassasiyetinde değerler kullanır. Genellikle, bu duyarlılık 10 ila 15 ms'dir. Ancak, hassasiyet 55 ms kadar büyük olabilir. SQL ServerSQL Server sorguları genellikle tek basamaklı milisaniye veya mikrosaniye zaman aralıkları içinde tamamlanır. Bu hassasiyet, yüksek çözünürlüklü bir zamanlayıcı gerektirir. Bu nedenle, bu SQL Server sürümleri bazı sorguların süresini 0 ms olarak bildirir. Bu nedenle, önceki SQL Server sürümlerinde performansı izlemek ve SQL Server performansını ayarlamak zordur.
SQL ServerSQL Server 2005, mikrosaniye zamanlama özellikleri sağlamak için yüksek çözünürlüklü CPU sayacı kullanarak doğruluğu artırır. "Özet" bölümünde listelenen teknolojileri kullandığınızda, bildirilen zamanlama değerleri yanlış olabilir.
Bu sorun aşağıdaki nesneleri ve özellikleri etkileyebilir:
Olayları izleme:
Dikkat etkinliği
Saklı Yordamlar düğümündeki olaylar
TSQL düğümündeki olaylar
Nesneler düğümündeki olaylar
İşlemler düğümündeki olaylar
Dinamik yönetim görünümleri:
sys.dm_exec_query_stats
sys.dm_exec_requests
sys.dm_exec_sessions
sys.dm_io_pending_io_requests
sys.dm_os_ring_buffers
sys.dm_os_sys_info
sys.dm_io_virtual_file_stats
sys.dm_os_wait_stats
SET İSTATİSTİKLERİ ZAMAN deyimi
sysprocesses sistem tablosu
SQL Server 2005 Service Pack 2'yi (SP2) yükledikten sonra SQL Server, yüksek çözünürlüklü zamanlayıcıların CPU'lar arasında eşitlenmediğini algıladığında hata günlüğüne bir hata iletisi SQL Server. Hata iletisi, performans zamanlamalarının doğru olmayabileceğini ve kullanıcıların performans verilerini dikkatli kullanması gerektiğini belirtir.
Hata iletisinin metni aşağıdaki hata iletilerinden birine benzer:
Hata iletisi 1
Not
Zamanlayıcı kimliği 2'deki CPU'nun zaman damgası sayacı diğer CPU'larla senkronize edilmez.
Hata iletisi 2
Not
CPU zaman damgası frekansı milisaniye başına 191469'dan 1794177 tik'e değiştirildi. Yeni frekans kullanılacaktır
SQL ServerSQL Server, 64 bitlik CPU tik sayısını almak için Gerçek Zamanlı Damga Sayacı (RDTSC) komutunu kullanır. Bu değeri milisaniye değerlerine dönüştürmek için bu değeri CPU frekansına bölebilirsiniz. CPU frekansı değiştiğinde veya sapma meydana geldiğinde zamanlama değişimleri meydana gelebilir.
CPU adımlaması
CPU adımlaması, CPU frekansında kasıtlı bir değişiklik olarak tanımlanır. CPU adımlaması, Intel SpeedStep teknolojisi veya AMD PowerNow olarak da bilinir! teknoloji. CPU adımlaması gerçekleştiğinde, enerji tasarrufu yapmak ve ısı çıkışını azaltmak için CPU hızı 50 MHz kadar küçük artışlarla artabilir veya azalabilir. Aynı tekdüze olmayan bellek erişimi (NUMA) düğümünde bulunan CPU'lar, frekansları bağımsız olarak ayarlamaz.
Aşağıdaki tabloda, CPU adımlama değişikliklerinin zamanlama hesaplamalarını nasıl etkileyebileceği gösterilmektedir.
| Eylem | RDTSC Keneler | Milisaniyedeki tik sayısı (Sıklık) | Duvar saati saati |
|---|---|---|---|
| Toplu işlemi başlat | 1 | 200 | 0 |
| Frekans Artışı Aşağı | 200 | 100 | 1 ms |
| Partiyi Sonlandır | 500 | 3 ms | |
| TOPLAMLAR | 500 | 4 ms |
SQL ServerSQL Server, RDTSC tiklerini hem başlangıç hem de bitiş RDTSC tiklerinde yakalar. Ardından SQL Server, tikleri frekans değerine böler.
Bu örnekte, 200 veya 100 frekans değeri kullandığınızda aşağıdaki zamanlama hesaplamaları yapılır:
Frekans 200: 500/200 = 2,5 ms
Frekans 100: 500/100 = 5 ms
Zamanlama hesaplamalarının hiçbiri 4 ms'lik gerçek duvar saati süresiyle eşleşmez.
Bu hesaplama bir RPC:Completed izleme olayında kullanılırsa, süre ve bitiş zamanı veri sütunları yanlış raporlanır. RPC:Completed olayı, başlangıç duvar saati süresini ve CPU tıklama sayısını yakalar. Windows'un SQL Server 2005'te sağladığından daha yüksek çözünürlüklü zamanlama elde etmek için, SQL Server izlemesindeki süre ve bitiş zamanı veri sütunları, geçen CPU değer çizgisi kullanılarak hesaplanır. Bitiş zamanı sütunu, süre sütununun başlangıç zamanı sütununa eklenmesiyle hesaplanır. Bu örnekte, bitiş saati sütunu, başlangıç saatine yanlış şekilde 2,5 ms veya 5 ms eklenerek hesaplanmıştır.
Sürüklenme
Sapma, CPU saat değerlerindeki bir sapmadır. Birden çok CPU'su olan sistemler, aynı zaman noktası için farklı CPU saat değeri üretebilir. Yaygın olmasa da, CPU'lar zaman içinde saat ayrımı yaşayabilir.
Aşağıdaki örnekte, kayma değişikliklerinin bir SQL Server SQL Server izlemesindeki süre veri sütununun sonucunu nasıl etkileyebileceği gösterilir. Örnek, CPU frekansının milisaniyede 200 tikte sabit kaldığını varsayar. Aşağıdaki tabloda, bu senaryodaki olaylar gösterilmektedir.
| Eylem | Windows zamanlanmış CPU | CPU 1 RDTSC | CPU 2 RDTSC | Duvar saati saati |
|---|---|---|---|---|
| Toplu işlemi başlat | 1 | 100 | 1100 | 0 |
| Partiyi Sonlandır | 2 | 900 | 1900 | 4 ms |
| TOPLAMLAR | 4 ms |
SQL ServerSQL Server, RDTSC tiklerini hem başlangıç noktalarda hem de bitiş noktalarında yakalar. Daha sonra SQL Server, RDTSC tiklerini frekans değerine böler. Bu örnekte, Windows SQL Server çalışan iş parçacığını iki farklı CPU'da zamanlamıştır. Toplu işleme hizmet veren SQL Server çalışan iş parçacığı ilk CPU'da (CPU 1) çalıştırıldı.
Ancak, toplu yürütme bir noktada kesintiye uğradı ve SQL Server toplu yürütmeyi bekleyen kuyruğa gönderdi. SQL Server bu toplu işleme hizmet veren SQL Server çalışan iş parçacığını yeniden çalıştırılabilir kuyruğa gönderdiğinde, Windows iş parçacığını ikinci CPU'da (CPU 2) çalışacak şekilde gönderdi. SQL Server çalışan iş parçacığı CPU 2'de çalışmayı tamamladı. CPU kayması nedeniyle, CPU 2'den yakalanan son tıklama değeri 900 yerine 1900 idi. SQL Server işlemci benzeşimini etkinleştirirseniz bu davranışı önleyebilirsiniz.
Bu örnekte aşağıdaki zamanlama hesaplamaları kullanılmıştır:
- Yanlış ancak bildirilen değer: (1900 – 100 = 1800) / 200 = 9 ms
- Doğru değer: (900 – 100 = 800) / 200 = 4 ms
RPC:Completed olayı için süre sütununun değeri 4 ms yerine 9 ms olarak raporlanır. Bu sonuç, doğru değer olan 4 ms'nin iki katından fazladır.
Daha önce bahsedilen performans çıktılarının güvenilir olmayabileceğini belirtmek için SQL Server 2005'e sapma uyarı iletileri eklenmiştir. Açıklanmayan bazı durumlarda, SQL Server 2005 SP2 aşağıdakiler hakkında uyarı iletileri bildirebilir:
- Yanlış sapma uyarı mesajları
- Sapma, gözle görülür bir sistem etkisine neden olmadan onlarca milisaniyeye dönüşebilir
Performansla ilgili çıktıları değerlendirirken ve performansla ilgili çıktıları duvar saati zamanlamalarıyla karşılaştırırken dikkatli olmalısınız. Başka bir performans sorunu belirtisi yoksa, genellikle kayma uyarı iletilerini yok sayabilirsiniz. Örneğin, aşağıdaki durumlarda sürüklenme uyarı iletilerini genellikle yok sayabilirsiniz:
- İşlemler beklendiği gibi çalışıyor.
- SQL ServerSQL Server sorguları garip süreli desenlerde çalışmıyor.
- Başka darboğaz belirtileri görmüyorsunuz.
Ancak, sürüklenme uyarı iletilerini yok saymadan önce, bilinen herhangi bir RDTSC sorunu olmadığından emin olmak için üreticinize başvurmanızı öneririz.
İzleme bayrağı 8033'ü (–T8033) kullanarak SQL ServerSQL Server 2005'in özgün sürüm sürümündeki ve SQL ServerSQL Server 2005 SP1'deki raporlama davranışına dönebilirsiniz. SQL Server 2005 ve SQL Server 2005 SP1'in ilk sürümü sürüklenme uyarı iletilerini bildirmez. SQL Server 2005 veya SQL Server 2005 SP1'in özgün sürümünü sorunsuz çalıştırıyorsanız, genellikle iletileri yoksayabilirsiniz.
WAITFOR DELAY deyimi neden düzgün çalışıyor? Periyodik sistem süreçleri ne olacak?
Zaman aşımı mekanizmaları yüksek çözünürlüklü tasarımdan etkilenmez. SQL ServerSQL Server, zamanlayıcı tabanlı etkinlikler için yüksek çözünürlüklü zamanlayıcıyı kullanmaz. Bazı zaman aşımı etkinlikleri, GetTickCount işlevini kullanan azaltılmış çözünürlük süreölçerini temel alır. Bu zaman aşımı etkinlikleri arasında kilit zaman aşımı, WAITFOR DELAY deyimi ve kilitlenme algılama yer alır.
Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarına tıklayın:
938448 Windows Server 2003 tabanlı bir sunucu çift çekirdekli AMD Opteron işlemciler veya çok işlemcili AMD Opteron işlemciler kullanıyorsa zaman damgası sayacı kayması yaşayabilir
895980 QueryPerformanceCounter işlevini kullanan programlar Windows Server 2003'te ve Windows XP'de düşük performans gösterebilir
Bu makalede açıklanan üçüncü taraf ürünleri, Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft, bu ürünlerin performansı veya güvenilirliğiyle ilgili zımni veya başka türlü hiçbir garanti vermez.