شمارنده Page Life Expectancy در SQL Server | آموزش، مثال و Performance

آموزش کامل شمارنده Page Life Expectancy در SQL Server

توسط admin | گروه SQL Server | 1405/04/31

نظرات 0

آموزش کامل شمارنده Page Life Expectancy در SQL Server

مقدمه و هدف مقاله

شمارنده Page Life Expectancy یکی از موضوع‌های مهم پایش Microsoft SQL Server است. هدف آن برآورد مدت ماندگاری صفحه داده در Buffer Pool بدون دسترسی مجدد است. در یک سامانه عملیاتی، عدد این شاخص زمانی ارزش دارد که همراه زمان نمونه‌برداری، بار کاری، رخدادهای استقرار و وضعیت منابع تحلیل شود؛ در غیر این صورت یک مقدار جدا می‌تواند هم هشدار کاذب بسازد و هم یک مشکل واقعی را پنهان کند.

در این راهنما از سطح پایه تا اجرای Query، تفسیر واحد «ثانیه»، نمونه‌برداری، نگهداری تاریخچه، طراحی هشدار و ارتباط با Lazy writes/sec پیش می‌رویم. مثال‌ها برای SQL Server نوشته شده‌اند و خروجی نمونه دارند تا ساختار نتیجه پیش از اجرا روشن باشد. با این حال اعداد خروجی نمایشی‌اند و مقدار واقعی به نسخه، Uptime، سخت‌افزار و الگوی مصرف شما وابسته است.

اصل کلیدی در تحلیل Page Life Expectancy این است که ابتدا نوع Counter مشخص شود. کاهش ناگهانی نسبت به خط مبنای همان سرور معمولاً از فشار حافظه یا اسکن حجیم خبر می‌دهد؛ عدد ۳۰۰ یک قانون همیشگی نیست. همچنین باید دانست که در سرورهای NUMA باید PLE هر Buffer Node نیز بررسی شود و فقط مقدار کلی مبنا قرار نگیرد. این دو نکته جلوی رایج‌ترین برداشت‌های اشتباه در داشبوردهای دست‌ساز را می‌گیرند.

برای دیدن نقشه کامل شاخص‌ها و ارتباط این موضوع با سایر حوزه‌های حافظه، I/O، Query Processing، Lock و Transaction به راهنمای جامع شمارنده‌های کارایی SQL Server بازگردید.

تعریف، منبع داده و کاربرد

Page Life Expectancy در دسته «Buffer Manager» قرار می‌گیرد. منبع اصلی این مقاله نمای مدیریتی sys.dm_os_performance_counters است؛ نمایی که بسیاری از Counterهای موتور را از داخل T-SQL قابل‌خواندن می‌کند. مزیت این روش، امکان ساخت Collector، گزارش و Health Check بدون وابستگی به رابط گرافیکی Performance Monitor است.

کاربرد واقعی این شاخص فقط نمایش یک کارت سبز یا قرمز نیست. روند شمارنده Page Life Expectancy می‌تواند برای مقایسه قبل و بعد از Deploy، تحلیل ساعات اوج، ظرفیت‌سنجی، ارزیابی اثر Query جدید، تشخیص Regression و ساخت گزارش SLA به کار رود. برای نتیجه معتبر باید Counter را در بازه کافی و با فاصله نمونه‌برداری ثابت یا ثبت‌شده جمع‌آوری کرد.

دسترسی به DMVهای سیستمی ممکن است به مجوزهای مشاهده وضعیت سرور یا مجوز متناظر نسخه جدید نیاز داشته باشد. حساب Collector را با اصل حداقل دسترسی بسازید، خطای دسترسی را ثبت کنید و از اجرای Collector با حساب مدیریتی روزمره خودداری نمایید. در محیط Always On نیز نام Replica و Instance را همراه Snapshot نگه دارید.

نحو پایه

SELECT object_name, counter_name, instance_name, cntr_value, cntr_type
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy';

