در پایگاههای داده SQL Server، فایل لاگ تراکنشها (Transaction Log) نقش حیاتی در بازیابی اطلاعات و حفظ یکپارچگی دادهها دارد. این فایل، کلیه تغییرات اعمالشده در دیتابیس را ثبت میکند و در شرایط خاص، مانند اجرای تراکنشهای طولانی یا عدم انجام منظم پشتیبانگیری از لاگ، ممکن است بهشدت افزایش یابد. این افزایش میتواند موجب کاهش فضای دیسک، افت عملکرد سرور و کندی در پردازش دادهها شود.
معمولا در چنین شرایطی خطاهایی شبیه این: Warning: Your database transaction log file size has crossed the threshold. را خواهید دید.
دلایل افزایش حجم فایل لاگ
- حالت بازیابی (Recovery Mode): در حالت Full Recovery، SQL Server تمامی تغییرات را تا زمان تهیه نسخه پشتیبان از لاگ، نگه میدارد. عدم تهیه منظم بکاپ از لاگ، منجر به افزایش بیرویه حجم آن میشود.
- وجود تراکنشهای طولانیمدت: تراکنشهایی که به دلایل مختلف باز میمانند، باعث نگهداری دادههای بیشتری در فایل لاگ میشوند.
- عدم مدیریت صحیح لاگ: در برخی موارد، پیکربندی نامناسب سرور یا عدم نظارت مستمر بر حجم فایل لاگ، موجب افزایش بیرویه آن میشود.
دلایل نیاز به کاهش حجم فایل لاگ
- آزادسازی فضای اشغالشده روی دیسک و جلوگیری از پر شدن سرور
- بهبود عملکرد پایگاه داده و کاهش سربار پردازشی
- کاهش زمان پشتیبانگیری و بازیابی اطلاعات
- پیشگیری از بروز خطاهای ناشی از کمبود فضای ذخیرهسازی
برای مدیریت این وضعیت، کوچکسازی (Shrink) فایل لاگ از طریق دستورات SQL Server یا ابزار SQL Server Management Studio (SSMS) انجام میشود. این فرآیند باید با رعایت اصول مدیریت پایگاه داده و بررسی تأثیرات جانبی آن اجرا شود.
کاهش حجم فایل لاگ با استفاده از SQL Server Management Studio (SSMS)
برای shrink کردن لاگ فایل در SQL Server Management Studio (SSMS) مراحل زیر را انجام دهید:

۱. ورود به SQL Server Management Studio
- SSMS را باز کنید و به دیتابیس موردنظر متصل شوید.
۲. رفتن به تنظیمات دیتابیس

- در Object Explorer، روی Databases کلیک کنید.
- دیتابیس موردنظر را پیدا کنید و روی آن Right Click کنید.
- گزینهی Tasks را انتخاب کنید.
- سپس روی Shrink و بعد Files کلیک کنید.
۳. انتخاب فایل لاگ برای کوچکسازی
- در پنجره بازشده، گزینه File Type را روی Log قرار دهید.
- در قسمت File Name، فایل لاگ مربوطه را انتخاب کنید (نام آن معمولاً چیزی شبیه به
YourDatabase_log
است).
۴. تنظیم اندازه و اجرای عملیات
- مقدار Release unused space را انتخاب کنید (پیشنهادی).
- یا گزینه Reorganize pages before releasing unused space را انتخاب کنید و یک مقدار برای اندازه جدید تنظیم کنید.
- روی OK کلیک کنید تا فرآیند Shrink اجرا شود.
۵. بررسی موفقیتآمیز بودن عملیات
پس از اجرای Shrink، میتوانید اندازه فایل را با این دستور SQL بررسی کنید:
EXEC sp_helpfile;
نکات مهم
✅ اگر دیتابیس در حالت Full Recovery Mode است، باید ابتدا از لاگها Backup بگیرید یا به حالت Simple Recovery Mode تغییر دهید.
✅ Shrink بیش از حد ممکن است باعث Fragmentation شود، پس تنها در مواقع ضروری از این روش استفاده کنید.
✅ اگر فایل لاگ همچنان بزرگ است، ممکن است یک تراکنش فعال وجود داشته باشد که مانع از کوچک شدن لاگ میشود.
کاهش حجم فایل لاگ با استفاده از دستور
برای کوچک کردن (shrink) لاگ فایل (Transaction Log) در SQL Server، میتوانید از دستور DBCC SHRINKFILE استفاده کنید. این کار حجم فایل لاگ را کاهش میدهد اما باید با احتیاط انجام شود، مخصوصاً در دیتابیسهایی که نیاز به ریکاوری کامل دارند.
مراحل انجام Shrink:
- بررسی نام فایل لاگ: sqlCopy code
USE YourDatabase; EXEC sp_helpfile;
این دستور اطلاعات فایلهای دیتابیس را نمایش میدهد. نام فایل لاگ را یادداشت کنید. - کاهش حجم لاگ فایل: sqlCopy code
USE YourDatabase; DBCC SHRINKFILE (YourLogFileName, 10); -- ۱۰ مگابایت
مقدار10
یعنی کاهش اندازه فایل به ۱۰ مگابایت (میتوانید مقدار را تنظیم کنید). - در صورت نیاز، تغییر حالت Recovery Mode: اگر دیتابیس شما روی Full Recovery Mode باشد، ممکن است لازم باشد ابتدا لاگ را بکاپ بگیرید: sqlCopy code
BACKUP LOG YourDatabase TO DISK = 'NUL';
سپس به Simple Recovery Mode تغییر دهید: sqlCopy codeALTER DATABASE YourDatabase SET RECOVERY SIMPLE;
و دوباره Shrink را اجرا کنید: sqlCopy codeDBCC SHRINKFILE (YourLogFileName, 10);
بعد از انجام عملیات، اگر لازم باشد، Full Recovery Mode را بازگردانید: sqlCopy codeALTER DATABASE YourDatabase SET RECOVERY FULL;
اگر جایی مشکل داشتی، با مدانت در میان بگذارید تا بیشتر راهنمایی کنیم! 😊