Bu yazıda SQL Server DMV ve DMF Serimizin 7.’sine devam edeceğiz. Bu başlık altında Memory özelinde çokça kullandığımız performans counter’lara göz gezdireceğiz. Ve bu çıktıların ne olduklarına bakacağız.
Memory ile ilişkili Performance Counter’lara göz gezdirmek istediğimizde;
-- Get size of SQL Server Page in bytes DECLARE @pg_size INT, @Instancename varchar(50) SELECT @pg_size = low from master..spt_values where number = 1 and type = 'E' -- Extract perfmon counters to a temporary table IF OBJECT_ID('tempdb..#perfmon_counters') is not null DROP TABLE #perfmon_counters SELECT * INTO #perfmon_counters FROM sys.dm_os_performance_counters; -- Get SQL Server instance name as it require for capturing Buffer Cache hit Ratio SELECT @Instancename = LEFT([object_name], (CHARINDEX(':',[object_name]))) FROM #perfmon_counters WHERE counter_name = 'Buffer cache hit ratio'; SELECT * FROM ( SELECT 'Total Server Memory (GB)' as Cntr, (cntr_value/1048576.0) AS Value FROM #perfmon_counters WHERE counter_name = 'Total Server Memory (KB)' UNION ALL SELECT 'Target Server Memory (GB)', (cntr_value/1048576.0) FROM #perfmon_counters WHERE counter_name = 'Target Server Memory (KB)' UNION ALL SELECT 'Connection Memory (MB)', (cntr_value/1024.0) FROM #perfmon_counters WHERE counter_name = 'Connection Memory (KB)' UNION ALL SELECT 'Lock Memory (MB)', (cntr_value/1024.0) FROM #perfmon_counters WHERE counter_name = 'Lock Memory (KB)' UNION ALL SELECT 'SQL Cache Memory (MB)', (cntr_value/1024.0) FROM #perfmon_counters WHERE counter_name = 'SQL Cache Memory (KB)' UNION ALL SELECT 'Optimizer Memory (MB)', (cntr_value/1024.0) FROM #perfmon_counters WHERE counter_name = 'Optimizer Memory (KB) ' UNION ALL SELECT 'Granted Workspace Memory (MB)', (cntr_value/1024.0) FROM #perfmon_counters WHERE counter_name = 'Granted Workspace Memory (KB) ' UNION ALL SELECT 'Cursor memory usage (MB)', (cntr_value/1024.0) FROM #perfmon_counters WHERE counter_name = 'Cursor memory usage' and instance_name = '_Total' UNION ALL SELECT 'Total pages Size (MB)', (cntr_value*@pg_size)/1048576.0 FROM #perfmon_counters WHERE object_name= @Instancename+'Buffer Manager' and counter_name = 'Total pages' UNION ALL SELECT 'Database pages (MB)', (cntr_value*@pg_size)/1048576.0 FROM #perfmon_counters WHERE object_name = @Instancename+'Buffer Manager' and counter_name = 'Database pages' UNION ALL SELECT 'Free pages (MB)', (cntr_value*@pg_size)/1048576.0 FROM #perfmon_counters WHERE object_name = @Instancename+'Buffer Manager' and counter_name = 'Free pages' UNION ALL SELECT 'Reserved pages (MB)', (cntr_value*@pg_size)/1048576.0 FROM #perfmon_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Reserved pages' UNION ALL SELECT 'Stolen pages (MB)', (cntr_value*@pg_size)/1048576.0 FROM #perfmon_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Stolen pages' UNION ALL SELECT 'Cache Pages (MB)', (cntr_value*@pg_size)/1048576.0 FROM #perfmon_counters WHERE object_name=@Instancename+'Plan Cache' and counter_name = 'Cache Pages' and instance_name = '_Total' UNION ALL SELECT 'Page Life Expectency in seconds', cntr_value FROM #perfmon_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Page life expectancy' UNION ALL SELECT 'Free list stalls/sec', cntr_value FROM #perfmon_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Free list stalls/sec' UNION ALL SELECT 'Checkpoint pages/sec', cntr_value FROM #perfmon_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Checkpoint pages/sec' UNION ALL SELECT 'Lazy writes/sec', cntr_value FROM #perfmon_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Lazy writes/sec' UNION ALL SELECT 'Memory Grants Pending', cntr_value FROM #perfmon_counters WHERE object_name=@Instancename+'Memory Manager' and counter_name = 'Memory Grants Pending' UNION ALL SELECT 'Memory Grants Outstanding', cntr_value FROM #perfmon_counters WHERE object_name=@Instancename+'Memory Manager' and counter_name = 'Memory Grants Outstanding' UNION ALL SELECT 'process_physical_memory_low', process_physical_memory_low FROM sys.dm_os_process_memory WITH (NOLOCK) UNION ALL SELECT 'process_virtual_memory_low', process_virtual_memory_low FROM sys.dm_os_process_memory WITH (NOLOCK) UNION ALL SELECT 'Max_Server_Memory (MB)' , [value_in_use] FROM sys.configurations WHERE [name] = 'max server memory (MB)' UNION ALL SELECT 'Min_Server_Memory (MB)' , [value_in_use] FROM sys.configurations WHERE [name] = 'min server memory (MB)' UNION ALL SELECT 'BufferCacheHitRatio', (a.cntr_value * 1.0 / b.cntr_value) * 100.0 FROM sys.dm_os_performance_counters a JOIN (SELECT cntr_value,OBJECT_NAME FROM sys.dm_os_performance_counters WHERE counter_name = 'Buffer cache hit ratio base' AND OBJECT_NAME = @Instancename+'Buffer Manager') b ON a.OBJECT_NAME = b.OBJECT_NAME WHERE a.counter_name = 'Buffer cache hit ratio' AND a.OBJECT_NAME = @Instancename+'Buffer Manager' ) AS D;
Total Server Memory: SQL Server’ın ne kadar Memory kullandığını gösterir.
Target Server Memory: Bu değer, SQL Server’ın ne kadar Memory almaya çalıştığını gösterir. SQL Server için maksimum sunucu belleği değerini yapılandırmadıysanız Target Server Memory miktarı, Total Server Memory belleğinden yaklaşık 5 MB daha az olacaktır. Bu değer büyük sistemler için yetersiz kalabilir.
Connection Memory (GB): Server’ın Connection’ları devam ettirebilmek için kullandığı toplam dinamik bellek miktarını belirtir.
Lock Memory (GB): Server’ın lock Page’ler için kullandığı toplam memory miktarını gösterir.
SQL Cache Memory: Dinamik SQL cümlecikleri için ayrılan toplam bellek.
Optimizer Memory: Sorgu optimizasyonu için ayrılan bellek.
Granted Workspace Memory: hash, sort, bulk copy, ve index oluşturma operasyonları için halihazırda verilen memory miktarı.
Cursor memory usage: Cursor’lar için kullanılan memory miktarı.
Free pages: SQL Server tarafından taahhüt edilen ancak şu anda kullanılmayan page’lerdeki boş alan miktarı.
Reserved Pages: Buffer Pool’da reserve edilmiş page’lerin sayısını gösterir.
Stolen pages (MB): SQL Server tarafından kullanılan ancak Veritabanı page’leri için kullanılmayan bellek. sort veya hash işlemleri için veya locklar, transactionlar ve connection bilgileri gibi veri yapılarını depolamak için kullanılır.
Cache Pages: Cache’deki 8 KB’lık page sayısı.
Page life expectancy: içinde data bulunduran page’lerin, diğer page’lere yer açmak üzere boşaltılmadan önce buffer cache’de ortalama ne kadar süre kalacağını gösterir. Bu değer her 4 GB Memory için 300 ila 600 arasında olması gerekmektedir.
Free list stalls / sec: Free Page’ye yönelik talebin, kullanılabilir hale gelene kadar beklemek zorunda kaldığı süre.
Checkpoint Pages/sec: Chekpoint prosesi esnasında saniyede buffer’dan commit olan page sayısını gösterir.
Lazy writes / sec: Chekpoint operasyonu bekliyorken, buffer cache’de yer alan dirty page’lerin saniyede kaç kez temizlenmesi gerektiği bilgisini gösterir.
Memory Grants Outstanding: Memory’e başarılı olarak alınan process’lerin sayısı. Değerin yüksek olması user processlerin fazla olduğunu gösterir.
Memory Grants Pending: Memory’ alınmak üzere bekleyen process’lerin sayısı. Değerin yüksek olması SQL Server’ın ek memory ihtiyacı olduğunu gösterir.
process_physical_memory_low: düşük fiziksel memory durumunun tespit edildiğini bildirir. Değerin 0 olması Memory pressure olmadığını gösterir.
proses_virtual_memory_low: Düşük sanal memory durumunun tespit edildiğini belirtir. Değerin 0 olması Memory pressure olmadığını gösterir.
Min Server Memory: SQL Server’ın alması gereken minimum memory miktarı gösterir.
Max Server Memory: SQL Server’ın işletim sisteminden alabileceği maksimum memory miktarını gösterir. Default değer 2147483647 olarak gelir.
Buffer cache hit ratio: Diskten okumaya gerek kalmadan arabellek havuzunda bulunan sayfaların yüzdesi. Bu oran’ın %100 değerlerine yakın olması memory dar boğazı olmadığını gösterir. %95 altında olması durumun memory dar boğazı yaşanabilir.
0 Yorum