ستون‌ها و پارامترهای مهم

  • object_name: نام شیء Performance Counter همراه پیشوند Instance؛ برای قابل‌حمل‌بودن می‌توان suffix گروه را با دقت فیلتر کرد.
  • counter_name: نام دقیق شاخص؛ در این مقاله نام موردنظر یا نگاشت واقعی آن به‌صورت Unicode استفاده می‌شود.
  • instance_name: زیرنمونه‌ای مانند نام پایگاه داده، نوع Lock یا _Total؛ انتخاب اشتباه آن موجب دوباره‌شماری یا تحلیل دامنه نادرست می‌شود.
  • cntr_value: مقدار خام bigint؛ معنی آن بدون cntr_type و فرمول Counter کامل نیست.
  • cntr_type: نوع Windows Performance Counter که مشخص می‌کند مقدار مستقیم، تجمعی یا Fraction چگونه تبدیل شود.
  • واحد تحلیلی: ثانیه. واحد را در نام ستون تاریخچه، Tooltip داشبورد و متن هشدار صریح نگه دارید.

نوع خروجی و تفسیر

خروجی خام cntr_value از نوع bigint است، اما خروجی تحلیلی می‌تواند تعداد، نرخ decimal یا درصد باشد. درباره Page Life Expectancy، کاهش ناگهانی نسبت به خط مبنای همان سرور معمولاً از فشار حافظه یا اسکن حجیم خبر می‌دهد؛ عدد ۳۰۰ یک قانون همیشگی نیست. اگر تبدیل انجام می‌شود، مقدار خام را نیز نگه دارید تا امکان بازحساب، بررسی Formula و مهاجرت ابزار مانیتورینگ وجود داشته باشد.

ویژگیمقدار یا راهنمادلیل اهمیت
نام انگلیسیPage Life Expectancyکلید جست‌وجو و مستندسازی
دستهBuffer Managerقرارگیری در داشبورد و Runbook
واحدثانیهجلوگیری از برداشت عددی اشتباه
سیگنال مکملLazy writes/secتحلیل هم‌بستگی و کاهش هشدار کاذب
محدودیتدر سرورهای NUMA باید PLE هر Buffer Node نیز بررسی شود و فقط مقدار کلی مبنا قرار نگیرد.تعیین مرز اعتبار نتیجه

مثال‌های عملی و قابل اجرا

مثال 1: خواندن مقدار فعلی

مقدار جاری Page Life Expectancy از ردیف دقیق DMV خوانده می‌شود. Gauge برخلاف شمارنده تجمعی برای نمایش وضعیت لحظه‌ای به محاسبه Delta نیاز ندارد.

SELECT object_name, counter_name, instance_name, cntr_value, cntr_type
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy';
CounterCurrentValueUnit
Page life expectancy900ثانیه

نکته کاربردی: وجود ردیف و cntr_type را پیش از ساخت داشبورد کنترل کنید؛ نام Object شامل پیشوند Instance است.

مثال 2: تبدیل واحد برای گزارش مدیریتی

نمایش واحد مناسب مانع برداشت اشتباه می‌شود. شمارنده‌های حافظه از KB به MB و GB تبدیل می‌شوند و سایر Gaugeها با نام واحد اصلی ارائه می‌گردند.

SELECT cntr_value AS CurrentValue
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy';
مقدار تبدیل‌شدهواحد
300ثانیه

نکته کاربردی: واحد را در نام ستون یا Metadata داشبورد ثبت کنید و تبدیل باینری 1024 را با تبدیل ده‌دهی مخلوط نکنید.

مثال 3: ثبت سه Snapshot کوتاه

برای دیدن نوسان، سه نمونه با زمان دقیق در یک جدول موقت ثبت می‌شود. این الگو برای عیب‌یابی کوتاه مناسب است و در Job واقعی باید بدون WAITFOR اجرا شود.

CREATE TABLE #Samples
(
    SampleTime datetime2(3) NOT NULL,
    CounterValue bigint NULL
);

