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

Page ‘lerin Memory de tutulma zamanını aldığımız bir performance counter der. 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ğiniz de 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 '{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}Manager{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}'
        AND [counter_name] = 'Page life expectancy';

Scriptimizin sonucunda  gördüğünüz üzere 37349 saniye PLE miz 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 '{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}Manager{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}'
        AND [counter_name] = 'Page life expectancy';

Hazırladığımız scriptimizi JOB haline getirip belirli periyotlar ile loglayarak an ve an PLE ‘yi kontrol edip gerkeli analizler sonucnda 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 '{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}Manager{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}'
        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ıda ki script ile tüm PLE sürecimizi yapımızda loglayacak şekilde design ını sağlamış olduk.

Biz tablomuza Select çektiğimizde aşağıda ki 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.

 

Peki PLE ‘miz düşük ve ne yapabilirz diye sorduğunuzu duyar gibiyim ?

Bu durumda envanterinize bakıp makine de 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 leriniz neler ?  DB yapınızda ki Index leme için ön analiz çalışması yapmalısınız yani sisteminizde Duplicate Index , Missing Index , Bad ındex ve Unused Index ler mevcut mu ve mevcut ise gerekli çalışmaları planladınız mı ?

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ı ?

 

İşinize yarayacak Linkler bu süreç kontrolleri için aşağıdadır :

Missing Index  : TIKLA

Long Query : TIKLA

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *