آموزش Activity Monitoring در SQL Server

آموزش Activity Monitoring در SQL Server

Activity Monitoring ابزاری قدرتمند و در دسترس در SQL Server Management Studio ( SSMS) است که برای مانیتورینگ لحظه ای ، شناسایی کوئری های سنگین ، عیب یابی بلاکینگ و بهبود عملکرد دیتابیس می توانید از آن استفاده کنید . در این مقاله آموزشی به بررسی قسمت های مختلف آن می پردازیم

Activity Monitoring یکی از قدرتمندترین و در دسترس ترین ابزارهای مانیتورینگ داخلی SQL Server است که به شما امکان می دهد عملکرد لحظه ای Instance خود را بررسی کنید . این ابزار به صورت پیش فرض به همراه SQL Server Management Studio (SSMS) نصب می شود و نیازی به نصب جداگانه یا تنظیمات اضافی ندارد .

با استفاده از Activity Monitoring می توانید :

  • Performance Bottleneck ها را شناسایی کنید .
  • کوئری های سنگین و طولانی را پیدا کنید .
  • مشکلات Lock و Bloking را عیب یابی کنید .
  • منابع مصرفی مانند CPU ، I/O و حافظه را پایش کنید .

نحوه دسترسی به Activity Monitoring :

  • SQL Server Management Studio (SSMS) را اجرا کنید .
  • در پنجره Object Explorer بر روی نام Instance راست کلیک کنید .
  • از منوی باز شده ، گزینه Activity Monitor را انتخاب کنید .
  • صفحه Activity Monitor باز می شود  .

صفحه Activity Monitor شامل پنج قسمت می باشد :

قسمت Overview :

این قسمت شامل چهار نمودار اصلی می باشد که تصویری کلی از سلامت و بار کاری Instance را به شما نمایش می دهد :

Processor Time % :

    درصد استفاده از CPU توسط SQL Server را نشان می دهد . این معیار نشان دهنده میزان فشار محاسباتی بر روی پردازنده است ، عدد بالای 80% به معنای فشار زیاد CPU است .

Waiting Tasks :

    تعداد تسک هایی که در لحظه در حالت انتظار هستند را نمایش می دهد . اگر این عدد به طور مدارم بالا باشد ، نشان دهنده وجود Bottleneck در منابعی مانند I/O ، قفل یا حافظه است .

Database I/O (MB/sec) :

    میزان Read/Write بر روی فایل های دیتابیس را بر حسب مگابایت بر ثانیه نشان می دهد . این معیار برای بررسی فشار بر روی دیسک ها حیاتی است .

Batch Requests/sec :

    تعداد درخواست های دسته ای ( Batch ) که در هر ثانیه به SQL Server ارسال می شوند . هر دستور T-SQL  ( مانند SELECT ,  INSERT , UPDATE ) یک Batch Request محسوب می شود . این عدد نشان دهنده میزان ترافیک و بار تراکنشی است .

نکته فنی : اگر نمودار Waiting Tasks بالا باشد و Processor Time% پایین ، معمولا مشکل از I/O با Locks است ولی اگر هر دو بالا باشند احتمالا CPU گلوگاه اصلی است .

 

قسمت Processes :

این قسمت مهمترین بخش Activity Monitor است و تمام Sessionها و کوئری های در حال اجرا را به صورت Live نمایش می دهد . ستونهای کلیدی این بخش عبارتند از :

  • Session ID : شناسه یکتای هر اتصال به SQL Server می باشد ، نکته مهم، Session ID های کمتر از 50 متعلق به فرآیندهای سیستمی خود SQL Server می باشند و Session ID های بالاتر از 50 متعلق به اتصالات کاربران می باشد .
  • User Process : اگر مقدار این ستون 1 باشد نشان دهنده یک فرآیند کاربری است و اگر 0 باشد مربوط به فرآیندهای سیستمی داخلی می باشد .
  • Login : نام کاربری ( Login ) که اتصال را ایجاد کرده است . برای مثال sa یا Domain\Username .
  • Database : نام دیتابیسی که کوئری در حال اجرا بر روی آن می باشد .
  • Task State : وضعیت اجرای تسک ها را نشان می دهد . مقادیر رایج :
    • Running : در حالت اجرا بر روی CPU .
    • Suspended : منتظر آزاد شدن یک منبع .
    • Sleeping : اتصال باز است اما هیچ درخواستی در حال اجرا نیست .
    • Pending : منتظر زمان CPU است .
  • Command : نوع فرمان یا دستوری که در حال اجرا است ، مانند SELECT ، UPDATE ، DELETE ، BACKUP DATABASE یا AWAITING COMMAND ( منتظر دستور بعدی ) .
  • Application : نام برنامه ای که درخواست را ارسال کرده است .
  • Wait Time (ms) :مدت زمانی که تسک در حالت انتظار قرار داشته است . اگر این عدد بالاست، نشان دهنده منتظر بودن برای یک منبع خاص است ( این زمان بر حسب میلی ثانیه است ) .
  • Blocked By : این ستون نشان می دهد که session  جاری توسط کدام session دیگر بلاک شده است . اگر مقدار 0 باشد یعنی بلاک نشده است . اگر عددی مانند 55 باشد ، یعنی session جاری منتظر است تا session شماره 55 کار خود را تمام کرده و قفل را آزد کند .
  • Head Blocker : این ستون مشخص می کند کدام session ، ریشه زنجیره بلاکینگ است . به عبارتی دیگر ، session ی که خودش توسط هیچکس بلاک نشده، اما دیگر session ها را بلاک کرده است . برای رفع بلاکینگ باید این session را پیدا کرده و Kill کنیم .

 