INSERT #Samples
SELECT SYSDATETIME(), cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy';
WAITFOR DELAY '00:00:02';
INSERT #Samples
SELECT SYSDATETIME(), cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy';
WAITFOR DELAY '00:00:02';
INSERT #Samples
SELECT SYSDATETIME(), cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy';

SELECT * FROM #Samples ORDER BY SampleTime;
DROP TABLE #Samples;
SampleTimeCounterValue
2026-07-22 22:30:043600

نکته کاربردی: برای روند تولیدی از SQL Agent یا ابزار مانیتورینگ استفاده کنید؛ نگه‌داشتن Session با WAITFOR در تعداد زیاد مناسب نیست.

مثال 4: خلاصه کمینه، میانگین و بیشینه

یک سری نمونه نمایشی با Aggregate خلاصه می‌شود. Min و Max دامنه نوسان را نشان می‌دهد و Average باید در کنار صدک‌ها و مدت مشاهده تفسیر شود.

DECLARE @H table (SampleTime datetime2(0), Value bigint);
INSERT @H VALUES
('2026-07-22T10:00:00', 300),
('2026-07-22T10:01:00', 302),
('2026-07-22T10:02:00', 3600);

SELECT MIN(Value) AS MinValue,
       AVG(1.0 * Value) AS AvgValue,
       MAX(Value) AS MaxValue
FROM @H;
MinValueAvgValueMaxValue
30019503600

نکته کاربردی: میانگین بلندمدت می‌تواند جهش کوتاه را مخفی کند؛ مقدار خام و Max هر پنجره را نیز نگه دارید.

مثال 5: مقایسه با سیگنال مرتبط

Page Life Expectancy در کنار Lazy writes/sec تفسیر می‌شود تا وضعیت ظرفیت از اثر بارکاری جدا گردد.

SELECT counter_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name IN
      (N'Page life expectancy', N'Lazy writes/sec', N'Page reads/sec');
Page Life ExpectancyLazy writes/secوضعیت
300نمونه مرتبطقابل بررسی

نکته کاربردی: نتیجه هم‌بستگی است و به‌تنهایی علیت را اثبات نمی‌کند؛ Wait Stats و Query Plan مرحله بعدی تحلیل هستند.

مثال 6: رفتار امن هنگام نبود داده

MAX روی مجموعه خالی NULL می‌دهد. COALESCE همراه یک پرچم Availability اجازه می‌دهد نبود Counter با مقدار واقعی صفر اشتباه نشود.

SELECT COALESCE(MAX(cntr_value), 0) AS DisplayValue,
       CASE WHEN COUNT_BIG(*) = 0 THEN N'Missing' ELSE N'Available' END AS Availability
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy';
DisplayValueAvailability
0Missing

نکته کاربردی: در پایگاه تاریخچه ستون IsAvailable نگه دارید؛ پرکردن کورکورانه شکاف‌ها با صفر نمودار و هشدار را خراب می‌کند.

مثال 7: تشخیص مقدار مرزی

این Query وضعیت مشاهده‌شده را با دو مرز نمونه طبقه‌بندی می‌کند. جهت مطلوب بودن Gaugeها یکسان نیست؛ برای نمونه Memory Grants Pending کمتر بهتر است ولی PLE معمولاً بیشتر بهتر است.

DECLARE @Observed bigint = 300;

SELECT @Observed AS ObservedValue,
       CASE
           WHEN @Observed >= 3600 THEN N'مرز بالا'
           WHEN @Observed <= 300 THEN N'مرز پایین'
           ELSE N'میانی'
       END AS BoundaryState;
ObservedValueBoundaryState
300مرز پایین

نکته کاربردی: قانون هشدار نهایی را متناسب با معنای Counter معکوس یا مستقیم کنید و از Baseline چند هفته‌ای کمک بگیرید.

مثال 8: گزارش وضعیت همراه Startup Time

زمان شروع سرویس کنار مقدار ثبت می‌شود تا تغییر رفتار پس از Restart، Patch یا Failover قابل ردیابی باشد.

SELECT SYSDATETIME() AS SampleTime,
       osi.sqlserver_start_time,
       pc.cntr_value
