چگونه فضای اشغال شده توسط Log های دیتابیس را کاهش دهیم

سلام دوستان

اگر مدیر سرورهای شیرپوینتی و دیتابیس سازمان خود باشید، حتماً هر از چند گاهی با افزایش فضای هارددیسک درایوهای سرور دیتابیس مواجه شده اید. پس از اینکه به بررسی این موضوع و اینکه چه عاملی سبب پر شدن فضای هارد سرور شده است، میپردازید، ممکن است با فایلهای دیتابیس های موجود در سرور SQL مواجه میشوید که به طور غیر عادی فضای زیادی را اشغال کرده اند. پس از بررسی بیشتر، به فایلهایی با پسوند LDF که رشد فضای آنها عجیب غریب به نظر میرسد، برخورد خواهید کرد!  😉

به طور کلی هر دیتابیسی که در SQL ایجاد میشود شامل دو فایل اصلی است : ۱- فایل داده ای که متا داده های اصلی دیتابیس شما را نگهداری میکند که پسوند آن .mdf  میباشد. ۲- فایل Log که وظیفه نگهداری اطلاعات مربوط به تک تک Transaction های صورت گرفته برروی دیتابیس را بر عهده دارد و با هر Transaction ای بر روی دیتابیس، جزئیات آنرا ثبت و نگهداری میکند.(فایل با پسوند .ldf )

همانطور که مشخص است log فایلها به سرعت رشد می کنند و ممکن است براساس میزان ارجاعاتی که به سمت دیتابیس صورت میگیرد، فضای زیادی از هارد را اشغال نمایند. این موضوع یعنی افزایش فضای log فایلهای دیتابیس، در Content_DB های سایتهای شرپوینت هم بسیار مشاهده میشود. (به خصوص دیتابیس Search و Config.)

برای کاهش این فضای اشغال شده، دو روش زیر رو پیشنهاد میکنم : ( من این روشها رو در انواع دیتابیس های شیرپوینتی و غیر شیرپوینتی استفاده کردم که بسیار کارآمد بوده اند.)

۱- استفاده از ابزار shrink موجود در SQL (شکل زیر نحوه استفاده از این ابزار را به ترتیب نمایش میدهد)

spdb

پس از کلیک بر روی Files ، پنجره زیر باز شده و به ترتیب از File Type مورد Log را انتخاب و سپس مقدار فضا را بر روی ۲ مگابایت تنظیم نمایید. در انتها جهت اعمال تغییرات OK را کلیک کنید.

spdb2

۲- استفاده از دستور T-SQL زیر :

در این دستور به جای عبارت LDFFilename نام فایل log را وارد و به جای عبارت MDFFileName نام فایل mdf را وارد کنید.

DBCC SHRINKFILE(LDFFileName,2)
Go
BACKUP LOG MDFFileName WITH TRUNCATE_ONLY
Go
DBCC SHRINKFILE(LDFFileName,2)
Go

به عنوان مثال :

DBCC SHRINKFILE(SharePoint_Config_log,2)
Go
BACKUP LOG SharePoint_Config WITH TRUNCATE_ONLY
Go
DBCC SHRINKFILE(SharePoint_Config_log,2)
Go

به شخصه از روش دوم برای کاهش فضای log ها استفاده میکنم و دستور فوق فضای لاگ ها را به سرعت و تا ۲ مگابایت کاهش میدهد!!

اگر علاقمند هستید که دستور فوق در بازه زمانی مثلا هفتگی یا ماهانه اجرا شود، میتوانید برای آن یک job در SQL ایجاد کنید و زمانبندی آنرا در job تعریف کنید.

 

موفق باشید 🙂

پاسخ دهید