آموزش جامع دستور KILL در SQL Server
مقدمه و مسیر یادگیری
دستور KILL یکی از موضوعهای مهم مجموعه دستورات کاربردی Microsoft SQL Server است. یک Session کاربری را متوقف میکند یا وضعیت Rollback آن را گزارش میدهد و ابزار آخر برای رفع Block جدی یا نشست مخرب است. شناخت این دستور زمانی ارزشمند میشود که علاوه بر شکل نوشتن، محدوده اثر، نیازمندی مجوز، رفتار در تراکنش و پیامد عملیاتی آن نیز روشن باشد.
این مقاله از تعریف و Syntax آغاز میکند، سپس پارامترها، خروجی، مثالهای مستقل، خطاهای رایج، ملاحظات کارایی و بهترین روشهای استفاده را توضیح میدهد. نمونهها از ساده به حرفهای چیده شدهاند و بخش پرسشهای متداول و مصاحبه نیز برای مرور سریع در نظر گرفته شده است.
پیش از اجرای نمونههای مدیریتی روی سرور واقعی، نام Database، مسیر فایل، شناسه Session و سطح دسترسی را با محیط خود تطبیق دهید. نمونهای که شامل Backup، Restore، DBCC یا KILL باشد باید ابتدا در آزمایشگاه و با برنامه بازگشت بررسی شود.
برای دیدن جایگاه این موضوع در کنار سایر فرمانها، راهنمای جامع دستورات کاربردی SQL Server را مطالعه کنید. مقاله مادر مسیر انتخاب میان فرمانهای پیام، خطا، Session، نگهداری و بازیابی را یکجا نشان میدهد.
تعریف دستور KILL
یک Session کاربری را متوقف میکند یا وضعیت Rollback آن را گزارش میدهد و ابزار آخر برای رفع Block جدی یا نشست مخرب است.
در SQL Server هر فرمان در یک Scope مشخص اجرا میشود. هنگام استفاده از KILL باید مشخص باشد اثر آن فقط روی عبارت فعلی، Batch، Session، Database یا کل Instance است. همین تشخیص، پایه جلوگیری از اجرای ناخواسته و طراحی درست آزمون است.
از دید مهندسی، Syntax صحیح شرط لازم است اما کافی نیست. داده ورودی، Collation، نوع داده، تنظیمات SET، سطح جداسازی، مجوز و وضعیت Connection میتوانند نتیجه را تغییر دهند. بنابراین مثال حرفهای باید پیششرط و خروجی کنترلی داشته باشد.
Syntax استاندارد
KILL { session_id | UOW } [ WITH STATUSONLY ];
پارامترها و اجزای مهم
- session_id عدد نشست هدف
- UOW شناسه Unit of Work برای تراکنش توزیعشده
- WITH STATUSONLY برای مشاهده درصد و زمان تقریبی Rollback
خروجی و اثر اجرایی
پیام خاتمه نشست یا گزارش پیشرفت Rollback ایجاد میکند؛ Query جاری و تراکنش باز ممکن است وارد Rollback طولانی شوند.
اگر این دستور در Procedure، Job یا ابزار استقرار استفاده شود، Caller باید بداند موفقیت چگونه اعلام میشود و خطا از چه مسیری برمیگردد. استفاده از Result Set کنترلی، پیام کوتاه، Error Number مشخص یا رکورد لاگ باید بر اساس قرارداد پروژه انتخاب شود.
کاربردهای واقعی در پروژه
سه کاربرد پرتکرار این موضوع عبارتاند از رفع Block اضطراری با تأیید عملیاتی، توقف Query رهاشده و پرمصرف، مدیریت تراکنش توزیعشده Orphaned. در هر سه حالت، مالک عملیات و معیار پذیرش باید قبل از اجرا تعیین شود و تغییر مهم بدون نسخه پشتیبان یا مسیر Rollback انجام نشود.
در پروژه سازمانی بهتر است فرمان داخل یک Runbook یا اسکریپت نسخهبندیشده قرار گیرد. نام سرور و Database از محیط دریافت شود، ولی Identifier پویا فقط پس از اعتبارسنجی و QUOTENAME ساخته شود. مقادیر داده نیز در Dynamic SQL بهصورت پارامتر ارسال شوند.
قاعده عملی: KILL را فقط زمانی اجرا کنید که بتوانید در یک جمله بگویید چه چیزی تغییر میکند، موفقیت چگونه سنجیده میشود و در صورت شکست چه اقدامی انجام خواهد شد.
مثالهای عملی مستقل
ده مثال زیر جنبههای متفاوت KILL را پوشش میدهند. هر نمونه هدف، Query، خروجی مورد انتظار و نکته عملیاتی دارد. فرمانهای دارای اثر مدیریتی با نامها و مسیرهای نمونه نوشته شدهاند و باید پیش از اجرا شخصیسازی و تأیید شوند.
مثال شماره 1: مشاهده نشستهای قابل خاتمه
در این سناریو هدف آن است که «مشاهده نشستهای قابل خاتمه» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT session_id, login_name, host_name, program_name, status
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
ORDER BY session_id;
| خروجی نمونه | تفسیر نتیجه |
|---|
| فهرست Sessionهای کاربری | نتیجه مورد انتظار نشان میدهد سناریوی مشاهده نشستهای قابل خاتمه با موفقیت طی شده است. |
پیش از KILL هویت کاربر، برنامه و میزبان را ثبت کنید. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 2: مشاهده درخواست فعال
در این سناریو هدف آن است که «مشاهده درخواست فعال» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT r.session_id, r.status, r.command, r.blocking_session_id, r.wait_type
FROM sys.dm_exec_requests AS r
WHERE r.session_id <> @@SPID;
| خروجی نمونه | تفسیر نتیجه |
|---|
| درخواستهای فعال بهجز نشست جاری | نتیجه مورد انتظار نشان میدهد سناریوی مشاهده درخواست فعال با موفقیت طی شده است. |
Session بدون Request ممکن است تراکنش باز داشته باشد و باید جداگانه بررسی شود. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 3: یافتن نشست مسدودکننده
در این سناریو هدف آن است که «یافتن نشست مسدودکننده» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT session_id, blocking_session_id, wait_type, wait_time
FROM sys.dm_exec_requests
WHERE blocking_session_id > 0;
| خروجی نمونه | تفسیر نتیجه |
|---|
| زنجیرههای Blocking جاری | نتیجه مورد انتظار نشان میدهد سناریوی یافتن نشست مسدودکننده با موفقیت طی شده است. |
قربانی یا Blocker را صرفاً بر اساس یک Snapshot انتخاب نکنید. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 4: بررسی تراکنشهای نشست
در این سناریو هدف آن است که «بررسی تراکنشهای نشست» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT st.session_id, at.transaction_begin_time, at.transaction_type, at.transaction_state
FROM sys.dm_tran_session_transactions AS st
JOIN sys.dm_tran_active_transactions AS at ON at.transaction_id = st.transaction_id;
| خروجی نمونه | تفسیر نتیجه |
|---|
| نشستها و تراکنشهای فعال | نتیجه مورد انتظار نشان میدهد سناریوی بررسی تراکنشهای نشست با موفقیت طی شده است. |
عمر تراکنش سرنخ مهمی برای تخمین Rollback است. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 5: ساخت فرمان KILL بدون اجرا
در این سناریو هدف آن است که «ساخت فرمان KILL بدون اجرا» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
DECLARE @SessionId int = 57;
IF @SessionId = @@SPID THROW 51030, N'نشست جاری قابل انتخاب نیست.', 1;
SELECT N'KILL ' + CONVERT(nvarchar(11), @SessionId) + N';' AS ReviewedCommand;
| خروجی نمونه | تفسیر نتیجه |
|---|
| متن KILL 57 برای بازبینی | نتیجه مورد انتظار نشان میدهد سناریوی ساخت فرمان KILL بدون اجرا با موفقیت طی شده است. |
تولید و بازبینی فرمان مرحلهای امنتر از اجرای شتابزده است. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 6: Guard برای Session معتبر
در این سناریو هدف آن است که «Guard برای Session معتبر» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
DECLARE @SessionId int = NULL;
IF @SessionId IS NULL
SELECT N'شناسه تعیین نشده؛ فرمان اجرا نشد.' AS Status;
ELSE IF NOT EXISTS (SELECT 1 FROM sys.dm_exec_sessions WHERE session_id = @SessionId)
SELECT N'نشست وجود ندارد.' AS Status;
| خروجی نمونه | تفسیر نتیجه |
|---|
| فرمان بدون شناسه اجرا نمیشود | نتیجه مورد انتظار نشان میدهد سناریوی Guard برای Session معتبر با موفقیت طی شده است. |
پیشفرض NULL مانع خاتمه تصادفی در نمونه و ابزار مدیریتی میشود. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 7: اجرای کنترلشده با تأیید
در این سناریو هدف آن است که «اجرای کنترلشده با تأیید» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
DECLARE @SessionId int = NULL, @Approved bit = 0;
IF @Approved = 1 AND @SessionId IS NOT NULL AND @SessionId <> @@SPID
BEGIN
DECLARE @Sql nvarchar(50) = N'KILL ' + CONVERT(nvarchar(11), @SessionId) + N';';
EXEC (@Sql);
END
ELSE
SELECT N'به علت نبود تأیید، KILL اجرا نشد.' AS Status;
| خروجی نمونه | تفسیر نتیجه |
|---|
| پیام عدم اجرا با مقادیر پیشفرض | نتیجه مورد انتظار نشان میدهد سناریوی اجرای کنترلشده با تأیید با موفقیت طی شده است. |
اجرای Dynamic SQL فقط پس از اعتبارسنجی عددی و تأیید انسانی انجام میشود. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 8: مشاهده وضعیت Rollback
در این سناریو هدف آن است که «مشاهده وضعیت Rollback» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
DECLARE @SessionId int = NULL;
IF @SessionId IS NOT NULL
BEGIN
DECLARE @Sql nvarchar(80) = N'KILL ' + CONVERT(nvarchar(11), @SessionId) + N' WITH STATUSONLY;';
EXEC (@Sql);
END
ELSE
SELECT N'برای STATUSONLY شناسه نشست Rollback را وارد کنید.' AS Status;
| خروجی نمونه | تفسیر نتیجه |
|---|
| پیام راهنما در حالت امن | نتیجه مورد انتظار نشان میدهد سناریوی مشاهده وضعیت Rollback با موفقیت طی شده است. |
STATUSONLY نشست را دوباره Kill نمیکند و فقط پیشرفت Rollback را گزارش میدهد. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 9: نمایش متن Query نشست هدف
در این سناریو هدف آن است که «نمایش متن Query نشست هدف» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
DECLARE @SessionId int = @@SPID;
SELECT r.session_id, t.text
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id = @SessionId;
| خروجی نمونه | تفسیر نتیجه |
|---|
| متن Query فعال نشست جاری در صورت وجود Request | نتیجه مورد انتظار نشان میدهد سناریوی نمایش متن Query نشست هدف با موفقیت طی شده است. |
قبل از خاتمه، Query و Plan باید برای تحلیل ریشهای حفظ شوند. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 10: کنترل مجوز مدیریتی
در این سناریو هدف آن است که «کنترل مجوز مدیریتی» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY CONNECTION') AS CanKillOtherSessions;
| خروجی نمونه | تفسیر نتیجه |
|---|
| 1، 0 یا NULL بر اساس مجوز | نتیجه مورد انتظار نشان میدهد سناریوی کنترل مجوز مدیریتی با موفقیت طی شده است. |
کمترین سطح دسترسی لازم را به نقش عملیاتی اختصاص دهید و اجرای KILL را Audit کنید. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
خطاهای رایج و روش پیشگیری
Rollback ممکن است طولانیتر از اجرای اولیه باشد. این خطا معمولاً زمانی رخ میدهد که نمونه آموزشی بدون بررسی Context یا Scope به Production منتقل میشود. افزودن Guard، نمایش مقصد و توقف سریع با THROW راه پیشگیری قابل اتکایی است.
کشتن Session اشتباه باعث قطعی کاربر یا Job مهم میشود. برای کنترل این وضعیت، ورودیها را پیش از اجرا اعتبارسنجی کنید و نتیجه مرحله حساس را با Query مستقل بسنجید. اگر عملیات قابل Rollback نیست، تأیید دوم و Backup معتبر ضروری است.
KILL درمان ریشهای Blocking و Query کند نیست. مستندسازی رفتار مورد انتظار و ثبت Error Number، Message، State و زمان اجرا باعث میشود تیم به جای آزمون و خطای تکراری، علت را بر اساس شواهد پیدا کند.
- نام Database و Instance پیش از اجرا کنترل شود.
- مجوز حساب اجرا با اصل کمترین دسترسی تعیین شود.
- در مسیر CATCH وضعیت تراکنش و تنظیمات Session تعیین تکلیف شود.
- Query کنترلی پس از عملیات، نتیجه واقعی را ثابت کند.
ملاحظات Performance و همزمانی
قبل از KILL زنجیره Blocking و Transaction را ثبت کنید. ارزیابی کارایی باید بر اساس Baseline و در بازه زمانی مشخص باشد؛ یک Execution Plan یا عدد تجمعی بدون مقایسه، برای تصمیم Production کافی نیست.
در زمان Rollback فرمان را تکرار نکنید؛ STATUSONLY بگیرید. اگر فرمان روی IO، Transaction Log، Worker Thread یا قفل اثر دارد، Wait Type و Blocking همزمان بررسی شود. افزایش سرعت یک Batch نباید با طولانیشدن توقف کاربران جبران شود.
علت Query، Index و مرز تراکنش را پس از حادثه اصلاح کنید. برای اجرای دورهای، Duration، نتیجه، تعداد ردیف، حجم داده و خطاها در جدول تاریخچه ثبت شود. این تاریخچه ظرفیتسنجی و تشخیص تغییر رفتار پس از ارتقای نسخه را ممکن میکند.
بهترین روشها
- هدف و Scope دستور KILL را در ابتدای اسکریپت توضیح دهید.
- از نام Schema، نوع داده و تبدیل صریح استفاده کنید.
- مقادیر فارسی را با N و نوع nvarchar نگه دارید.
- برای خطای واقعی از TRY/CATCH و THROW استفاده کنید.
- تراکنش را کوتاه نگه دارید و XACT_STATE را در CATCH کنترل کنید.
- اسکریپت را تا حد ممکن قابل اجرای مجدد طراحی کنید.
- خروجی کنترلی و معیار پذیرش را در همان فایل قرار دهید.
- نسخه SQL Server و تفاوت محیط Cloud را پیش از استقرار بررسی کنید.
مقایسه KILL با لغو فرمان از کلاینت یا اصلاح علت Blocking پیش از خاتمه Session باید بر اساس نیاز واقعی انجام شود. انتخاب فناوری یا فرمان صرفاً به دلیل آشنایی قبلی، ممکن است خوانایی، سازگاری یا قابلیت پشتیبانی آینده را کاهش دهد.
سؤالات متداول
سؤال 1: دستور KILL در SQL Server دقیقاً چه کاری انجام میدهد؟
دستور KILL یک Session کاربری را متوقف میکند یا وضعیت Rollback آن را گزارش میدهد و ابزار آخر برای رفع Block جدی یا نشست مخرب است. دامنه اثر آن باید پیش از اجرا شناخته شود و نمونه نخست در محیط آزمایش بررسی شود تا انتظار تیم از پیام، Result Set یا تغییر وضعیت Session دقیق باشد.
سؤال 2: برای شروع یادگیری KILL چه پیشنیازی لازم است؟
آشنایی با Batch، Session، نوع داده، مجوز و تفاوت محیط توسعه و تولید کافی است. ابتدا Syntax و مثالهای پایه را اجرا کنید، سپس رفتار خطا و تراکنش را با داده کوچک بسنجید و در پایان سراغ سناریوی سازمانی بروید.
سؤال 3: KILL چه ارزش تجاری برای یک سامانه داده دارد؟
کاربرد درست آن میتواند زمان توقف، خطای انسانی و هزینه عیبیابی را کاهش دهد. ارزش واقعی زمانی ایجاد میشود که فرمان در Runbook، کنترل دسترسی، مانیتورینگ و آزمون بازیابی یا استقرار قرار گیرد، نه اینکه فقط یک دستور منفرد باشد.
سؤال 4: آیا استفاده حرفهای از KILL هزینه پروژه SQL Server را کم میکند؟
بله، اگر همراه استاندارد کدنویسی، بازبینی و پایش باشد. کاهش اجرای اشتباه، کوتاهشدن زمان تشخیص رخداد و قابل تکرار شدن عملیات، هزینه پشتیبانی را پایین میآورد؛ اما خودکارسازی بدون Guard میتواند ریسک را بیشتر کند.
سؤال 5: تفاوت KILL با لغو فرمان از کلاینت یا اصلاح علت Blocking پیش از خاتمه Session چیست؟
KILL برای یک Session کاربری را متوقف میکند یا وضعیت Rollback آن را گزارش میدهد و ابزار آخر برای رفع Block جدی یا نشست مخرب است. گزینه تخصصیتری است، درحالیکه لغو فرمان از کلاینت یا اصلاح علت Blocking پیش از خاتمه Session دامنه یا هدف متفاوتی دارد. انتخاب باید بر اساس نیاز به سازگاری نسخه، اثر روی Session، مدیریت خطا، امکان Rollback و نتیجه قابل مشاهده انجام شود.
سؤال 6: چه زمانی برای پیادهسازی KILL از خدمات مشاوره SQL Server استفاده کنیم؟
اگر فرمان بخشی از مهاجرت، بازیابی، نگهداری Production، تغییر امنیتی یا عملیات دارای SLA است، بازبینی متخصص ارزشمند است. مشاور میتواند پیشنیاز، اسکریپت برگشت، مانیتورینگ، تست بار و معیار پذیرش را قبل از اجرا مشخص کند.
سؤال 7: رایجترین خطا هنگام کار با KILL چیست؟
Rollback ممکن است طولانیتر از اجرای اولیه باشد. همچنین بیتوجهی به Context، مجوز و Scope باعث میشود نمونهای که در آزمایش موفق بوده در Production رفتار دیگری نشان دهد. راهحل، Guard صریح، TRY/CATCH و ثبت ورودیهای واقعی است.
سؤال 8: اثر KILL بر Performance چگونه ارزیابی میشود؟
قبل از KILL زنجیره Blocking و Transaction را ثبت کنید. پیش و پس از اجرا باید Duration، CPU، IO، Waitها، Blocking و حجم Log متناسب با موضوع اندازهگیری شود. یک Snapshot منفرد کافی نیست و مقایسه با Baseline دوره مشابه نتیجه معتبرتری میدهد.
سؤال 9: بهترین روش استفاده از KILL چیست؟
بهترین روش این است که هدف، Context، مجوز، اثر تراکنشی، Timeout و مسیر بازگشت مستند شوند. اسکریپت باید قابل اجرای مجدد یا دستکم دارای کنترل جلوگیری از اجرای دوباره باشد و نتیجه نهایی را بهصورت قابل ممیزی گزارش کند.
سؤال 10: KILL با کدام نسخههای SQL Server سازگار است؟
در نسخههای رایج SQL Server موجود است؛ مجوزهای لازم و محدودیتهای سرویس ابری متفاوت است. علاوه بر شماره نسخه، Compatibility Level، Edition، سیستمعامل، سرویس ابری و مجوز حساب اجرا نیز باید در محیط مقصد آزموده شود؛ مستندات همان نسخه مرجع نهایی تصمیم است.
سؤالات مصاحبه SQL Server
پرسش مصاحبه 1: در مصاحبه چگونه کاربرد KILL را توضیح دهیم؟
ابتدا هدف را در یک جمله بگویید، سپس Scope اثر، یک مثال واقعی، خطر اصلی و روش کنترل آن را شرح دهید. پاسخ حرفهای فقط Syntax نیست و باید نشان دهد اثر دستور روی Session، Transaction، IO یا بازیابی را میفهمید.
پرسش مصاحبه 2: چه نکتهای پاسخ مبتدی و حرفهای درباره KILL را جدا میکند؟
پاسخ حرفهای درباره خطا، مجوز، قابلیت اجرای مجدد، مشاهدهپذیری و تفاوت محیط آزمایش و Production صحبت میکند. همچنین جایگزین مناسب و دلیل انتخاب را بیان میکند.
پرسش مصاحبه 3: اگر اجرای KILL شکست بخورد چه میکنید؟
ابتدا Error Number، Message، State، Context، ورودی و وضعیت تراکنش ثبت میشود. سپس بدون تکرار کورکورانه، علت بررسی و بر اساس Runbook مسیر Rollback یا Retry کنترلشده اجرا میشود.
پرسش مصاحبه 4: چگونه KILL را برای Production آماده میکنید؟
حداقل مجوز، Guard مقصد، ورودی پارامتری، Timeout، TRY/CATCH، ثبت نتیجه، آزمون روی داده نماینده و تأیید مالک سرویس لازم است. برای عملیات مدیریتی، پنجره اجرا و برنامه بازگشت نیز تعیین میشود.
پرسش مصاحبه 5: چه معیارهایی موفقیت KILL را ثابت میکنند؟
معیار باید قابل اندازهگیری باشد: نتیجه داده، وضعیت Session یا Database، زمان اجرا، نبود خطای جدید، اثر قابل قبول بر IO و Blocking و ثبت خروجی کنترلی. معیار پذیرش پیش از اجرا نوشته میشود.
چکلیست نهایی
- Context پایگاه داده و نام Instance تأیید شد.
- Syntax و ورودیها در محیط آزمایش اجرا شدند.
- مجوزها و اثر روی Session یا Database مشخص است.
- مسیر خطا، Rollback و Timeout بررسی شده است.
- اثر کارایی با Baseline مقایسه میشود.
- خروجی کنترلی و لاگ نهایی تعریف شده است.
- برای عملیات حساس، Backup و تأیید مالک سرویس وجود دارد.
- اسکریپت و نتیجه اجرا نسخهبندی و مستند میشوند.
جمعبندی
دستور KILL زمانی بهدرستی استفاده شده است که علاوه بر نتیجه فنی، ریسک عملیاتی آن هم مدیریت شود. در این مقاله Syntax، پارامترها، ده سناریوی مستقل، خروجی نمونه، خطاها، Performance، Best Practice و پرسشهای مصاحبه بررسی شد تا بتوانید فرمان را آگاهانه در Query، Procedure، Job یا Runbook به کار ببرید.
برای مرور ارتباط KILL با دیگر موضوعهای این مجموعه، به مقاله مادر دستورات کاربردی SQL Server بازگردید. پیش از استفاده در Production، نمونه مرتبط را با نامها، مسیرها، مجوزها و SLA واقعی سازمان خود تطبیق دهید.