FROM sys.dm_os_sys_info AS osi
CROSS JOIN
(
    SELECT cntr_value
    FROM sys.dm_os_performance_counters
    WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy'
) AS pc;
SampleTimeStartTimeValue
2026-07-22 22:302026-07-20 08:153600

نکته کاربردی: رویدادهای نگهداری را روی Timeline داشبورد علامت بزنید تا تغییرات ناشی از عملیات با مشکل کارایی اشتباه نشود.

مثال 9: روش نادرست Delta و روش درست Gauge

کم‌کردن دو مقدار Gauge معمولاً فقط میزان تغییر را می‌دهد و نرخ اصلی Counter نیست. نسخه درست مقدار جاری را با زمان نمونه گزارش می‌کند.

DECLARE @Old bigint = 300,
        @Current bigint = 303;

SELECT @Current - @Old AS ChangeOnly,
       @Current AS CorrectCurrentValue,
       SYSDATETIME() AS SampleTime;
ChangeOnlyCorrectCurrentValue
3303

نکته کاربردی: Delta می‌تواند برای شیب روند مفید باشد، اما نام و واحد آن باید Change باشد نه مقدار اصلی Gauge.

مثال 10: Snapshot کم‌هزینه برای Collector

یک Query فیلترشده زمان، مقدار و نوع شمارنده را با هم تحویل می‌دهد. خواندن DMV سبک است، اما Poll بسیار پرتکرار و نگهداری بی‌حد تاریخچه هزینه ایجاد می‌کند.

SELECT SYSDATETIME() AS SampleTime,
       counter_name, cntr_value, cntr_type
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%:Buffer Manager'
  AND counter_name = N'Page life expectancy'
OPTION (RECOMPILE);
SampleTimeCounterValue
2026-07-22 22:30Page life expectancy3600

نکته کاربردی: دوره نمونه‌برداری را بر اساس سرعت تغییر Counter انتخاب و تاریخچه قدیمی را Rollup کنید.

خطاهای رایج و روش اصلاح

نخستین خطا در Page Life Expectancy اعتماد مستقیم به نام Counter و نمایش cntr_value بدون بررسی cntr_type است. پسوند /sec همیشه تضمین نمی‌کند مقدار آماده نرخ باشد و Counterهای Fraction نیز Base لازم دارند. Formula را در Metadata تعریف کنید و برای هر نوع، آزمون واحد با داده ثابت بنویسید.

خطای دوم، نادیده‌گرفتن دامنه Instance است. در گروه‌های Locks و Databases، _Total و ردیف‌های جزئی هم‌زمان وجود دارند. جمع‌کردن همه ردیف‌ها معمولاً دوباره‌شماری می‌سازد. برای شمارنده Page Life Expectancy نام Instance انتخاب‌شده را همراه داده ذخیره و در عنوان نمودار نمایش دهید.

خطای سوم، تفسیر یک نقطه بدون Baseline است. وضعیت Page Life Expectancy بین سامانه OLTP، انبار داده، گزارش شبانه و دوره نگهداری متفاوت است. حد هشدار را از صدک‌های تاریخچه سالم استخراج کنید و رخداد را تنها زمانی بحرانی بدانید که چند نمونه ادامه یافته و یک سیگنال مکمل مانند Lazy writes/sec نیز آن را تأیید کند.

خطای چهارم، نادیده‌گرفتن Restart، Failover و شکاف داده است. Startup Time، نام Replica و Availability هر Snapshot را ثبت کنید. اختلاف منفی را نرخ منفی گزارش نکنید و داده Missing را با صفر واقعی یکی ندانید. این تفکیک برای نمودار، SLA و الگوریتم تشخیص ناهنجاری ضروری است.

نکات کارایی و طراحی Collector

خواندن هدفمند sys.dm_os_performance_counters معمولاً عملیات سبکی است، اما طراحی نامناسب Collector می‌تواند صدها Query تکراری، اتصال کوتاه‌عمر و حجم زیاد تاریخچه تولید کند. Counterهای لازم را در یک Statement بگیرید، زمان مشترک ثبت کنید و محاسبات Rate یا Ratio را در لایه‌ای قابل‌آزمون انجام دهید.

