Sistem performans yönetimi ve hata ayıklama süreçlerinde, sunucunun ne kadar süredir ayakta olduğunu bilmek temel bir gerekliliktir. Beklenmedik bir yeniden başlatma (restart), donanım arızası, Windows güncellemeleri veya SQL Server servis kesintileri hakkında ipuçları verir. Paylaşılan SQL sorguları, bu verileri doğrudan SQL Server motoru üzerinden çekmemizi sağlar.
SQL Server’ın işletim sistemiyle ne kadar senkronize olduğunu ve en son ne zaman yeniden başlatıldığını sys.dm_os_sys_info dinamik yönetim görünümünü (DMV) kullanarak hesaplar.
SQL Server’ın üzerinde koştuğu Windows’un bilgilerine ulaşmak için;
SELECT * FROM sys.dm_os_windows_info;
Aşağıdaki sorgu, işletim sistemi ile veritabanı servisinin başlangıç zamanlarını kıyaslayarak aradaki farkı analiz eder.
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;

- last_WindowsServer_restart: Windows Server işletim sisteminin en son ne zaman yeniden başlatıldığını (boot zamanı) tarih ve saat olarak gösterir.
- sqlserver_start_time: SQL Server servisinin (instance) en son ne zaman çalışmaya başladığını ifade eder.
- recovery_time_seconds: Windows açıldıktan ne kadar “saniye” sonra SQL Server’ın aktif olduğunu gösterir. Bu süre genellikle sunucu açılışındaki donanım kontrolleri ve veritabanlarının “Recovery” (kurtarma) sürecini temsil eder.
Aşağıdaki sorgu, sistemin yeniden başlatılmasından bu yana geçen süreyi farklı zaman birimlerine bölerek daha okunabilir bir rapor sunar.
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];

- ms_since_restart: Sistemin açılışından itibaren geçen süreyi milisaniye cinsinden verir.
- seconds_since_restart: Sistemin açık kaldığı toplam süreyi saniye cinsinden gösterir.
- minutes_since_restart: Sistemin açık kaldığı süreyi dakika cinsinden (ondalık olarak) gösterir.
- hours_since_restart: Sistemin kaç saattir kesintisiz çalıştığını ifade eder.
- days_since_restart: Sunucunun kaç gündür restart edilmediğini gösterir. (Özellikle uzun süreli çalışma durumlarını takip etmek için en çok bu kolona bakılır).
Bu sorguların çıktıları, sistemin kararlılığını ölçmek için kritik veriler sağlar. Eğer last_WindowsServer_restart ile sqlserver_start_time tarihleri birbirinden farklıysa, bu durum Windows kapanmadığı halde SQL Server servisinin bir çökme (crash) veya manuel müdahale ile yeniden başlatıldığını kanıtlar. Ayrıca days_since_restart değerinin çok yüksek olması, sistemin güncel yamaları alıp almadığının kontrol edilmesi gerektiğini hatırlatan bir proaktif izleme aracıdır.
Başka makalede görüşmek dileğiyle..
Alçak gönüllü şekilde yürüyün. Furkan-63
