یکی از مشکلات رایجی که مدیران پایگاه داده و توسعهدهندگان با آن مواجه میشوند، بزرگ شدن بیش از حد فایلهای دیتابیس است. این اتفاق معمولاً پس از حذف حجم زیادی از دادهها، اجرای لاگهای سنگین، یا انجام عملیات موقتی رخ میدهد. در چنین شرایطی، استفاده از فرآیند Shrink Database میتواند فضای اشغالشده را آزاد کرده و حجم فایلهای دیتابیس را کاهش دهد.
در این مقاله بهصورت کامل و تخصصی با مفهوم Shrink، روشهای انجام آن، نکات مهم و بهترین شیوههای استفاده آشنا میشوید.
Shrink Database چیست؟
شرینک کردن دیتابیس (Shrink Database) فرآیندی در SQL Server است که طی آن فضای خالی داخل فایلهای دیتابیس حذف شده و حجم فیزیکی فایلها کاهش پیدا میکند.
به زبان ساده:
- وقتی دادهها حذف میشوند، فضای فایل دیتابیس آزاد میشود اما اندازه فایل کم نمیشود.
- عملیات Shrink باعث میشود این فضای خالی از انتهای فایل حذف گردد.
چرا دیتابیس بزرگ میشود؟
افزایش حجم دیتابیس همیشه به معنی افزایش داده نیست. مهمترین دلایل عبارتند از:
- حذف حجم زیادی از دادهها
- پاک شدن لاگها
- عملیات Import و Export موقت
- Backup ناقص
- Auto Growth بیش از حد
در این شرایط حجم فایل دیتابیس زیاد است اما بخش زیادی از آن خالی میباشد.
چه زمانی باید دیتابیس را Shrink کنیم؟
یکی از بزرگترین اشتباهات مدیران سرور، انجام Shrink به صورت دورهای است.
Shrink نباید به صورت روزانه یا هفتگی انجام شود.
زمانهای مناسب برای Shrink
- بعد از حذف حجم زیادی از دادهها
- بعد از آرشیو اطلاعات
- پس از پاکسازی لاگها
- زمانی که فضای دیسک سرور کم شده است
معایب شرینک کردن دیتابیس
Shrink عملیات حساسی است و در صورت استفاده نادرست میتواند مشکلات جدی ایجاد کند.
مهمترین معایب
1️⃣ Fragmentation شدید Index ها
Shrink باعث تکهتکه شدن ایندکسها میشود که Performance را کاهش میدهد.
2️⃣ افت سرعت دیتابیس
در زمان اجرای Shrink، دیتابیس تحت فشار IO شدید قرار میگیرد.
3️⃣ افزایش مصرف CPU و Disk
Shrink یکی از سنگینترین عملیاتهای SQL Server محسوب میشود.
انواع روشهای Shrink
در SQL Server سه روش اصلی وجود دارد:
روش اول: Shrink کل دیتابیس
این روش کل فایلهای دیتابیس را کوچک میکند.
DBCC SHRINKDATABASE (DatabaseName);
معایب:
- کنترل کمتر
- Fragmentation زیاد
روش دوم: Shrink فایل دیتابیس (روش حرفهای)
در این روش فقط فایل خاصی کوچک میشود.
DBCC SHRINKFILE (FileName, TargetSize);
مزایا:
- کنترل دقیقتر
- کاهش آسیب به Performance
- روش استاندارد DBA ها
روش سوم:
برای این منظور بعد از اتصال ریموت به دیتابیس (پایگاه داده) خود از طریق نرم افزار SQL Server Management Studio روی دیتابیس کلیک راست کرده و گزینه New Query را انتخاب نمایید.

سپس جهت مشاهده حجم فایل لاگ می بایست کوئری زیر را اجرا نمایید.(به جای dbname_db از نام دیتابیس موردنظر خود استفاده نمایید)
USE [dbname_db]
GO
SP_HELPFILE
پس از اجرای کوئری و مشاهده نتیجه نام فایل لاگ را کپی نمایید.

حال می بایست اقدام به shrink کردن دیتابیس نمایید.کوئری زیر را اجرا نمایید.
به جای dbname_db از نام دیتابیس موردنظر خود و به جای dbname_db_log نام فایل لاگ را قرار دهید.
ALTER DATABASE "dbname_db"
SET RECOVERY SIMPLE;
GO
DBCC SHRINKFILE ('dbname_db_log', 1);
منتظر بمانید تا کوئری اجرا شده و پیغام زیر را مشاهده کنید.

تفاوت Shrink Database و Shrink File
| ویژگی | Shrink Database | Shrink File |
|---|
| کنترل | کم | زیاد |
| سرعت | بیشتر | کمتر |
| Fragmentation | بالا | کمتر |
| پیشنهاد | ❌ | ✅ |
مراحل اصولی Shrink بدون آسیب به Performance
برای جلوگیری از افت سرعت، باید مراحل زیر رعایت شود:
مرحله 1: Rebuild Index قبل از Shrink
ALTER INDEX ALL ON TableName REBUILD;
مرحله 2: اجرای Shrink File
DBCC SHRINKFILE (FileName, TargetSize);
مرحله 3: Rebuild Index بعد از Shrink
این مرحله بسیار مهم است.
آیا Shrink باعث افزایش سرعت دیتابیس میشود؟
خیر، برخلاف تصور رایج، Shrink هیچ تاثیری در افزایش سرعت ندارد. هدف Shrink فقط آزاد کردن فضای دیسک است.
اشتباهات رایج در Shrink
بزرگترین خطاهایی که باعث افت شدید Performance میشوند:
- اجرای Auto Shrink
- Shrink روزانه
- Shrink بدون Rebuild Index
- Shrink روی دیتابیس فعال
آیا Auto Shrink را فعال کنیم؟
به هیچ عنوان نباید فعال شود. Auto Shrink باعث موارد زیر می شود:
- کاهش شدید سرعت
- Fragmentation دائمی
- افزایش IO سرور
بهترین جایگزین Shrink چیست؟
در بسیاری از موارد بهتر است به جای Shrink:
- دیتابیس را Archive کنید
- Partition بندی انجام دهید
- Log Backup منظم بگیرید
نتیجهگیری
Shrink کردن دیتابیس یک ابزار ضروری برای مدیریت فضای دیسک است اما استفاده نادرست از آن میتواند باعث کاهش شدید Performance شود.Shrink باید فقط در مواقع ضروری و به روش اصولی انجام شود.
دیدگاه شما کاربران گروه طراحی وب بالسا در طراحی وب سایت در شیراز در مورد این مطلب چیست؟ نظرات خود را با ما به اشتراک بگذارید