آموزش فشرده سازی داده در SQL Server

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

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
سرفصل های این مطلب
  1. انواع فشرده سازی در SQL :

انواع فشرده سازی در SQL :

نوع اول : 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 و تصویر دو بعد از آن را نمایش میدهد . بنابراین در این مرحله از فشرده سازی بجای دیتای مشترک در ستون ها از نشانه ها استفاده میشود .

وب سایت توسینسو
وب سایت توسینسو

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

وب سایت توسینسو

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

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


وب سایت توسینسو

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

SPSPACEUSED NoneCompression

GO

SPSPACEUSED RowsCompression

GO

SPSPACEUSED PageCompression

GO
وب سایت توسینسو

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

وب سایت توسینسو

در پایان اگر جدولی از قبل ایجاد کرده اید و حال میخواهید فشرده سازی بر روی انجام دهید کافی است از دستور زیر استفاده کنید :

(ALTER TABLE [TableName] REBUILD WITH (DATA_COMPRESSION = ROW

به جای Row ، از Page و یا None استفاده کنید. امیدوارم این مقاله مفید باشد.


نظرات