برای عیب‌یابی زنده می‌توان فاصله یک تا پنج ثانیه داشت، ولی نگهداری بلندمدت اغلب با سی تا شصت ثانیه آغاز می‌شود. داده خام قدیمی را به بازه‌های پنج‌دقیقه‌ای و ساعتی Rollup کنید و Min، Max، Avg، Count و در صورت امکان صدک را نگه دارید. Retention باید با نیاز قانونی و هزینه ذخیره‌سازی سازگار باشد.

در تحلیل Page Life Expectancy هرگز Counter را جایگزین Query Profiling نکنید. شمارنده ناحیه مشکل را مشخص می‌کند؛ برای علت ریشه‌ای باید Query Store، Actual Plan، Wait Stats، Extended Events و آمار فایل یا سیستم‌عامل به کار روند. این زنجیره از Metric به Evidence و سپس Action، Runbook حرفه‌ای را می‌سازد.

بهترین روش‌ها

  • نام SQL Server، Instance، Replica، نسخه و زمان شروع سرویس را همراه هر Snapshot نگه دارید.
  • مقدار خام، cntr_type، واحد، Formula و مقدار تبدیل‌شده را از هم تفکیک کنید.
  • Page Life Expectancy را حداقل با Lazy writes/sec و یک شاخص Latency یا Wait مرتبط مقایسه نمایید.
  • Baseline ساعات عادی، اوج، Batch شبانه و پایان ماه را جدا بسازید؛ میانگین کلی به‌تنهایی کافی نیست.
  • هشدار را بر اساس تداوم و دامنه اثر ایجاد کنید و برای آن مالک، شدت و Runbook تعیین نمایید.
  • Collector را پس از ارتقای SQL Server، تغییر Edition، Failover یا تغییر Collation دوباره اعتبارسنجی کنید.
  • Queryهای نمونه را ابتدا در محیط آزمایش اجرا کنید و از WAITFOR در Jobهای پرتعداد استفاده نکنید.
  • به‌جای حذف تاریخچه، Rollup و فشرده‌سازی انجام دهید تا مقایسه فصلی و ظرفیت‌سنجی باقی بماند.

کاربردهای واقعی در سازمان

در یک سامانه فروش آنلاین، روند شمارنده Page Life Expectancy می‌تواند روی Timeline سفارش، Deploy و کمپین بازاریابی قرار گیرد. اگر تغییر شاخص فقط با افزایش سفارش رخ دهد، موضوع ظرفیت است؛ اگر بدون رشد کسب‌وکار و بعد از انتشار نسخه جدید ایجاد شود، Regression محتمل‌تر خواهد بود.

در گزارش ظرفیت ماهانه، به‌جای ارائه انبوه عدد خام، روند، صدک اوج، مدت وضعیت غیرعادی، اثر روی زمان پاسخ و اقدام اصلاحی را خلاصه کنید. این قالب میان تیم پایگاه داده، زیرساخت، توسعه و مدیریت زبان مشترک می‌سازد و تصمیم ارتقا یا اصلاح کد را مستند می‌کند.

برای عملیات روزانه، هشدار Page Life Expectancy باید لینک Query تشخیصی، Snapshot سیگنال‌های مکمل و راه بازگشت داشته باشد. تماس صرف با DBA بدون Evidence زمان بازیابی را افزایش می‌دهد؛ یک Runbook کوتاه با مرحله تأیید، تعیین دامنه، یافتن Query و اقدام کم‌خطر نتیجه بهتری دارد.

سؤالات متداول

Page Life Expectancy چیست و چه چیزی را اندازه می‌گیرد؟

برآورد مدت ماندگاری صفحه داده در Buffer Pool بدون دسترسی مجدد است. کاهش ناگهانی نسبت به خط مبنای همان سرور معمولاً از فشار حافظه یا اسکن حجیم خبر می‌دهد؛ عدد ۳۰۰ یک قانون همیشگی نیست. این Counter باید در کنار زمان نمونه، نوع شمارنده و شرایط بارکاری ثبت شود تا عدد خام به اطلاعات عملیاتی تبدیل گردد.

