مدیریت Session های فعال در SQL Server

مدیریت Session های فعال در SQL Server

نوشته شده توسط: ایمان باقری
۰۹ بهمن ۱۴۰۰
زمان مطالعه: 15 دقیقه
۱
(۱)

مقدمه

شما به عنوان کسی که قرار است در یک سازمان بزرگ به عنوان مدیر یا دستیار یک مدیر پایگاه داده مشغول به کار شوید لازم است تا با نکات مربوط به مدیریت Session های فعال آشنا شوید. Session به معنی جلسه نیز می باشد که نشان دهنده هر کانکشنی است که کاربران به دیتابیس متصل می شوند. به عبارت دیگر، اگر شما با Management studio به یک دیتابیس وصل میشوید تا یک کوئری DML را اجرا نمایید در واقع یک یا چند Session را ایجاد نموده اید. همچنین اگر از طریق Store Procedure ها، توابع یا از طریق اپلیکیشن بصورت مستقیم به دیتابیس متصل شوید قطعا چند Session برای شما ایجاد میشود تا DMBS بتواند آنها را مدیریت کند. تمامی Session ها در SQL Server با یک عدد شناسایی میشوند که تخصیص و مدیریت این اعداد با DBMS است.

دوره نگهداری از بانک های اطلاعاتی نیک آموز
برای آنکه بتوانیم Session های فعال را شناسایی کنیم و نحوه ی عملکرد هر یک را مشاهده کنیم راه¬های گوناگونی وجود دارد که در ادامه با هر یک از آنها آشنا می شویم. برای اجرای سناریوهای مربوطه از دیتابیس AdventureWorks استفاده شده است.

روش اول: استفاده از پراسیجر سیستمی sp_who2

Exec sp_who2

استفاده از پراسیجر سیستمی sp_who2

روش دوم: استفاده از DMV سیستمی sys.dm_exec_sessions

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

SELECT *
FROM sys.dm_exec_sessions;

استفاده از DMV سیستمی sys.dm_exec_sessions

اگر بخواهید تنها Session هایی که توسط کاربر ایجاد شده را مشاهده کنید میتوانید با تنظیم پارامتر is_user_process این کار را انجام دهید.

SELECT *
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;

استفاده از DMV سیستمی sys.dm_exec_sessions

روش سوم: استفاده از Activity Monitor

یکی دیگر از روش های مشاهده Session های موجود در SQL Server استفاده از Active Monitor می باشد. برای بازکردن Active Monitor می توانید با راست کلیک کردن روی نام Instance در Management Studio استفاده نمایید.استفاده از Activity Monitor

ستون User Process با مقادیر ۰ و ۱ به ترتیب نشان دهنده Session های سیستمی و کاربری می باشد.

روش چهارم: مشاهده شماره Session جاری

در Management studio به ازای باز کردن هر Session شماره آن در همان Tab نمایش داده می شود. یا میتوان در قسمت Status Bar پایین نیز این اطلاعات را دریافت نمود.مشاهده شماره Session جاری

اما روش اسکریپتی برای یافتن شماره Session کنونی با استفاده از دستور زیر می باشد:

SELECT @@SPID AS CurrentSPIDمشاهده شماره Session جاری

Kill نمودن Session ها

گاهی مشاهده می کنید تمامی کوئری های که قصد اجرای آنرا دارید به کندی انجام می شود و یا یک جدول به علت یک عملیات DML، lock شده است. میتوانید یکسری از Session های باز را Kill کنید تا فرآیند اجرای آنها به اتمام برسد. بعضاً عملیات Kill و Rollback بخودی خود زمان زیادی را صرف می کند و شما نیاز دارید تا ببینید چه میزان از عملیات Rollback انجام گرفته است. برای مشاهده چنین گزارشی می توانید از دستور زیر استفاده نمایید.
فرض کنید عملیات Delete را روی جدول SalesOrderDetail اجرا کنیم.

delete SalesOrderDetail
where SUBSTRING(CarrierTrackingNumber,6,4) between '0000' and '4e1f'
and UnitPrice between 1500 and 1560

پس از چند لحظه دستور زیر را اجرا نمایید تا Session مربوطه Kill گردد.

KILL 84

KILL 84 with STATUSONLY

Kill نمودن Session ها

یافتن Session های فعال و در حال اجرا

با توجه به گستردگی برخی از دیتابیس¬های عملیاتی و غیر عملیاتی در سازمان¬های بزرگ مانند بانک¬ها، سازمانهای دولتی، مخابرات و غیره یک مدیر پایگاه داده لازم دارد تا بتواند مدیریت زمان اجرای Session های دیتابیس را انجام دهد. در این اثنا کاربران سیستم با توجه به نیاز خود گزارشاتی را بر روی این دیتابیس ها اجرا می کنند که باعث اختلال در روند سرویس دهی سیستم می¬گردد. یک مدیر پایگاه داده می تواند بوسیله¬ی DMV سیستمی، Session های فعال را مشاهده کند.

select *
FROM sys.dm_exec_requests

همچنین می­توان با استفاده از دستور زیر کوئری های سنگین در حال اجرا (از لحاظ بار پردازشی و هزینه زمانی) را واکشی نمود.

SELECT r.session_id ,
r.status ,
r.wait_type ,
r.scheduler_id ,
SUBSTRING(qt.text, r.statement_start_offset / 2,


( CASE WHEN r.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE r.statement_end_offset
END - r.statement_start_offset ) / 2) AS statement_executing ,


DB_NAME(qt.dbid) AS DatabaseName ,
OBJECT_NAME(qt.objectid) AS ObjectName ,
r.cpu_time ,
r.total_elapsed_time ,
r.reads ,
r.writes ,
r.logical_reads ,
r.plan_handle
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS qt
ORDER BY r.scheduler_id ,
r.status ,
r.session_id

Kill نمودن Session ها

 

چه رتبه ای می‌دهید؟

میانگین ۱ / ۵. از مجموع ۱

اولین نفر باش

title sign
دانلود مقاله
مدیریت Session های فعال در SQL Server
فرمت PDF
5 صفحه
حجم 1 مگابایت
دانلود مقاله
title sign
معرفی نویسنده
ایمان باقری
مقالات
6 مقاله توسط این نویسنده
محصولات
9 دوره توسط این نویسنده
ایمان باقری

ایمان باقری بیش از 10 سال است که بصورت حرفه‌ای با SQL Server کار می‌کند. و مدرس دوره‌های SQL Server در نیک آموز می‌باشد.

  • مشاور و متخصص در هوش تجاری و SQL Server
  • توسعه دهنده داشبورد های مدیریتی شرکت سام سرویس (سامسونگ)
  • طراحی و توسعه سیستم انبار داده حوزه بانکی
  • طراحی و پیاده سازی سیستم های تحلیلی و گزارشی
پروفایل نویسنده
title sign
دیدگاه کاربران

ثبت نام رایگان در همایش Tehran .NET Conf 2023 ، همین الان کلیک کنید
ثبت نام رایگان..
close-image