1 دقیقه میانگین مدت زمان مطالعه است

در پروژه ای که مدتی پیش روش کار میکرد، نیاز به وارد کردن دیتا تست زیادی بود که بعد از انجام پروژه هم پاک شدن، بعد از انجام پروژه متوجه شدن حجم درایو C خیلی کم شده
بعد از بررسی متوجه شدم که Log دیتابیس گفته شده با اینکه دیتابیس کلا خالی بود ولی حجم بسیار زیادی رو گرفته
بعد از جستجو داخل اینترنت و انجام کارهای گفته شده هم نتیجه ای حاصل نشد
بعضی از کارهایی که انجام دادم:

  • استفاده از Shrink File
  • استفاده از shrink در سه حالت مختلفی که داره
  • تغییر Recovery به Simple و انجام دوباره کارهای بالا
  • و …


در نهایت با یکی از دوستان تیم دیتابیس تماس گرفتن و ایشون کدهای زیر رو وارد کردن که با موفقیت حجم لاگ کم شد

SELECT name, log_reuse_wait_desc
FROM sys.DATABASEs;
GO

sp_helpdb 'marketdepth';
GO

ALTER DATABASE MarketDepth SET RECOVERY SIMPLE;
GO

DBCC SHRINKFILE (MarketDepth_log,512)
GO

DBCC OPENTRAN;
CHECKPOINT;
CHECKPOINT;
CHECKPOINT;
GO

DBCC SHRINKFILE (MarketDepth_log,512)
GO

ALTER DATABASE MarketDepth SET RECOVERY FULL;
GO

داخل کوئری بالا:
دستور اول مشخصات دیتابیس ها رو نشون میده که از داخلش میشه اطلاعات مختلف مثل simple یا full بودن حالت ریکاوری و اطلاعات دیگه که داخل select هستن رو دید
دستور دوم اطلاعات خاص یه دیتابیس مثل محل و حجم فایل های دیتابیس رو میده
دستور بعدی حالت ریکاوری رو به simple تغییر میده
دستور بعدی فایل لاگ رو shrink میکنه
دستور بعدی که قسمت مهمش هست و مشکل من رو حل کرد، توضیحات زیادی داره که در ادامه میگم
دستور آخر هم حالت recovery رو دوباره به full تغییر میده

اول از همه داخل دیتابیس من چندتا تیبل In Memory هم بود و متوجه شدم دلیل کار نکردن دستورات قبلی هم این بوده
توضیحات کامل رو در این باره میتونید از لینک های زیر بخونید:

لینک اول

لینک دوم

لینک سوم

بصورت خلاصه میشه دلیل زیر رو آورد

در Disk-Based Table به ازای Recovery Model Full بعد از گرفتن Transaction Log Backup لاگ فایل Truncate می‌شود.
اما اگر Memory Optimized Table داشته باشیم Transaction Log Backup لزوما باعث Truncate شدن لاگ فایل نمی‌شود بلکه Checkpoint هم نیاز است.

اگه لینک های گفته شده رو هم مطالعه کنید درک خیلی خوبی در این باره پیدا مکنید

ارسال نظر