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

SQL Server DMV ve DMF – 5

SQL Server 2 gün önce

Bu yazıda SQL Server’da DMV ve DMF serisinin 4.süne devam edeceğiz. Bir önceki yazımızda sys.dm_os_sys_info DMV’si altında neleri göreceğimizi ve sciprtler ile baktığımızda neleri okuyabileceğimizi görmüştük. Özellikle CPU kaynaklarının SQL server tarafından nasıl kullanıldığı öğrenmiştik. Bu yazıda sys.dm_os_sys_info ve memory ile ilişkili DMV’ler yardımı ile Memory kaynaklarının nasıl kullanıldığı ve burada nelerin dikkat edilmesi hususunda bilgileri öğrenmiş olacağız. Bildiğiniz gibi kaynaklara ilişkin bilgilere sys.dm_os_sys_info üzerinden erişebiliyorduk. Buffer Pool kullanım durumunu kontrol etmek istediğimde;   SELECT (physical_memory_kb)/1024 AS physical_memory_MB, (committed_kb)/1024.0 as BPool_Committed_MB, (committed_target_kb)/1024.0 as BPool_Commit_Tgt_MB, (visible_target_kb)/1024.0 as BPool_Visible_MB FROM  sys.dm_os_sys_info; Görsel – 1 physical_memory_MB: Fiziksel olarak server üzerindeki memory miktarı. visible_target_KB: Buffer Pool içerisinde yer alan 8KB’lık Buffer’ların sayısını gösterir. Bu değerin çok düşük olması Memory hataları veya memory dump alınmasına neden olacaktır. committed_kb: SQL Server tarafından kullanılan Actual Memory değeridir. committed_target_kb: SQL Server tarafından tüketilmek için denenen memory miktarıdır. committed_target_kb > committed_kb durumunda; SQL Server Mmemory Manager ek memory ihtiyacı […]

FAILOVER CLUSTER INSTANCE (FCI) FAILOVER

SQL Server 3 hafta önce

Bu makalede Windows Failover Cluster Instance (WFCI) kurulu olan sunucular arasında failover işlem adımlarından bahsedeceğim. SQL Server Failover Cluster Instance (WFCI) ortamımızda sunucular arasında failover işlemini gerçekleştirmeden önce dikkat edilmesi gereken adımlar: Ortamın hızlı bir şekilde failover işlemini gerçekleştirebilmesi için veri tabanlarının .ldf file ‘larının shrink edilmesi ve veri tabanlarına checkpoint atılması gerekmektedir. İlgili clusterda bulunan sunucuların versiyon ve konfigürasyon ayarlarının eşlenik olması gerekmektedir. Failover Cluster Instance ortak disk yedekli sunucu mantığı ile çalıştığı için uygulama veri tabanları ve sistem veri tabanlarını barındıran disklerin tüm sunucularda zone işlemlerinin gerçekleştirilmiş olması gerekmektedir. Yetkili kullanıcı olan service kullanıcılarının computer manager ‘dan sunucu üzerinde gerekli yetkilendirmelerinin yapılması. SQL Server Failover Cluster Instance (WFCI) ortamımızda sunucular arasında failover işlemi için iki yöntem bulunmaktadır bunlar; 1) Failover Cluster Manager > Roles > ilgili role sağ tık > Move > Select Node > failover edilmek istenilen node seçilir ve failover işlemi gerçekleşir. Ancak burada bu yönetimin […]

FAILOVER CLUSTER INSTANCE (WFCI) SERVER ÇIKARMA

SQL Server 4 hafta önce

Bu makalede Windows Failover Cluster Instance (WFCI) kurulu olan sunucu ortamlarından belirlenen bir sunucunun çıkarılma adımlarından bahsedeceğim. Görsel – 1 SQL Server Failover Cluster Instance (WFCI) ortamında sunucuda service kontrol dışında bir down olma durumu ile karşılaşıldığında yukarıda Görsel – 1 ‘de görüntüleyebileceğiniz şekilde (Failover Cluster Manager > Roles > Resources > Policies ) bu durumda service nasıl bir aksiyon alacağına karar verme konumundayız.   Görsel – 2   Peki şimdi SQL Server Failover Cluster Instance (WFCI) ortamında sunucuda service kontrol dışında bir down olma durumu ile karşılaşıldığında yukarıda Görsel – 2 ‘de görüntüleyebileceğiniz şekilde (Failover Cluster Manager > Roles > ilgili role sağ tık > properties > Failover) ne kadar süre ile kaç kez tekrar failover olmaya çalışacağını görüntüleyebilirsiniz.   Görsel – 3 Şimdi sunucumuzu clusterdan çıkaracağız, “Failover Cluster Manager > Nodes > ilgili node sağ tık > Stop Cluster Service > ilgili node sağ tık > Evict” adımlarını […]

0 Yorum

Yorum Yaz

Rastgele