چگونه مقدار Page Life Expectancy را از SQL Server بخوانیم؟

نمای sys.dm_os_performance_counters منبع داخلی مناسب است. Object و counter_name را دقیق فیلتر کنید، Instance را در شمارنده‌های چندنمونه‌ای مشخص سازید و cntr_type را نیز ذخیره کنید. این مقدار را مطابق cntr_type تفسیر کنید و در صورت Gauge بودن همان Snapshot جاری را گزارش دهید.

آیا استفاده تجاری از داشبورد Page Life Expectancy ارزش دارد؟

بله؛ روند درست می‌تواند افت ظرفیت را پیش از تبدیل‌شدن به قطعی آشکار کند، زمان عیب‌یابی را کاهش دهد و برای تصمیم خرید سخت‌افزار شواهد بسازد. ارزش اقتصادی زمانی ایجاد می‌شود که هشدار به Runbook، مسئول و اقدام روشن متصل باشد.

برای گزارش مدیریتی Page Life Expectancy چه اطلاعاتی لازم است؟

حداقل مقدار جاری یا نرخ، Baseline، انحراف، بازه مشاهده و اثر روی سرویس گزارش شود. واحد ثانیه باید صریح باشد و نمودار با Deploy، Backup و رخدادهای کسب‌وکار هم‌تراز گردد تا مدیر علت جهش را بهتر درک کند.

تفاوت Page Life Expectancy با Lazy writes/sec چیست؟

Page Life Expectancy بر «برآورد مدت ماندگاری صفحه داده در Buffer Pool بدون دسترسی مجدد» تمرکز دارد، در حالی که Lazy writes/sec زاویه مکمل دیگری از همان سامانه ارائه می‌کند. هیچ‌یک جای دیگری را نمی‌گیرد و هم‌بستگی روند آن‌ها برای تشخیص فشار، ظرفیت یا رقابت قابل‌اعتمادتر است.

برای پیاده‌سازی حرفه‌ای پایش Page Life Expectancy از کجا شروع کنیم؟

ابتدا Counter را در محیط آزمایش کشف کنید، فرمول تبدیل و واحد را مستند سازید، سپس Collector زمان‌بندی‌شده و جدول تاریخچه بسازید. در پروژه‌های حساس می‌توان از خدمات مشاوره و اجرای پایش SQL Server برای طراحی Retention، داشبورد و Runbook استفاده کرد.

رایج‌ترین خطا هنگام خواندن Page Life Expectancy چیست؟

رایج‌ترین خطا نادیده‌گرفتن cntr_type، Instance یا Restart سرویس است. در سرورهای NUMA باید PLE هر Buffer Node نیز بررسی شود و فقط مقدار کلی مبنا قرار نگیرد. همچنین نبود ردیف نباید به‌طور خام با صفر واقعی جایگزین شود؛ Availability باید جداگانه ذخیره گردد.

پایش Page Life Expectancy چه اثری بر Performance دارد؟

خواندن هدفمند این DMV معمولاً سبک است، ولی Poll بسیار پرتکرار، Queryهای تکراری و تاریخچه بدون Rollup هزینه ذخیره‌سازی و تحلیل می‌سازد. چند Counter را در یک Snapshot بخوانید و فاصله نمونه‌برداری را با سرعت تغییر سیگنال هماهنگ کنید.

بهترین روش هشداردهی برای Page Life Expectancy چیست؟

از Baseline همان سرور، آستانه چندسطحی، شرط تداوم چند نمونه و یک سیگنال مکمل استفاده کنید. هشدار باید مقدار، زمان، دامنه، لینک داشبورد و اقدام اولیه داشته باشد؛ یک حد ثابت اینترنتی برای همه سرورها Best Practice نیست.

Page Life Expectancy در کدام نسخه‌های SQL Server قابل استفاده است؟

