آموزش جامع دستور CHECKPOINT در SQL Server
مقدمه و مسیر یادگیری
دستور CHECKPOINT یکی از موضوعهای مهم مجموعه دستورات کاربردی Microsoft SQL Server است. صفحات Dirty پایگاه جاری را به دیسک هدایت و نقطه بازیابی ایجاد میکند تا زمان Recovery پس از Crash کنترل شود. شناخت این دستور زمانی ارزشمند میشود که علاوه بر شکل نوشتن، محدوده اثر، نیازمندی مجوز، رفتار در تراکنش و پیامد عملیاتی آن نیز روشن باشد.
این مقاله از تعریف و Syntax آغاز میکند، سپس پارامترها، خروجی، مثالهای مستقل، خطاهای رایج، ملاحظات کارایی و بهترین روشهای استفاده را توضیح میدهد. نمونهها از ساده به حرفهای چیده شدهاند و بخش پرسشهای متداول و مصاحبه نیز برای مرور سریع در نظر گرفته شده است.
پیش از اجرای نمونههای مدیریتی روی سرور واقعی، نام Database، مسیر فایل، شناسه Session و سطح دسترسی را با محیط خود تطبیق دهید. نمونهای که شامل Backup، Restore، DBCC یا KILL باشد باید ابتدا در آزمایشگاه و با برنامه بازگشت بررسی شود.
برای دیدن جایگاه این موضوع در کنار سایر فرمانها، راهنمای جامع دستورات کاربردی SQL Server را مطالعه کنید. مقاله مادر مسیر انتخاب میان فرمانهای پیام، خطا، Session، نگهداری و بازیابی را یکجا نشان میدهد.
تعریف دستور CHECKPOINT
صفحات Dirty پایگاه جاری را به دیسک هدایت و نقطه بازیابی ایجاد میکند تا زمان Recovery پس از Crash کنترل شود.
در SQL Server هر فرمان در یک Scope مشخص اجرا میشود. هنگام استفاده از CHECKPOINT باید مشخص باشد اثر آن فقط روی عبارت فعلی، Batch، Session، Database یا کل Instance است. همین تشخیص، پایه جلوگیری از اجرای ناخواسته و طراحی درست آزمون است.
از دید مهندسی، Syntax صحیح شرط لازم است اما کافی نیست. داده ورودی، Collation، نوع داده، تنظیمات SET، سطح جداسازی، مجوز و وضعیت Connection میتوانند نتیجه را تغییر دهند. بنابراین مثال حرفهای باید پیششرط و خروجی کنترلی داشته باشد.
Syntax استاندارد
CHECKPOINT [ checkpoint_duration ];
پارامترها و اجزای مهم
- checkpoint_duration زمان هدف اختیاری بر حسب ثانیه
- Context پایگاه داده جاری
- Recovery Model و تنظیم TARGET_RECOVERY_TIME
خروجی و اثر اجرایی
Result Set ندارد و عملیات Checkpoint را برای Database جاری درخواست میکند؛ پایان دقیق به بار IO و موتور ذخیرهسازی وابسته است.
اگر این دستور در Procedure، Job یا ابزار استقرار استفاده شود، Caller باید بداند موفقیت چگونه اعلام میشود و خطا از چه مسیری برمیگردد. استفاده از Result Set کنترلی، پیام کوتاه، Error Number مشخص یا رکورد لاگ باید بر اساس قرارداد پروژه انتخاب شود.
کاربردهای واقعی در پروژه
سه کاربرد پرتکرار این موضوع عبارتاند از آزمون زمان Recovery، کنترل نوشتن صفحات Dirty در سناریوی مدیریتی، آمادهسازی آزمایش رفتار Transaction Log. در هر سه حالت، مالک عملیات و معیار پذیرش باید قبل از اجرا تعیین شود و تغییر مهم بدون نسخه پشتیبان یا مسیر Rollback انجام نشود.
در پروژه سازمانی بهتر است فرمان داخل یک Runbook یا اسکریپت نسخهبندیشده قرار گیرد. نام سرور و Database از محیط دریافت شود، ولی Identifier پویا فقط پس از اعتبارسنجی و QUOTENAME ساخته شود. مقادیر داده نیز در Dynamic SQL بهصورت پارامتر ارسال شوند.
قاعده عملی: CHECKPOINT را فقط زمانی اجرا کنید که بتوانید در یک جمله بگویید چه چیزی تغییر میکند، موفقیت چگونه سنجیده میشود و در صورت شکست چه اقدامی انجام خواهد شد.
مثالهای عملی مستقل
ده مثال زیر جنبههای متفاوت CHECKPOINT را پوشش میدهند. هر نمونه هدف، Query، خروجی مورد انتظار و نکته عملیاتی دارد. فرمانهای دارای اثر مدیریتی با نامها و مسیرهای نمونه نوشته شدهاند و باید پیش از اجرا شخصیسازی و تأیید شوند.
مثال شماره 1: Checkpoint در پایگاه جاری
در این سناریو هدف آن است که «Checkpoint در پایگاه جاری» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
USE [tempdb];
CHECKPOINT;
SELECT DB_NAME() AS CheckpointDatabase;
| خروجی نمونه | تفسیر نتیجه |
|---|
| CheckpointDatabase = tempdb | نتیجه مورد انتظار نشان میدهد سناریوی Checkpoint در پایگاه جاری با موفقیت طی شده است. |
Context جاری مشخص میکند فرمان روی کدام Database اعمال شود. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 2: Checkpoint با مدت هدف
در این سناریو هدف آن است که «Checkpoint با مدت هدف» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
USE [tempdb];
CHECKPOINT 10;
SELECT N'درخواست Checkpoint با هدف 10 ثانیه' AS Status;
| خروجی نمونه | تفسیر نتیجه |
|---|
| پیام تأیید درخواست | نتیجه مورد انتظار نشان میدهد سناریوی Checkpoint با مدت هدف با موفقیت طی شده است. |
مدت هدف تضمین سخت نیست و موتور بر اساس منابع عمل میکند. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 3: مشاهده Target Recovery Time
در این سناریو هدف آن است که «مشاهده Target Recovery Time» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT name, target_recovery_time_in_seconds
FROM sys.databases
WHERE database_id = DB_ID();
| خروجی نمونه | تفسیر نتیجه |
|---|
| نام Database و زمان هدف | نتیجه مورد انتظار نشان میدهد سناریوی مشاهده Target Recovery Time با موفقیت طی شده است. |
این مقدار پایه تصمیم درباره Indirect Checkpoint است. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 4: مشاهده زمان آخرین Checkpoint تقریبی
در این سناریو هدف آن است که «مشاهده زمان آخرین Checkpoint تقریبی» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT DB_NAME(database_id) AS DatabaseName, last_checkpoint_lsn
FROM sys.database_recovery_status
WHERE database_id = DB_ID();
| خروجی نمونه | تفسیر نتیجه |
|---|
| نام Database و LSN مرتبط | نتیجه مورد انتظار نشان میدهد سناریوی مشاهده زمان آخرین Checkpoint تقریبی با موفقیت طی شده است. |
DMV دید تشخیصی میدهد و نباید بهتنهایی معیار سلامت باشد. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 5: Checkpoint پس از تغییر داده آزمایشی
در این سناریو هدف آن است که «Checkpoint پس از تغییر داده آزمایشی» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
USE [tempdb];
CREATE TABLE #CheckpointDemo(Id int);
INSERT #CheckpointDemo VALUES (1), (2), (3);
CHECKPOINT;
SELECT COUNT(*) AS RowsCreated FROM #CheckpointDemo;
| خروجی نمونه | تفسیر نتیجه |
|---|
| RowsCreated = 3 | نتیجه مورد انتظار نشان میدهد سناریوی Checkpoint پس از تغییر داده آزمایشی با موفقیت طی شده است. |
فرمان Commit منطقی تراکنش نیست؛ درجهای Autocommit پیشتر Commit شدهاند. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 6: تراکنش باز و Checkpoint
در این سناریو هدف آن است که «تراکنش باز و Checkpoint» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
USE [tempdb];
BEGIN TRANSACTION;
CREATE TABLE #OpenTranDemo(Id int);
INSERT #OpenTranDemo VALUES (1);
CHECKPOINT;
SELECT XACT_STATE() AS TransactionState;
ROLLBACK TRANSACTION;
| خروجی نمونه | تفسیر نتیجه |
|---|
| TransactionState = 1 | نتیجه مورد انتظار نشان میدهد سناریوی تراکنش باز و Checkpoint با موفقیت طی شده است. |
Checkpoint تراکنش باز را Commit نمیکند. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 7: مشاهده دلیل استفاده مجدد Log
در این سناریو هدف آن است که «مشاهده دلیل استفاده مجدد Log» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT name, recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
WHERE database_id = DB_ID();
| خروجی نمونه | تفسیر نتیجه |
|---|
| Recovery Model و دلیل انتظار Log | نتیجه مورد انتظار نشان میدهد سناریوی مشاهده دلیل استفاده مجدد Log با موفقیت طی شده است. |
قبل از اقدام مدیریتی، علت واقعی عدم Truncate شدن Log بررسی شود. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 8: مقایسه Recovery Modelها
در این سناریو هدف آن است که «مقایسه Recovery Modelها» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT name, recovery_model_desc, target_recovery_time_in_seconds
FROM sys.databases
ORDER BY name;
| خروجی نمونه | تفسیر نتیجه |
|---|
| فهرست Databaseها و تنظیم Recovery | نتیجه مورد انتظار نشان میدهد سناریوی مقایسه Recovery Modelها با موفقیت طی شده است. |
Checkpoint و Log Backup در Recovery Modelهای مختلف نقش متفاوت دارند. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 9: پایش IO فایل داده
در این سناریو هدف آن است که «پایش IO فایل داده» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
SELECT DB_NAME(vfs.database_id) AS DatabaseName, mf.name AS LogicalFile, vfs.io_stall_write_ms, vfs.num_of_writes
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL) AS vfs
JOIN sys.database_files AS mf ON mf.file_id = vfs.file_id;
| خروجی نمونه | تفسیر نتیجه |
|---|
| آمار تجمعی Write و Stall | نتیجه مورد انتظار نشان میدهد سناریوی پایش IO فایل داده با موفقیت طی شده است. |
برای تفسیر نسبت Stall باید بازه زمانی و خط مبنا داشته باشید. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
مثال شماره 10: الگوی اندازهگیری قبل و بعد
در این سناریو هدف آن است که «الگوی اندازهگیری قبل و بعد» به شکلی روشن و قابل بازتولید بررسی شود. Query زیر یک Batch کامل ارائه میدهد و میتوان آن را پس از کنترل Context و مجوزها در محیط آزمایش اجرا کرد.
USE [tempdb];
SELECT SYSDATETIME() AS StartedAt;
CHECKPOINT;
SELECT SYSDATETIME() AS FinishedAt;
| خروجی نمونه | تفسیر نتیجه |
|---|
| دو Timestamp برای تخمین Duration | نتیجه مورد انتظار نشان میدهد سناریوی الگوی اندازهگیری قبل و بعد با موفقیت طی شده است. |
برای اندازهگیری حرفهای Extended Events یا PerfMon دقیقتر است. در محیط عملیاتی بهتر است ورودی، زمان اجرا، نام پایگاه داده و نتیجه نهایی نیز در یک لاگ ساختاریافته ثبت شود تا عیبیابی و ممیزی بعدی قابل اتکا باشد.
خطاهای رایج و روش پیشگیری
اجرای بیدلیل و پرتکرار میتواند جهش IO بسازد. این خطا معمولاً زمانی رخ میدهد که نمونه آموزشی بدون بررسی Context یا Scope به Production منتقل میشود. افزودن Guard، نمایش مقصد و توقف سریع با THROW راه پیشگیری قابل اتکایی است.
Checkpoint جایگزین Backup نیست. برای کنترل این وضعیت، ورودیها را پیش از اجرا اعتبارسنجی کنید و نتیجه مرحله حساس را با Query مستقل بسنجید. اگر عملیات قابل Rollback نیست، تأیید دوم و Backup معتبر ضروری است.
در Recovery Model کامل لزوماً Log را کوچک یا Truncate نمیکند. مستندسازی رفتار مورد انتظار و ثبت Error Number، Message، State و زمان اجرا باعث میشود تیم به جای آزمون و خطای تکراری، علت را بر اساس شواهد پیدا کند.
- نام Database و Instance پیش از اجرا کنترل شود.
- مجوز حساب اجرا با اصل کمترین دسترسی تعیین شود.
- در مسیر CATCH وضعیت تراکنش و تنظیمات Session تعیین تکلیف شود.
- Query کنترلی پس از عملیات، نتیجه واقعی را ثابت کند.
ملاحظات Performance و همزمانی
TARGET_RECOVERY_TIME را بر اساس SLA تنظیم کنید. ارزیابی کارایی باید بر اساس Baseline و در بازه زمانی مشخص باشد؛ یک Execution Plan یا عدد تجمعی بدون مقایسه، برای تصمیم Production کافی نیست.
Latency فایل داده را همراه Checkpoint پایش کنید. اگر فرمان روی IO، Transaction Log، Worker Thread یا قفل اثر دارد، Wait Type و Blocking همزمان بررسی شود. افزایش سرعت یک Batch نباید با طولانیشدن توقف کاربران جبران شود.
از Shrink پس از Checkpoint بهعنوان نگهداری عادی استفاده نکنید. برای اجرای دورهای، Duration، نتیجه، تعداد ردیف، حجم داده و خطاها در جدول تاریخچه ثبت شود. این تاریخچه ظرفیتسنجی و تشخیص تغییر رفتار پس از ارتقای نسخه را ممکن میکند.
بهترین روشها
- هدف و Scope دستور CHECKPOINT را در ابتدای اسکریپت توضیح دهید.
- از نام Schema، نوع داده و تبدیل صریح استفاده کنید.
- مقادیر فارسی را با N و نوع nvarchar نگه دارید.
- برای خطای واقعی از TRY/CATCH و THROW استفاده کنید.
- تراکنش را کوتاه نگه دارید و XACT_STATE را در CATCH کنترل کنید.
- اسکریپت را تا حد ممکن قابل اجرای مجدد طراحی کنید.
- خروجی کنترلی و معیار پذیرش را در همان فایل قرار دهید.
- نسخه SQL Server و تفاوت محیط Cloud را پیش از استقرار بررسی کنید.
مقایسه CHECKPOINT با Indirect Checkpoint مبتنی بر TARGET_RECOVERY_TIME باید بر اساس نیاز واقعی انجام شود. انتخاب فناوری یا فرمان صرفاً به دلیل آشنایی قبلی، ممکن است خوانایی، سازگاری یا قابلیت پشتیبانی آینده را کاهش دهد.
سؤالات متداول
سؤال 1: دستور CHECKPOINT در SQL Server دقیقاً چه کاری انجام میدهد؟
دستور CHECKPOINT صفحات Dirty پایگاه جاری را به دیسک هدایت و نقطه بازیابی ایجاد میکند تا زمان Recovery پس از Crash کنترل شود. دامنه اثر آن باید پیش از اجرا شناخته شود و نمونه نخست در محیط آزمایش بررسی شود تا انتظار تیم از پیام، Result Set یا تغییر وضعیت Session دقیق باشد.
سؤال 2: برای شروع یادگیری CHECKPOINT چه پیشنیازی لازم است؟
آشنایی با Batch، Session، نوع داده، مجوز و تفاوت محیط توسعه و تولید کافی است. ابتدا Syntax و مثالهای پایه را اجرا کنید، سپس رفتار خطا و تراکنش را با داده کوچک بسنجید و در پایان سراغ سناریوی سازمانی بروید.
سؤال 3: CHECKPOINT چه ارزش تجاری برای یک سامانه داده دارد؟
کاربرد درست آن میتواند زمان توقف، خطای انسانی و هزینه عیبیابی را کاهش دهد. ارزش واقعی زمانی ایجاد میشود که فرمان در Runbook، کنترل دسترسی، مانیتورینگ و آزمون بازیابی یا استقرار قرار گیرد، نه اینکه فقط یک دستور منفرد باشد.
سؤال 4: آیا استفاده حرفهای از CHECKPOINT هزینه پروژه SQL Server را کم میکند؟
بله، اگر همراه استاندارد کدنویسی، بازبینی و پایش باشد. کاهش اجرای اشتباه، کوتاهشدن زمان تشخیص رخداد و قابل تکرار شدن عملیات، هزینه پشتیبانی را پایین میآورد؛ اما خودکارسازی بدون Guard میتواند ریسک را بیشتر کند.
سؤال 5: تفاوت CHECKPOINT با Indirect Checkpoint مبتنی بر TARGET_RECOVERY_TIME چیست؟
CHECKPOINT برای صفحات Dirty پایگاه جاری را به دیسک هدایت و نقطه بازیابی ایجاد میکند تا زمان Recovery پس از Crash کنترل شود. گزینه تخصصیتری است، درحالیکه Indirect Checkpoint مبتنی بر TARGET_RECOVERY_TIME دامنه یا هدف متفاوتی دارد. انتخاب باید بر اساس نیاز به سازگاری نسخه، اثر روی Session، مدیریت خطا، امکان Rollback و نتیجه قابل مشاهده انجام شود.
سؤال 6: چه زمانی برای پیادهسازی CHECKPOINT از خدمات مشاوره SQL Server استفاده کنیم؟
اگر فرمان بخشی از مهاجرت، بازیابی، نگهداری Production، تغییر امنیتی یا عملیات دارای SLA است، بازبینی متخصص ارزشمند است. مشاور میتواند پیشنیاز، اسکریپت برگشت، مانیتورینگ، تست بار و معیار پذیرش را قبل از اجرا مشخص کند.
سؤال 7: رایجترین خطا هنگام کار با CHECKPOINT چیست؟
اجرای بیدلیل و پرتکرار میتواند جهش IO بسازد. همچنین بیتوجهی به Context، مجوز و Scope باعث میشود نمونهای که در آزمایش موفق بوده در Production رفتار دیگری نشان دهد. راهحل، Guard صریح، TRY/CATCH و ثبت ورودیهای واقعی است.
سؤال 8: اثر CHECKPOINT بر Performance چگونه ارزیابی میشود؟
TARGET_RECOVERY_TIME را بر اساس SLA تنظیم کنید. پیش و پس از اجرا باید Duration، CPU، IO، Waitها، Blocking و حجم Log متناسب با موضوع اندازهگیری شود. یک Snapshot منفرد کافی نیست و مقایسه با Baseline دوره مشابه نتیجه معتبرتری میدهد.
سؤال 9: بهترین روش استفاده از CHECKPOINT چیست؟
بهترین روش این است که هدف، Context، مجوز، اثر تراکنشی، Timeout و مسیر بازگشت مستند شوند. اسکریپت باید قابل اجرای مجدد یا دستکم دارای کنترل جلوگیری از اجرای دوباره باشد و نتیجه نهایی را بهصورت قابل ممیزی گزارش کند.
سؤال 10: CHECKPOINT با کدام نسخههای SQL Server سازگار است؟
در نسخههای رایج موجود است؛ معماری Checkpoint با نسخه و تنظیمات پایگاه تکامل یافته است. علاوه بر شماره نسخه، Compatibility Level، Edition، سیستمعامل، سرویس ابری و مجوز حساب اجرا نیز باید در محیط مقصد آزموده شود؛ مستندات همان نسخه مرجع نهایی تصمیم است.
سؤالات مصاحبه SQL Server
پرسش مصاحبه 1: در مصاحبه چگونه کاربرد CHECKPOINT را توضیح دهیم؟
ابتدا هدف را در یک جمله بگویید، سپس Scope اثر، یک مثال واقعی، خطر اصلی و روش کنترل آن را شرح دهید. پاسخ حرفهای فقط Syntax نیست و باید نشان دهد اثر دستور روی Session، Transaction، IO یا بازیابی را میفهمید.
پرسش مصاحبه 2: چه نکتهای پاسخ مبتدی و حرفهای درباره CHECKPOINT را جدا میکند؟
پاسخ حرفهای درباره خطا، مجوز، قابلیت اجرای مجدد، مشاهدهپذیری و تفاوت محیط آزمایش و Production صحبت میکند. همچنین جایگزین مناسب و دلیل انتخاب را بیان میکند.
پرسش مصاحبه 3: اگر اجرای CHECKPOINT شکست بخورد چه میکنید؟
ابتدا Error Number، Message، State، Context، ورودی و وضعیت تراکنش ثبت میشود. سپس بدون تکرار کورکورانه، علت بررسی و بر اساس Runbook مسیر Rollback یا Retry کنترلشده اجرا میشود.
پرسش مصاحبه 4: چگونه CHECKPOINT را برای Production آماده میکنید؟
حداقل مجوز، Guard مقصد، ورودی پارامتری، Timeout، TRY/CATCH، ثبت نتیجه، آزمون روی داده نماینده و تأیید مالک سرویس لازم است. برای عملیات مدیریتی، پنجره اجرا و برنامه بازگشت نیز تعیین میشود.
پرسش مصاحبه 5: چه معیارهایی موفقیت CHECKPOINT را ثابت میکنند؟
معیار باید قابل اندازهگیری باشد: نتیجه داده، وضعیت Session یا Database، زمان اجرا، نبود خطای جدید، اثر قابل قبول بر IO و Blocking و ثبت خروجی کنترلی. معیار پذیرش پیش از اجرا نوشته میشود.
چکلیست نهایی
- Context پایگاه داده و نام Instance تأیید شد.
- Syntax و ورودیها در محیط آزمایش اجرا شدند.
- مجوزها و اثر روی Session یا Database مشخص است.
- مسیر خطا، Rollback و Timeout بررسی شده است.
- اثر کارایی با Baseline مقایسه میشود.
- خروجی کنترلی و لاگ نهایی تعریف شده است.
- برای عملیات حساس، Backup و تأیید مالک سرویس وجود دارد.
- اسکریپت و نتیجه اجرا نسخهبندی و مستند میشوند.
جمعبندی
دستور CHECKPOINT زمانی بهدرستی استفاده شده است که علاوه بر نتیجه فنی، ریسک عملیاتی آن هم مدیریت شود. در این مقاله Syntax، پارامترها، ده سناریوی مستقل، خروجی نمونه، خطاها، Performance، Best Practice و پرسشهای مصاحبه بررسی شد تا بتوانید فرمان را آگاهانه در Query، Procedure، Job یا Runbook به کار ببرید.
برای مرور ارتباط CHECKPOINT با دیگر موضوعهای این مجموعه، به مقاله مادر دستورات کاربردی SQL Server بازگردید. پیش از استفاده در Production، نمونه مرتبط را با نامها، مسیرها، مجوزها و SLA واقعی سازمان خود تطبیق دهید.