تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 8 از 8

نام تاپيک: حذف فضای خالی دیتابیس SQL Server 2005

  1. #1
    پروفشنال bad_boy_2007's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    ایران
    پست ها
    803

    پيش فرض حذف فضای خالی دیتابیس SQL Server 2005

    سلام دوستان
    من یه مشکل دارم ، وقتی که دیتابیسها بعد از یه مدت کار میکنن حجمشون بطور فزاینده ای بالا میره ، مثلا دیتابیس SQL Server2005 من که مربوط به یک سیستم مالیه حجمی در حدود 250 MByte داره .
    یادمه تو اکسس گزینه Compac Database یا همچین چیزی رو میزدیم که دیتابیس اطلاعات اضافی رو حذف کنه ، اگه ممکنه راهنماییم کنین برای SQL Server 2005 باید چیکار کنم که حجم کاهش پیدا کنه ؟؟؟

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    حجم دیتابیس عموماً به دو دلیل افزایش مییابد ( جدای از بحث افزایش دیتا)
    فایل mdf
    فایل ldf
    !
    (حتماً دارید فکر میکنید، این بابا هم چشم بسته زیر آبی ... !)

    فایل mdf دیتای اصلی را نگاه میدارد که به مرور زمان و با کارکردن، دارای فضاهای خالی اضافه ای هم میشود که با وجود افزایش حجم ولی بهتر است در صورت امکان این فضا را شیرینک نکنیم، چون وجود این فضاهای خالی اضافه موجب میشود sqlserver در قبال insert داده های جدید مجبور به بزرگ کرن فایل نشود که این کاری پر هزینه است و بازدهی را کاهش میدهد.

    =====

    ولی اغلب اوقات افراد به شرایط و قوانین حاکم بر ldf ها دقت نمیکنند و حجم ldf است که چندین و چند برابر دیتاهای اصلی میشود. (اگر کسی به شرایط دقت نکند.)

    این فایل تمام اعمال انجام شده روی دیتابیس را نگاه میدارد!!
    تا در صورت مشکل بتوان آخرین backupfull را اعمال کرد و تمام اعمال از زمان اخرین backup را دوباره و مجدداً اجرا کرد!!

    نتیجتاً اگر recoverymodel دیتابیس شما روی full تنظیم شده باشد، از زمان اخرین backup ای که از دیتابیس گرفته اید (که احتمالاً نگرفته اید!) تمام اعمال و دستورات شما به صورت مجزا و پشت سرهم مثل یک جعبه سایه هواپیما در این فایل log ذخیره شده است و حجم را .... !

    دو راه چاره اصلی دارید:
    1) از کل دیتابیس backup full تهیه کنید تا فایل log آزاد شود (و احتمالاً دستی فایل log را شیرینک کنید.)
    2) recoverymodel را روی sample قرار دهید تا کلاً sqlserver بیخیال backup شود. (و احتمالاً دستی فایل log را شیرینک کنید.)


    دستور TSQL تهیه backupfull
    BACKUP DATABASE [databasename] TO DISK = N'E:\filename.bak'

    دستور TSQL تغییر recoverymodel
    ALTER DATABASE [databasename] SET RECOVERY SIMPLE

    دستور TSQL جهت شیرینک
    (DBCC SHRINKFILE (N'databaselogfilename' , 0, TRUNCATEONLY

    databaselogfilename نیاز به درج پسوند ldf ندارد.

    موفق باشید.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  4. #3
    پروفشنال bad_boy_2007's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    ایران
    پست ها
    803

    پيش فرض

    ممنون استاد
    توضیحاتت کامل و جامع بود
    خیلی وقت بود که Full Backup از دیتابیسم نگرفته بودم
    الان بکاپ کامل گرفتم حجم از 350 به 78 رسید که هنوز هم زیاده باید یه چیزی حدود 5 مگ باشه ، میشه بگی دلیلش چیه ؟؟

  5. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    در نهایت اگر فکر میکنید همچنان دیتابستان بزرگ است، ان را Shrink کنید که خیلی مشابه فرمان Compact در اکسس است.
    اگر هر دو فایل ldf و mdf را شیرینک کنید، چیزی که باقی خواهد ماند دیگر حداقل دیتاهایتان است و دیگر قابل کاهش نیست.
    (ldf شامل دیتا نیست و در حداقل سایز دو یا سه مگ میشود)
    Last edited by _H2_; 05-12-2008 at 02:18.

  6. #5
    پروفشنال bad_boy_2007's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    ایران
    پست ها
    803

    پيش فرض

    سلام
    در نهایت اگر فکر میکنید همچنان دیتابستان بزرگ است، ان را Shrink کنید که خیلی مشابه فرمان Compact در اکسس است.
    اگر هر دو فایل ldf و mdf را شیرینک کنید، چیزی که باقی خواهد ماند دیگر حداقل دیتاهایتان است و دیگر قابل کاهش نیست.
    (ldf شامل دیتا نیست و در حداقل سایز دو یا سه مگ میشود)
    اوووووو اشتباه شد !
    دیتابیس اصلیم که حدود 350 مگ حجم د اره رو ازش Backup کامل گرفتم حجمش تغییر نکرد ، Shrink هم کردم (هم دیتابیس و هم فایلها رو) ولی باز هم فایل Log حجم 356 مگ و فایل دیتابیس حجم 5 مگ داره ، بکاپ اطلاعاتم هم 4.9 مگ شده
    دیتابیس حاوی اطلاعات فروش یک فروشگاه با دو کلاینت و یک سرور هست حدود 6 یا 7 جدول اصلی داره که تقریبا هر کدوم 4 تا 6 هزار رکورد داره ، حالا میشه بگید این حجم عادیه ؟؟
    حجم دیتا تو فایل دیتابیس هست نه ؟؟؟ فایل Log توش دیتا های اصلی نیست نه ؟ فقط عملیات هایی رو که روی دیتا ها انجام دادیم رو سطر به سطر توضیح داده نه ؟

  7. #6
    پروفشنال bad_boy_2007's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    ایران
    پست ها
    803

    پيش فرض

    یک بکاپ از دیتابیس رو تو یک دیتابیس جدید Restore کردم حجم کل دو تا فایل شد 5 مگ
    ولی نفهمیدم هنوز چطور میتونم بدون ایجاد دیتابیس جدید فایل Log رو تمیز کنم

  8. #7
    پروفشنال bad_boy_2007's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    ایران
    پست ها
    803

    پيش فرض


    حالا شد !
    ممنون استاد عزیز ، ظاهرا من دو اجرای دستورات مشکل داشتم !
    با این کد کارم راه افتاد :

    BACKUP LOG DatabaseName WITH TRUNCATE_ONLY
    DBCC SHRINKDATABASE (DatabaseName)

    حالا میشه توضیح بدی این دستورات چه کاری انجام میدن ؟؟؟

  9. #8
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    و فایل دیتابیس حجم 5 مگ داره
    حجم اصلی دیتای شما همین مقدار است.

    باز هم فایل Log حجم 356 مگ است
    شاید اینطوری حل شود:

    1- recoverymodel را sample کنید.
    2- فایل log را شیرینک کنید.
    3- درصورت تمایل مجدداً recoverymodel را full کنید.

    (برای کلیه این اعمال میتوانید از رابط کاربری قوی SSMS هم استفاده کنید.)

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •