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

عضویت در

کانال تلگرام

توسینسو

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

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

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

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

ویژگی فشرده سازی در 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 پروژه و میزان درج و ویرایش این مورد باید تصمیم گیری شود.

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