PLE (Page Life Expectancy ) Nedir ve Ne İşe Yarar

Page ‘lerin Memory de tutulma zamanını aldığımız bir performance counter’dır. Bize sonucu saniye cinsinde döner ve Best Practice olarak 300 altında olmaması istenir.

PLE değerlerinizi belirli periyotlarla izleyerek belirli bir süre  sınır değerin altında seyrettiğini gözlemlediğinizde PLE değerlerinizi yukarı çekecek operasyonları gerçekleştirmeniz gerekecek. Bu operasyonları bir kaç konu altında toplayabiliriz.

PLE değerimizi aşağıdaki script ile kontrol edebiliriz.

SELECT [object_name] ,
[counter_name] ,
[cntr_value]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE ‘%Manager%’
AND [counter_name] = ‘Page life expectancy’;

Scriptimizin sonucunda  görüldüğü üzere 37349 saniye PLE bulunmakta. Bu değer gerçek ortamlar için iyi ve bu ortamları yöneten DBA’ler için de harika bir değer.

Bu değeri hem loglayabileceğimiz hem de daha detaylı saat, dakika, gün bazlı olacak şekilde scriptimizi yazalım.

SELECT @@servername AS INSTANCE ,
[object_name] ,
[counter_name] ,
[cntr_value] AS [Second] ,
[cntr_value] / 60 AS [Minute] ,
[cntr_value] / 3600 AS [Hour] ,
[cntr_value] / 86400 AS [Days]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE ‘%Manager%’
AND [counter_name] = ‘Page life expectancy’;

Hazırladığımız scriptimizi JOB haline getirip belirli periyotlar ile loglayarak anlık olarak PLE ‘yi kontrol edip gerekli analizler sonucunda iyileştirme süreçlerimizi gerçekleştirebiliriz.

PLE LOG Scriptleri

— Demo veritabanımızı oluşturuyoruz.
CREATE DATABASE DBA_Performance
GO
USE DBA_Performance
GO
— PLE değerlerini loglayacağımız tablomuzu oluşturuyoruz.
CREATE TABLE PLE_Log
(
[Id] BIGINT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
[Instance_Name] NVARCHAR(100),
[Object_Name] NVARCHAR(150),
[Counter_Name] NVARCHAR(100),
[Second] INT,
[Minute] INT,
[Hour] INT,
[Day] INT,
[Collate_Date] DATETIME DEFAULT GETDATE()
)

— PLE değerlerimizi alıp loglayan Procedure’ümüz.
CREATE PROC SQLTR_SP_PLE_LOG
AS
BEGIN
INSERT INTO [DBA_Performance].[dbo].[PLE_LOG]
(
[Instance_Name],
[Object_Name],
[Counter_Name],
[Second],
[Minute],
[Hour],
[Day]
)
SELECT @@servername AS INSTANCE ,
[object_name] ,
[counter_name] ,
[cntr_value] AS [Second] ,
[cntr_value] / 60 AS [Minute] ,
[cntr_value] / 3600 AS [Hour] ,
[cntr_value] / 86400 AS [Days]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE ‘%Manager%’
AND [counter_name] = ‘Page life expectancy’;
END
— Procedure EXEC ediliyor ve loglama yapılıyor.
EXEC SQLTR_SP_PLE_LOG

— Logladığımız tablomuzda değrlerimizi SELECT çekiyoruz.
SELECT
[Id],
[Instance_Name],
[Object_Name],
[Counter_Name],
[Second],
[Minute],
[Hour],
[Day],
[Collate_Date]
FROM dbo.PLE_Log WITH (NOLOCK)

Yukarıdaki script ile tüm PLE sürecimizi yapımızda loglayacak şekilde tasarımını sağlamış olduk.

Biz tablomuza Select çektiğimizde aşağıdaki sonucu almış oluyoruz:

SELECT
[Id],
[Instance_Name],
[Object_Name],
[Counter_Name],
[Second],
[Minute],
[Hour],
[Day],
[Collate_Date]
FROM dbo.PLE_Log WITH (NOLOCK)

PLE ‘yi aynı zamanda PerfMon ile de görebiliriz.

PLE ‘yi aynı zamanda PerfMon ile de görebiliriz.

PLE düşük olduğunda ne yapabiliriz?

Bu durumda envanterinize bakıp makinede gerçekten source bakımından bir dar boğazda mısınız onu araştırmalısınız fakat bunlardan önce ilk etapta sizi yoran ve Memory ‘i durmadan boşaltan Query’lerinizi elirlemelisiniz. DB yapınızdaki Indexleme için ön analiz çalışması yapmalısınız, yani sisteminizde Duplicate Index , Missing Index , Bad ındex ve Unused Indexler mevcut mu belirlemeli ve mevcut ise gerekli çalışmaları planlamalısınız.

Maintenance’larınız çalışıyor mu, çalışıyor ise  doğru mu çalışıyor? ( Index Bakımları, İstatistik güncellemeleri vb. )

Source ‘unuz yeterli mi? RAM ‘iniz gerçekten yeterli mi yeterli ise SQL Server memory Config ‘inizi yaptınız mı?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: