PDA

View Full Version : ثابت ماندن size دایتابیس بعد از حذف رکوردها



ali190
دوشنبه 09 اسفند 1389, 20:04 عصر
سلام
دوستان عزیز من یه جدول دارم که یک فیلد داره از نوع image
من فایلهامو بصورت باینری تو دیتابیسم ذخیره میکنم
در اینجا دو تا سئوال برام پیش اومده:
1- اندازه نهایی فیلد image در الصاق فایلها چقدره؟(یعنی من حداکثر میتونم فایل با چه اندازه ای رو بهش الصاق کنم؟)
آیا فیلدی بیشتر از image وجود داره؟
2- چرا وقتی در جدولم یک سری از رکوردها با حجم زیاد رو حذف میکنم اندازه دیتابیسم ثایت میمونه و کم نمیشه؟
ممنون میشم اگر به سئوالاتم پاسخ بدید
ممنون ومتشکر
یاعلی

Reza_Yarahmadi
دوشنبه 09 اسفند 1389, 22:47 عصر
اندازه نهایی فیلد image در الصاق فایلها چقدره؟(یعنی من حداکثر میتونم فایل با چه اندازه ای رو بهش الصاق کنم؟)
آیا فیلدی بیشتر از image وجود داره؟
حداکثر حجم فیلدهای باینری 2,147,483,647 بایت است. تا جایی که میدونم هنوز نوعی بالاتر از این حجم اضافه نشده (البته این حرف تا SQL Server 2008 صادق است). بدلیل اینکه نوع داده image قراره حذف بشه ، مایکروسافت توصیه کرده از نوع varbinary استفاده بشه.

چرا وقتی در جدولم یک سری از رکوردها با حجم زیاد رو حذف میکنم اندازه دیتابیسم ثایت میمونه و کم نمیشه؟
چیزی که میگم یک حدس بیشتر نیست!! بدلیل اینکه فیلدهای باینری (حجیم) بین رکوردها ذخیره نمیشه که با حذف ، توسط رکود دیگه ای جایگزین بشه ، حذف اونها باعث ایجاد نوعی Gap در فایل میشه. راه حلی که برای این مورد میشه در نظر گرفت Shirink کردن دیتابیس است.

ali190
دوشنبه 09 اسفند 1389, 23:46 عصر
چیزی که میگم یک حدس بیشتر نیست!! بدلیل اینکه فیلدهای باینری (حجیم) بین رکوردها ذخیره نمیشه که با حذف ، توسط رکود دیگه ای جایگزین بشه ، حذف اونها باعث ایجاد نوعی Gap در فایل میشه. راه حلی که برای این مورد میشه در نظر گرفت Shirink کردن دیتابیس است.
سلام
ممنون از راهنماییتون
میشه یه مقدار بیشتر توضیح بدید (منظور از Shirink کردن دیتابیس )
یاعلی

Reza_Yarahmadi
سه شنبه 10 اسفند 1389, 13:20 عصر
قبل از هر چیزی بابت غلط املایی که داشتم معذرت میخوام. Shrink درست است نه Shirink :گیج:
بر اثر حذف و اضافه شدن رکوردها فضاهای خالی بین رکورد ها ایجاد میشه که باعث حجیم شدن دیتابیس میشه. با انجام Shrink روی دیتابیس (و یا هر یک از فایلهای دیتابیس) این حجم بی استفاده از بین رکوردها حذف میشه و رکوردها پشت سر هم قرار میگیرند. در صورتیکه روی جداول ایندکس گذاشتید توصیه میشه بعد از Shrink ، ایندکس ها رو Rebuild کنید.
برای انجام Shrink هم روی دیتابیس راست کلیک و از منوی Tasks گزینه Shrink (یا Database و یا Files) و انتخاب کنید تا پنجره مربوطه باز بشه.
و یا از دستور زیر برای این کار استفاده کنید
DBCC ShrinkDatabase ('DatabaseName' , درصد كوچك شدن)