قسمت Resource Waites :

این قسمت به شما نشان می دهد که SQL Server در حال انتظار چه نوع منابعی است و این انتظارها چه مدتی طول کشیده است . اطلاعات این بخش بر حسب میلی ثانیه نمایش داده می شود . انواع Resource Waite ها عبلارتند از :

  • Lock : منتظر آزاد شدن قفل روی یک ردیف ، Page یا جدول می باشد . این نوع نشان دهنده بلاکینگ است .
  • Latch : منتظر یک ساختار حافظه داخلی است .
  • Buffer I/O : منتظر خواندن یا نوشتن از روی دیسک می باشد و نشان دهنده فشار بر روی I/O است .
  • Logging : منتظر نوشتن لاگ تراکنش بر روی دیسک . معمولا در تراکنش های سنگین رخ می دهد .
  • Memory : منتظر تخصیص حافظه می باشد و نشان دهنده کمبود حافظه است .

نکته : اگر بیشترین زمان انتظار مربوط به Buffer I/O باشد باید به فکر بهینه سازی دیسک ها یا ایندکس ها باشید . اگر Lock باشد باید به عیب یابی بلاکینگ بپردازید .

 

قسمت Data File I/O :

در این قسمت ، اطلاعات مربوط به عملیات Read و Write بر روی فایل های فیزیکی دیتابیس ( mdf , ldf , ndf ) نمایش داده می شود .

  • ستون Database : نام دیتابیس .
  • ستون File : نام فیزیکی فایل .
  • ستون Reads(MB/sec) : میزان داده خوانده شده در ثانیه .
  • Write (MB/sec) : میزان داده نوشته شده در ثانیه .
  • ستون Response Time (ms) : میانگین زمان پاسخ دهی ( تاخیر ) برای هر عملیات I/O . هر چه این عدد پایین تر باشد ، عملکرد دیسک بهتر است .

نکته : اگر Response Time بالای 20 میلی ثانیه باشد ، نشان دهنده عملکرد ضعیف زیرساخت ذخیره سازی است .

 

قسمت Recent Expensive Queries :

این بخش لیستتی از کوئری هایی که اخیرا اجرا شده اند و Cost بالایی داشته اند را نمایش می دهد . 

  • CPU Time : زمان مصرفی CPU .
  • Logical Reads : تعداد Page های خوانده شده از حافظه کش .
  • Logical Writes : تعداد Page های نوشته شده در حافظه .
  • Physical Reads : تعداد Page های خوانده شده از دیسک .

همچنین نام دیتابیس و متن کوئری در این بخش قابل مشاده است .

 

قسمت Active Expensive Queries :

این بخش فقط کوئری هایی را نشان می دهد که در همین لحظه در حال اجرا هستند و هزینه بالایی دارند . اطلاعات نمایش داده شده شامل موارد زیر است :

  • CPU Time : زمان مصرفی CPU تا این لحظه .
  • Physical Reads : تعداد خواندن از دیسک تا این لحظه .
  • Logical Reads : تعداد خواندن از حافظه کش .
  • Session ID : شناسه session ی که کوئری را اجرا می کند .
  • Database : نام دیتابیس مقصد .
  • Plan Handle / Query Text : نمایش بخشی از متن کوئری .

کاربرد : اگر سیستم شما  به یکباره کند شد ، با مراجعه به این بخش می توانید سریعا کوئری های سنگین و مشکل ساز را پیدا کرده و آنها را Kill یا بهینه سازی کنید .

 

نکات طلایی برای عیب یابی با Activity Monitor :

کندی ناگهانی سیستم :

    به قسمت Processes بروید و ستون Task State را بررسی کنید . اگر تعداد زیادی Suspended دیدید ، به ستون Blocked By  نگاه کنید تا زنجیزه بلاکینگ را پیدا کنید .

مصرف بالای CPU :

    به نمودار Processor Time%  در Overview نگاه کنید . سپس به سربرگ Active Expensive Queries بروید و کوئری های با CPU Time بالا را بیابید .

مشکل در دیسک ها :

    به سربرگ Data File I/O بروید و ستون Response Time را بررسی کنید . اگر بالاست به Resource Waite بروید و میزان Buffer I/O را ببینید .

کوئری های تکراری سنگین :

    به قسمت Recent Expensive Querries بروید و الگوهای تکراری را پیدا کنید . این کوئری ها کاندیدای خوبی برای ایندکس گذاری یا بازنویسی هستند .

💬 نظرات (1)

Sara Javid
2026/07/07 ساعت 13:36

مطلب آموزنده ای بود

📝 ثبت نظر جدید