نمای sys.dm_os_performance_counters در نسخه‌های پشتیبانی‌شده SQL Server در دسترس است، اما نام یا حضور برخی Counterها می‌تواند با نسخه، Edition، سیستم‌عامل و قابلیت فعال متفاوت باشد. همیشه فهرست همان Instance را کشف و کد Collector را در ارتقا آزمایش کنید.

سؤالات مصاحبه‌ای

چرا مقدار خام Page Life Expectancy همیشه قابل گزارش نیست؟

زیرا معنا به cntr_type وابسته است. Gauge مستقیم خوانده می‌شود، نرخ تجمعی به دو Snapshot و زمان نیاز دارد و Fraction باید با Base محاسبه شود. پاسخ حرفه‌ای همچنین Reset پس از Restart و Instanceهای چندگانه را ذکر می‌کند.

چگونه هشدار کاذب Page Life Expectancy را کم می‌کنید؟

با Baseline محلی، شرط تداوم، آستانه چندسطحی، حذف بازه نگهداری و تأیید به کمک Lazy writes/sec. سپس Alert با بازخورد رخدادها تنظیم می‌شود تا حساسیت و دقت به تعادل برسند.

چرا باید مقدار خام و تبدیل‌شده هر دو ذخیره شوند؟

مقدار خام امکان بررسی Formula، بازپردازش تاریخچه و مهاجرت ابزار را حفظ می‌کند؛ مقدار تبدیل‌شده نمایش و جست‌وجوی سریع را ساده می‌سازد. نگهداری Metadata نسخه Formula نیز برای Audit مفید است.

با تغییر sqlserver_start_time چه می‌کنید؟

Collector مرز سری زمانی جدید ثبت می‌کند، نخستین Snapshot را فقط Baseline می‌گیرد و Delta آن را با مقدار پیش از Restart حساب نمی‌کند. رخداد Restart یا Failover نیز روی نمودار علامت‌گذاری می‌شود.

برای ریشه‌یابی وضعیت غیرعادی Page Life Expectancy چه ابزارهایی لازم است؟

بسته به حوزه از Query Store، Wait Stats، Extended Events، Actual Execution Plan، DMVهای Session و Request، آمار فایل و Counterهای سیستم‌عامل استفاده می‌شود. Metric محل شروع است، نه علت قطعی.

چک‌لیست نهایی

  • وجود Counter و نام واقعی آن روی Instance مقصد کنترل شده است.
  • نوع Counter، Formula تبدیل و واحد خروجی مستند شده‌اند.
  • Instance موردنظر صریح است و _Total دوباره جمع زده نمی‌شود.
  • زمان نمونه و Startup Time در تاریخچه ذخیره می‌شوند.
  • Baseline سالم و بازه‌های کسب‌وکار جداگانه وجود دارد.
  • روند با Lazy writes/sec و حداقل یک نشانه Latency یا Wait مقایسه می‌شود.
  • هشدار دارای شرط تداوم، مالک و Runbook عملیاتی است.
  • Retention، Rollup، امنیت حساب Collector و تست بعد از Upgrade تعریف شده‌اند.

جمع‌بندی

شمارنده Page Life Expectancy زمانی مفید است که از یک عدد خام به سری زمانی قابل‌اعتماد تبدیل شود. شناسایی cntr_type، انتخاب Instance، ثبت زمان و Restart، ساخت Baseline و مقایسه با Lazy writes/sec پایه‌های این تبدیل هستند. مثال‌های مقاله نشان دادند چگونه Query اکتشافی، Snapshot، محاسبه امن، هشدار و Collector کم‌هزینه ساخته شود.

برای ادامه مسیر، مقاله مادر شمارنده‌های Performance در SQL Server را ببینید و شاخص‌های مکمل را به داشبورد خود اضافه کنید. برای آموزش پایگاه داده SQL Server، مشاوره و قبول سفارش پروژه‌های برنامه‌نویسی و پایگاه داده در اصفهان نیز می‌توانید با شماره 09131253620 تماس بگیرید.

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر