MSSQL Server’da İşlemci Mimarisi: CPU, Scheduler ve Hyperthread Analizi

SQL Server, sorgu işleme kapasitesini (Query Processing) belirlerken fiziksel ve mantıksal işlemci katmanlarını farklı şekillerde adresler. Özellikle lisanslama maliyetleri, paralellik ayarları (MaxDOP) ve NUMA düğümü yapılandırmaları için sistemin derinliklerindeki CPU verilerine hakim olmak bir zorunluluktur. Bu makalede, SQL Server sistem tabloları ve dinamik yönetim görünümleri (DMV) kullanılarak, işlemci topolojisini tüm detaylarıyla ortaya koyan temel komutları ve bu komutların sunduğu metriklerin teknik karşılıklarını inceleyeceğiz.

Bu kod bloğu, SQL Server’ın işletim sistemiyle olan bağını xp_msver üzerinden sorgulayarak fiziksel ve sanal katmanları birbirinden ayırır.

DECLARE @xp_msver TABLE (
[idx] [int] NULL
,[c_name] [varchar](100) NULL
,[int_val] [float] NULL
,[c_val] [varchar](128) NULL
)
INSERT INTO @xp_msver
EXEC ('[master]..[xp_msver]');;
WITH [ProcessorInfo]
AS (
SELECT ([cpu_count] / [hyperthread_ratio]) AS [number_of_physical_cpus]
,CASE
WHEN hyperthread_ratio = cpu_count
THEN cpu_count
ELSE (([cpu_count] - [hyperthread_ratio]) / ([cpu_count] / [hyperthread_ratio]))
END AS [number_of_cores_per_cpu]
,CASE
WHEN hyperthread_ratio = cpu_count
THEN cpu_count
ELSE ([cpu_count] / [hyperthread_ratio]) * (([cpu_count] - [hyperthread_ratio]) / ([cpu_count] / [hyperthread_ratio]))
END AS [total_number_of_cores]
,[cpu_count] AS [number_of_virtual_cpus]
,(
SELECT [c_val]
FROM @xp_msver
WHERE [c_name] = 'Platform'
) AS [cpu_category]
FROM [sys].[dm_os_sys_info]
)
SELECT [number_of_physical_cpus]
,[number_of_cores_per_cpu]
,[total_number_of_cores]
,[number_of_virtual_cpus]
,LTRIM(RIGHT([cpu_category], CHARINDEX('x', [cpu_category]) - 1)) AS [cpu_category]
FROM [ProcessorInfo]
  • number_of_physical_cpus: Anakart üzerindeki gerçek fiziksel işlemci (Socket) sayısı.
  • number_of_cores_per_cpu: Her bir işlemci soketi içindeki fiziksel çekirdek sayısı.
  • total_number_of_cores: Hiper-threading hariç, sistemdeki toplam gerçek işlem birimi.
  • number_of_virtual_cpus: İşletim sisteminin ve SQL Server’ın gördüğü toplam mantıksal iş parçacığı (Threads).
  • cpu_category: İşlemci mimarisinin (x64/x86) ham metin analizi.

Aşağıdaki komut ile sistem üzerinde aktif olan CPU sayısını görebiliriz. SQL Server, iş yüklerini yönetmek için kendi iç “Scheduler” yapısını kullanır. Bu komut donanımın SQL katındaki yansımasını gösterir. SQL Server’ın işletim sistemi seviyesinde kaç farklı kanaldan iş emri yürütebildiğini doğrulamak için kullanılır.

SELECT 
    scheduler_count AS [Scheduler Count],
    cpu_count AS [CPU Count],
    hyperthread_ratio AS [Hyperthread Ratio]
FROM sys.dm_os_sys_info;
  • Scheduler Count: SQL Server tarafından oluşturulan ve yönetilen aktif zamanlayıcı sayısı.
  • CPU Count: SQL Server OS katmanında görünen toplam mantıksal işlemci.
  • Hyperthread Ratio: Numa Node başına düşen iş parçacığı sayısını göstermektedir.

Aşağıdaki komut sorguların paralellik limitlerini (Max Degree of Parallelism) mevcut donanım gerçekleriyle kıyaslamak için kritik öneme sahiptir.

SELECT 
    cpu_count AS [Çekirdek Sayısı],
    hyperthread_ratio AS [Hyperthread Oranı],
    cpu_count/hyperthread_ratio AS [Fiziksel CPU Sayısı],
    (SELECT CAST(value_in_use AS INT) FROM sys.configurations WHERE name = 'max degree of parallelism') AS [MaxDOP]
FROM 
    sys.dm_os_sys_info;
  • Çekirdek Sayısı: Toplam mantıksal işlemci kapasitesi.
  • Hyperthread Oranı: Verimlilik katsayısı.
  • Fiziksel CPU Sayısı: Donanımsal işlemci adedi.
  • MaxDOP: Geçerli paralellik ayarı (Bu değerin fiziksel çekirdek sayısıyla uyumu performans için hayati önem taşır).

SQL Server versiyonu ve donanım kısıtlamaları arasındaki ilişkiyi (örneğin Standard Edition çekirdek sınırı) hızlıca teyit etmeye yarar. Bazen kullanmış olduğunuz sql server sürümü tüm donanımı kullanıp kullanmadığını kontrol etmek için aşağıdaki komut kullanılmaktadır.

	SELECT 
    @@VERSION AS [SQL Server Sürümü],
    cpu_count AS [Toplam Çekirdek Sayısı],
    hyperthread_ratio AS [Hyperthread Oranı],
    cpu_count/hyperthread_ratio AS [Fiziksel CPU Sayısı]
FROM 
    sys.dm_os_sys_info;
  • SQL Server Sürümü: SQL Server’ın sürüm numarası ve edisyon bilgisi.
  • Toplam Çekirdek Sayısı: Mantıksal işlem birimleri.
  • Hyperthread Oranı: İş parçacığı yoğunluğu.
  • Fiziksel CPU Sayısı: Toplam soket miktarı.

Veritabanı yöneticileri için işlemci mimarisini doğru analiz etmek, sadece bir envanter çalışması değil, aynı zamanda performans darboğazlarını önceden tespit etme sanatıdır. Yukarıdaki komutlar aracılığıyla elde edilen veriler; doğru MaxDOP yapılandırması, lisanslama optimizasyonu ve iş yükü dağılımı için temel teşkil eder. Donanımı SQL Server’ın gözünden görmek, sistemin gerçek limitlerini anlamanın en güvenilir yoludur.

Başka makalede görüşmek dileğiyle..

Gıybet etmeyin. Hucurat-12

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir