SQL Server DMV ve DMF – 4

Bu yazımızda DMV ve DMF serisinin 3.’süne bakıyor olacağız. Konuya İlişkin daha detaylı bilgiye sahip olmak isterseniz ya da önceki serileri okumak isterseniz. SQL Server DMV ve DMF – I ve SQL Server DMV – II makalelerine göz gezdirilebilirsiniz. Bu yazımızda SQL Server üzerinde yoğun olarak kullandığımız ve SQL Operating system ile ilişkili bilgilere erişmek istediğimizde ihtiyacımız olan DMV ve DMF’lere göz gezdireceğiz. Bildiğiniz gibi DMV ve DMF’ler problem teşhisinde kullanıldığı gibi monitoring etmek içinde çokça kullanılmaktadır. Özellikle Operating system ile ilgili kullanmak istediğimizd sys.dm_os ile başlayanları kullanabiliriz. Peki biz hangi DMV’leri ne için ve nasıl okuyoruz? SQL Server’ın üzerinde koştuğu Windows’un bilgilerine ulaşmak için; SELECT * FROM sys.dm_os_windows_info; Görsel – 1   Windows_sku: Stock Keeping Unit Stock Keeping Unit değeri Windows_release sonucunun hexadecimal çıktısıdır. Görsel – 2 48 = 0x30 olduğunu biliyoruz. Bu değeri hesaplamak için Hexadecimal değeri Binary değere convert ederek elde edebilirsiniz.   SQL Server ve üzerinde […]

SQL Server DMV ve DMF – 4

Bu yazımızda DMV ve DMF serisinin 3.’süne bakıyor olacağız. Konuya İlişkin daha detaylı bilgiye sahip olmak isterseniz ya da önceki serileri okumak isterseniz. SQL Server DMV ve DMF – I ve SQL Server DMV – II makalelerine göz gezdirilebilirsiniz.

Bu yazımızda SQL Server üzerinde yoğun olarak kullandığımız ve SQL Operating system ile ilişkili bilgilere erişmek istediğimizde ihtiyacımız olan DMV ve DMF’lere göz gezdireceğiz. Bildiğiniz gibi DMV ve DMF’ler problem teşhisinde kullanıldığı gibi monitoring etmek içinde çokça kullanılmaktadır. Özellikle Operating system ile ilgili kullanmak istediğimizd sys.dm_os ile başlayanları kullanabiliriz.

Peki biz hangi DMV’leri ne için ve nasıl okuyoruz?

SQL Server’ın üzerinde koştuğu Windows’un bilgilerine ulaşmak için;

SELECT * FROM sys.dm_os_windows_info;

Görsel – 1

 

Windows_sku: Stock Keeping Unit

Stock Keeping Unit değeri Windows_release sonucunun hexadecimal çıktısıdır.

Görsel – 2

48 = 0x30 olduğunu biliyoruz. Bu değeri hesaplamak için Hexadecimal değeri Binary değere convert ederek elde edebilirsiniz.

 

SQL Server ve üzerinde koştuğu Windows’un kaynak bilgisine sahip olmak istediğimizde;

sys.dm_os_sys_info

DMV’si sql server’ın kullandığı CPU ve Memory kaynaklarına ilişkin detaylı olarak bilgilendirme yapacaktır.

Aynı zamanda Windows ve sql server’ın ne zaman restart olduğu bilgisine erişebilirim.

SELECT

DATEADD(s,((-1)*(OSI.[ms_ticks]/1000)),GETDATE()) AS last_WindowsServer_restart,

OSI.sqlserver_start_time,

(DATEDIFF(s, DATEADD(s,((-1)*(OSI.[ms_ticks]/1000)),GETDATE()), OSI.sqlserver_start_time)) AS recovery_time_seconds

FROM sys.[dm_os_sys_info] OSI;

Görsel – 3

Server’ın ne kadar süre önce restart olduğu bilgisine erişmek istediğimizde;

SELECT

[ms_ticks] AS ms_since_restart,

[ms_ticks]/1000 AS seconds_since_restart,

CAST([ms_ticks]/1000/60.0 AS DECIMAL(15,2)) AS minutes_since_restart,

CAST([ms_ticks]/1000/60/60.0 AS DECIMAL(15,2)) AS hours_since_restart,

CAST([ms_ticks]/1000/60/60/24.0 AS DECIMAL(15,2)) AS days_since_restart,

DATEADD(s,((-1)*([ms_ticks]/1000)),GETDATE()) AS time_of_last_restart

FROM sys.[dm_os_sys_info];

Görsel – 4

CPU hakkında bilgilere erişmek istediğimde;

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]

 

Yukarıdaki script ile fiziksel core sayısı, cpu başına düşen core sayısına, toplam core sayısına, sanal core sayısına ve kategori sayısına ulaşabiliriz.

SQL Server’ın ve Diğer Process’lerin güncel olarak ne kadar CPU kullandığına bakmak istersek;

 

set nocount on declare @ts_now2 bigint

 
select @ts_now2 = cpu_ticks /( cpu_ticks / ms_ticks ) /*cpu_ticks / convert(float, cpu_ticks_in_ms)*/ from sys.dm_os_sys_info

select top 1 record_id,dateadd(ms, -1 * (@ts_now2 - [timestamp]), GetDate()) as EventTime,

SQLProcessUtilization,SystemIdle,100 - SystemIdle - SQLProcessUtilization as OtherProcessUtilization

from (select record.value('(./Record/@id)[1]', 'int') as record_id,

record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') as SystemIdle,

record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') as SQLProcessUtilization,

timestamp from (select timestamp, convert(xml, record) as record

from sys.dm_os_ring_buffers

where ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' and record like '%<SystemHealth>%') as x

) as y order by record_id desc
 

Bu süreci saat saat izlemek istersek eğer;

DECLARE @ms_ticks_now BIGINT

SELECT @ms_ticks_now = ms_ticks

FROM sys.dm_os_sys_info;

SELECT TOP 100 record_id

,dateadd(ms, - 1 * (@ms_ticks_now - [timestamp]), GetDate()) AS EventTime

,[SQLProcess (%)]

,SystemIdle

,100 - SystemIdle - [SQLProcess (%)] AS [OtherProcess (%)]

FROM (

SELECT record.value('(./Record/@id)[1]', 'int') AS record_id

,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle

,record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS [SQLProcess (%)]

,[timestamp]

FROM (

SELECT [timestamp]

,convert(XML, record) AS record

FROM sys.dm_os_ring_buffers

WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'

AND record LIKE '%<SystemHealth>%'

) AS x

) AS y

ORDER BY record_id DESC

Görsel – 5

 

 

Benzer Yazılar

HashTable HashIndex HashPartition

SQL Server 6 gün önce

Bu makalede modern veri tabanı sistemlerinde verimliliği artıran HashTable, HashIndex ve Hashpartition yapılarını inceleyeceğiz. Bu kavramların nasıl çalıştığını, avantajlarını, dezavantajlarını ve pratik kullanım örneklerini SQL kodlarıyla açıklayacağız.İçindekilerHash Table Nedir?Hash Index Nedir?Hash Partitioning Nedir? Hash tabanlı bir veri yapısı tasarlayacağımız ortamda bilmemiz gereken özellikle hash partitioning ya da bucketing gibi bölümlendirme stratejilerinde sıkça karşımıza çıkacak bir parametre olan bucket_count, verilerin kaç adet bucket içine dağıtılacağını belirleyen sayısal bir değerdir. Her bir bucket, belirli bir hash değeri aralığına denk gelir ve veriler, belirli bir kolona uygulanan hash fonksiyonunun çıktısına göre bu bucket ‘lardan birine atanır. Peki, bu bizim için neden önemli? Doğru belirlenmiş bir bucket_count değeri, verilerin eşit dağılımı sağlar bu da sorgu performansını iyileştirir. Bucket sayısı, paralel çalışan işlemlerin sayısını doğrudan etkiler, örneğin bir tablo 16 bucket sahipse, aynı anda 16 thread veriyi işleyebilir. Aynı bucket sayısıyla bölünmüş tablolar arasında yapılan join işlemleri daha verimli olur. CREATE TABLE UserActiviy ( Id_user […]

In-Memory Table and Native Stored Procedures

SQL Server 1 ay önce

Bu makalede 2014 yılında yayınlanan In-Memory Table OLTP(Online Transaction Processing) Engine yapısından bahsedeceğim.İçindekilerKaynak: In-Memory Table, adından da anlaşılacağı üzere, verileri fiziksel disk yerine RAM üzerinde saklandığı özel bir tablo türüdür. Bu yapı, geleneksel disk tabanlı tablolara kıyasla çok daha hızlı veri okuma ve yazma performansı sunar çünkü disk erişimi esnasında yaşanan darboğaz sorununa alternatif bir çözüm sunmuştur. Verinin, buffer pool içinde cache’lenmesi, düşük gecikme(low latency) ve yüksek throughput en büyük avantajlarıdır. Özellikle yüksek hacimli veri işleyen, çok sayıda eş zamanlı işlem gerçekleştiren veya gerçek zamanlı yanıt süresi gerektiren sistemlerin kullanımı oldukça yaygındır. (Örneğin: finansal platformlar, IoT işlemleri, sipariş işlemleri) Avantajlarını göz önünde bulundurarak o zaman her ortama bunu yapalım diyebiliriz 🙂 pahalı bir donanım olan RAM ‘den sınırsız bir şekilde elinizde bulunduruyor olmanız gerekebilir çünkü In-Memory bulunduğu ortama yüksek RAM maliyeti, kendine has filegroup yapısı ile yönetimsel zorluklar, failover sürelerinin uzaması gibi dezavantajları da beraberinde getirmektedir. In-Memory Tabloların kendine özgü […]

SMART BACKUP

SQL Server 1 ay önce

Bu makalede SQL Server 2017 versiyonuyla gelen DMV ‘ler ile kullanımı kolaylaşan bir özellik olan Smart Backup dan bahsedeceğim. Bu makaleye başlamadan şunu belirtmekte fayda var; bu özelliği üçüncü parti yazılımlar veya eklentiler ile yapabilmek mümkün MSSQL haricinde diğer ilişkisel veri tabanı sistemlerinde de buna benzer özellikler tanımlanabilir, kullanılabilir. Bu makalemizin anlaşılabilirliğini artırmak adına öncelikle performans ve veri bütünlüğü açısından hayati öneme sahip olan Checkpoint kavramından bahsetmek istiyorum; SQL Server, veri değişikliklerini önce RAM’de (buffer cache) tutar, bu sırada log dosyasına (LDF) işlemi yazar. Checkpoint olduğunda, bu değişmiş (dirty) geçici verileri .LDF dosyasından kalıcı hale getirir .MDF dosyasına (diske) yazar. Checkpoint, varsayılan olarak her 60 saniyede bir çalışır ancak SQL Server 2012 ile indirect checkpoints tanıtıldı ve veri tabanı bazlı olarak ayarlanabilir. Şimdi iki Checkpoint yönetimine daha yakından bakarak artı ve eksilerinden bahsedelim; Otomatik checkpoint modunda, tüm buffer pool’daki sayfalar taranır ve değişmiş sayfalar bulunur bu ilk baktığımızda bizim için […]

0 Yorum

Yorum Yaz

Rastgele