PDA

View Full Version : database و shirnk



tc1000
چهارشنبه 30 خرداد 1386, 18:33 عصر
وقتی که دیتا بیس رو شیرینک میکنیم چه اتفاقی میفته که حجم دیتا بیس انقدر کم میشه

حمیدرضاصادقیان
چهارشنبه 30 خرداد 1386, 21:33 عصر
هیچی لاگ فایل و قسمتهایی که به صورت unactive درمیاد truncate میشن و حجم فایل کم میشه. در اصل لاگ فایل تمام تغییرات شما رو نگه میداره و وقتی تغییراتی که نگه داشته دیگه ازش استفاده ای نکنه با استفاده از shrink اونو truncate میکنه. یا اگه Recovery model شما full هست باید از قسمتهای فعال لاگ backup تهیه بکنید بعد اونو شرینک کنید.

AminSobati
چهارشنبه 30 خرداد 1386, 21:49 عصر
دوست عزیزم،
Shrink روی Data File و Log File دو مکانیزم مختلف داره. در Data File هر Page از انتهای فایل به اولین فضای خالی از ابتدای فایل منتقل میشه. لذا میتونین تصور کنین که فضاهای خالی به انتهای فایل منتقل میشن و میشه قسمتی از اون رو به OS برگردوند.
در Log File، یک تقسیم بندی صورت میگیره و هر Log File به چند Virtual Log File تقسیم میشه. Shrink میتونه VLFهای غیر ضروری رو حذف کنه.
اما یادتون باشه که Shrink روی Data File به شدت Fragmentation بوجود میاره.

tc1000
پنج شنبه 31 خرداد 1386, 02:41 صبح
Fragmentation یعنی چی؟

AminSobati
پنج شنبه 31 خرداد 1386, 10:57 صبح
زمانی که Pageهای اطلاعات بصورت منظم و پشت سر هم قرار نداشته باشند، اصطلاحا Fragmentation بوجود اومده. این مسئله باعث میشه Storage Engine زحمت مضاعفی برای خواندن و نوشتن اطلاعات انجام بده که منجر به افت Performance خواهد شد

Behrouz_Rad
پنج شنبه 31 خرداد 1386, 13:11 عصر
برادر ثباتی.
تشخیص اینکه Page های اطلاعات پشت سر هم قرار دارند یا ندارند به چه شکل هست؟

AminSobati
پنج شنبه 31 خرداد 1386, 14:00 عصر
در 2000 بوسیله DBCC ShowContig و در 2005 بوسیله sys.dm_db_index_physical_stats. این هم مثال برای هر کدوم:


dbcc showcontig ('orders','pk_orders')

DECLARE @db_id SMALLINT;
DECLARE @object_id INT;

SET @db_id = DB_ID(N'AdventureWorks');
SET @object_id = OBJECT_ID(N'AdventureWorks.Sales.SalesOrderDetail' );
SELECT * FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL , 'detailed');

setak
یک شنبه 24 تیر 1386, 10:36 صبح
یعنی گاهی اوقات shrienk باعث میشه که performance پایین بیاد؟
پس برای دیتابیسی که خیلی حجیم و دفعات query هم زیاده به نظر شما چند وقت یکبار باید دیتابیس رو shrienk کرد ؟ اصولا برای بالا بردن عملکرد چنین دیتابیسی باید چیکار کرد؟

setak
یک شنبه 24 تیر 1386, 11:06 صبح
آیا برای بالا بردن عملکرد چنین دیتابیسی بهتر نیست recovery model را در حالت simple بذارم و گزینه auto shrienk را فعال کنم؟

AminSobati
دوشنبه 25 تیر 1386, 15:14 عصر
Shrink روی Data File رو فراموش کنید! Fragmentation بوجود میاره، حتی توصیه میکنم Auto Shrink رو غیر فعال کنین.