مقاله :: فشرده سازی دیتا در SQL
درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    تخفیف های وب سایت
    همه تخفیف ها

    عضویت در

    کانال تلگرام

    توسینسو

    اطلاعات مطلب
      مدرس/نویسنده
      سحر بیرامی
      امتیاز: 671
      رتبه:362
      0
      3
      1
      11

      ویدیوهای پیشنهادی

      فشرده سازی دیتا در SQL

      تاریخ 19 ماه قبل
      نظرات 3
      بازدیدها 254
      فشرده سازی دیتا

      ویژگی فشرده سازی در SQL این امکان را به ما میدهد که حجم دیتای جداول را کم کنیم ، حال ممکن است بپرسید کمتر کردن حجم دیتا به جز کاهش حجم مصرفی هارد دیسک چه مزایایی دارد ؟؟
      خوب همانطور که میدانید داده ها در اس کیو ال سرور در صفحات ذخیره میشوند و در هنگام واکشی اطلاعات (دستورات Select ) این صفحات به حافظه Ram فراخوانی میشوند و بعد از اعمال شرایط و ستون ها نتیجه نهایی نمایش داده میشود .حال اگر با استفاده از فشرده سازی تعداد صفحات کمتری به حافظه Ram فراخوانی شوند ، کوئری ها در واقع صفحات کمتری را پیمایش میکنند و در نتیجه زمان I/O کاهش پیدا میکند واین به سرعت اجرای کوئری شما کمک خواهد کرد .

      دو نوع فشرده سازی در Sql :
      Row Level Compression وPage Level Compression

      Row level Compression : این نوع فشرده سازی در سطح رکورد انجام میشود. در واقع دیتاهایی که به شکل ثابت هستند را به نوع داده با طول متغیر تبدیل میکند .
      برای مثال فرض کنید یک جدول با یک نوع (Char(50 تعریف کنیم ، حال اگر دیتای Sahar Beyrami را در یک سطر آن وارد نمائیم ، در حالت عادی این دیتا همان 50 بایت فضا را اشغال میکند و اگر بر روی جدول فشرده سازی در سطح رکورد انجام شود به تعداد 13 بایت فضا اشغال خواهد کرد ( یعنی تعداد کاراکتر های Sahar Beyrami )
      این موضوع برای انواع داده های دیگر نیز صادق است .

      Page Level Compression :
      فشرده سازی در سطح Page در واقع از سه فشرده سازی تشکیل شده است:
      1. Row compression
      2. Prefix compression
      3.Dictionary compression

      Row Compression که در بالا شرح داده شد و اما در فشرده سازی دوم عبارات تکرای در ستون ها شناسایی میشود و به جای آنها از یک Token یا نشانه استفاده میشود و خود Token در قسمت هدر صفحه ذخیره میشود . به مثال زیر دقت کنید ، تصویر اول جدول قبل از Prefix Compression و تصویر دو بعد از آن را نمایش میدهد . بنابراین در این مرحله از فشرده سازی بجای دیتای مشترک در ستون ها از نشانه ها استفاده میشود .

      فشرده سازی دیتا در SQL


      فشرده سازی دیتا در SQL


      در فشرده سازی مرحله سوم یعنی Dictionary compression مرحله دوم تکمیل میشود و در واقع عبارات تکراری در کل صفحه شناسایی و همانند یک دیکشنری عبارات تکراری به هدر صفحه منتقل میشوند و نشانه ها در کل صفحه به جای عبارات تکراری می نشینند .
      فشرده سازی دیتا در SQL


      حال با استفاده از یک مثال عملی که در Sql پیاده سازی و اجرا شده پیش می رویم :
      در این مثال سه جدول زیر را ایجاد کنید .( در ادامه اسکریپت ها به طور کامل نوشته شده )

      None_Compression : جدول حالت عادی
      Rows_Compression : جدول با نوع فشرده سازی در سطح Row
      Page_Compression : جدول با نوع فشرده سازی در سطح Page


      فشرده سازی دیتا در SQL


      همانطور که می بینید برای ایجاد جدول با فشرده سازی از عبارت WITH (Data_Compression = Page) استفاده می کنیم .
      بعد از ایجاد جداول و درج دیتا در سه جدول دستور زیر را بری نمایش حجم مصرفی جدوال استفاده می کنیم :
      SPSPACEUSED NoneCompression
      GO
      SPSPACEUSED RowsCompression
      GO
      SPSPACEUSED PageCompression
      GO
      فشرده سازی دیتا در SQL


      نتیجه همانند شکل بالا خواهد بود . همانطور که می بینید، جدول در حالت عادی 896 کیلو بایت ، در نوع دوم فشرده سازی 728 کیلو بایت و در نوع فشرده سازی سوم 16 کیلو بایت فضا اشغال شده است .
      خوب حالا اگر دستور * Select را برای سه جدول اجرا کنیم و کلید Ctl+ L را برای مقایسه سه دستور اجرا کنیم نتیجه به شکل زیر خواهد بود . از تصویر مشخص است که هزینه اجرای کوئری در حالتی که بر روی جدول فشرده سازی از نوع Page انجام شده 3 درصد ، در فشرده سازی نوع رکورد 44 درصد و در حالت عادی 53 درصد است که طبعا 3 درصد خیلی کمتر است . در واقع با استفاده از فشرده سازی سرعت اجرای کوئری به مقدار قابل توجهی افزایش می یابد.

      فشرده سازی دیتا در SQL


      در پایان اگر جدولی از قبل ایجاد کرده اید و حال میخواهید فشرده سازی بر روی انجام دهید کافی است از دستور زیر استفاده کنید :
      (ALTER TABLE [TableName] REBUILD WITH (DATA_COMPRESSION = ROW
      به جای Row ، از Page و یا None استفاده کنید.

      امیدوارم این مقاله مفید باشد...
      برچسب ها
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      • با تشکر، مطلب بسیار مفید و آموزنده بود .
      • مقاله بسیار مفیدی بود اما به نظرم خوب بود از معایب این روش مثل درگیر شدن CPU برای Decompress هم گفته میشد. البته به نظرم در میزان رم مصرفی هم به دلیل بهینه شدن ایندکس ها تغییر حاصل میشود.
      • پاسخ به : reza.fiuz

        خوشحالم که نوشته ام مفید بوده است و اما از معایب این روش همانطور که فرمودید در عملیات update , insert به صورت Bulk ممکن است usage cpu برای Decompress افزایش پیدا کند .
        ولی با توجه به پیشرفت Cpu های امروز به نظرم برای افزایش Performance کوئری ها و به خصوص گزارشات ارزش استفاده دارد .
        در هر حال برای فشرده سازی با توجه به business پروژه و میزان درج و ویرایش این مورد باید تصمیم گیری شود.

      برای ارسال نظر ابتدا به سایت وارد شوید