نقشه راه Data Compression و کاهش فضای SQL Server
مقدمه و دامنه این مجموعه
این مقاله یک نقشه جامع برای «نقشه راه Data Compression و کاهش فضای SQL Server» ارائه میکند و تمام ابزارها، Viewها، Waitها، Commandها و Featureهای موجود در این خانواده را در یک مسیر منسجم قرار میدهد. هدف فقط معرفی نامها نیست؛ بلکه خواننده باید بداند هر جزء چه پرسشی را پاسخ میدهد و در چه مرحلهای از عیبیابی یا بهینهسازی به کار میآید.
مخاطب این راهنما مدیر پایگاه داده، توسعهدهنده ارشد و مسئول نگهداری سامانههای تراکنشی است. پیشنیاز آن آشنایی پایه با T-SQL، تراکنش، فایلهای داده و لاگ و توانایی اجرای Queryهای تشخیصی در محیط آزمایشی است.
در این خانواده 8 موضوع مستقل وجود دارد. برای هر موضوع یک مقاله کامل با مثال، خروجی، خطاهای رایج و Performance آماده شده و لینک مستقیم آن در بخشهای زیر قرار دارد.
تعریف مجموعه و جایگاه آن در SQL Server
عنوان Data Compression یک حوزه عملیاتی را پوشش میدهد که در آن مشاهدهپذیری، کنترل همزمانی، مدیریت فضا یا انتخاب تنظیم مناسب به هم متصلاند. ارزش مجموعه زمانی آشکار میشود که اجزا بهصورت زنجیرهای استفاده شوند: ابتدا شاخص مشاهده میشود، سپس علت محتمل بررسی میگردد، بعد تغییر محدود انجام میشود و در پایان نتیجه با Baseline مقایسه میشود.
هر عضو این خانواده نقش متفاوتی دارد. بعضی فقط وضعیت را گزارش میکنند، بعضی امکان تغییر رفتار میدهند و بعضی برای برآورد هزینه یا ظرفیت استفاده میشوند. ادغام این نقشها بدون تشخیص Scope، احتمال اقدام اشتباه را افزایش میدهد.
در طراحی Runbook، اعضا را بر اساس سؤال عملی دستهبندی کنید: «چه اتفاقی افتاده؟»، «چرا رخ داده؟»، «چه تغییری مجاز است؟» و «چگونه موفقیت را ثابت میکنیم؟». این دستهبندی از حفظکردن فهرست نامها کاربردیتر است.
این تصویر جایگاه نقشه راه Data Compression و کاهش فضای SQL Server را در معماری عملی SQL Server نشان میدهد و رابطه میان ورودی، وضعیت داخلی، متریک قابل مشاهده و تصمیم اصلاحی را بهصورت یک نقشه فنی خلاصه میکند. فرم بصری انتخابشده برای این مقاله: Performance / Tuning / Optimization.
دستهبندی اجزا و لینک آموزش کامل
فشردهسازی ROW
ROW Compression یکی از اجزای این مجموعه است و برای پاسخ به یک سؤال مشخص درباره وضعیت، پیکربندی یا Performance استفاده میشود. پیش از اقدام، Scope و زمان اعتبار داده را مشخص کنید. آموزش کامل ROW Compression با مثالهای عملی
فشردهسازی PAGE
PAGE Compression یکی از اجزای این مجموعه است و برای پاسخ به یک سؤال مشخص درباره وضعیت، پیکربندی یا Performance استفاده میشود. پیش از اقدام، Scope و زمان اعتبار داده را مشخص کنید. آموزش کامل PAGE Compression با مثالهای عملی
فشردهسازی COLUMNSTORE
COLUMNSTORE Compression یکی از اجزای این مجموعه است و برای پاسخ به یک سؤال مشخص درباره وضعیت، پیکربندی یا Performance استفاده میشود. پیش از اقدام، Scope و زمان اعتبار داده را مشخص کنید. آموزش کامل COLUMNSTORE Compression با مثالهای عملی
فشردهسازی XML
XML_COMPRESSION یکی از اجزای این مجموعه است و برای پاسخ به یک سؤال مشخص درباره وضعیت، پیکربندی یا Performance استفاده میشود. پیش از اقدام، Scope و زمان اعتبار داده را مشخص کنید. آموزش کامل XML_COMPRESSION با مثالهای عملی
جدول مقایسه موضوعها
| موضوع یا تابع | نوع | کاربرد اصلی / نکته مهم | لینک آموزش کامل |
|---|
| ROW Compression | FEATURE | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
| PAGE Compression | FEATURE | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
| COLUMNSTORE Compression | FEATURE | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
| COLUMNSTORE_ARCHIVE Compression | FEATURE | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
| XML_COMPRESSION | FEATURE | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
| ALTER TABLE ... REBUILD WITH (DATA_COMPRESSION = ...) | COMMAND | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
| ALTER INDEX ... REBUILD WITH (DATA_COMPRESSION = ...) | COMMAND | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
| sp_estimate_data_compression_savings | STORED_PROCEDURE | مشاهده، تحلیل یا تغییر کنترلشده | مطالعه مقاله کامل |
معماری تصمیمگیری در این خانواده
لایه مشاهده
ابتدا از View، DMV، Wait یا Query وضعیت برای ثبت شواهد استفاده میشود. خروجی باید با زمان، Scope و شرایط بار همراه باشد.
لایه تحلیل
شواهد خام با رخدادهای برنامه، Queryها، تراکنشها، فایلها و متریکهای سیستم تطبیق داده میشود تا علت محتمل از همبستگی ساده جدا شود.
لایه اقدام و بازبینی
هر تغییر باید محدود، قابل بازگشت و دارای معیار موفقیت باشد. پس از اجرا، همان Queryهای پایه دوباره اجرا میشوند تا اثر واقعی سنجیده شود.
در این نمای اجرایی، مسیر تبدیل داده یا رویداد مرتبط با نقشه راه Data Compression و کاهش فضای SQL Server به خروجی تشخیصی و سپس اقدام کنترلشده نمایش داده شده است؛ پنل مقایسهای کمک میکند Baseline با وضعیت فعلی اشتباه نشود. فرم بصری انتخابشده برای این مقاله: Performance / Tuning / Optimization.
مثالهای ترکیبی و قابل اجرا
مثال ترکیبی 1: ساخت Baseline و مقایسه
این مثال بخشی از خانواده را در یک سناریوی مشترک به کار میگیرد. هدف، جمعآوری داده قابل تکرار و ساختن نقطه مقایسه برای بررسی بعدی است؛ خروجی را همراه زمان و شرایط بار ذخیره کنید.
EXEC sys.sp_estimate_data_compression_savings @schema_name=N'dbo',@object_name=N'FactSales',@index_id=NULL,@partition_number=NULL,@data_compression=N'PAGE';
| شاخص | مقدار نمونه | تصمیم |
|---|
| Metric-1 | نمونه ثبتشده | با برداشت بعدی مقایسه شود |
| Scope | Database / Instance | در گزارش درج شود |
نکته فنی: این Query بهتنهایی نسخه نهایی عیبیابی نیست. آن را با حداقل یک شاهد مستقل از برنامه، سیستمعامل یا Execution Plan ترکیب کنید.
مثال ترکیبی 2: ساخت Baseline و مقایسه
این مثال بخشی از خانواده را در یک سناریوی مشترک به کار میگیرد. هدف، جمعآوری داده قابل تکرار و ساختن نقطه مقایسه برای بررسی بعدی است؛ خروجی را همراه زمان و شرایط بار ذخیره کنید.
SELECT object_id,index_id,data_compression_desc FROM sys.partitions WHERE object_id=OBJECT_ID(N'dbo.FactSales');
| شاخص | مقدار نمونه | تصمیم |
|---|
| Metric-2 | نمونه ثبتشده | با برداشت بعدی مقایسه شود |
| Scope | Database / Instance | در گزارش درج شود |
نکته فنی: این Query بهتنهایی نسخه نهایی عیبیابی نیست. آن را با حداقل یک شاهد مستقل از برنامه، سیستمعامل یا Execution Plan ترکیب کنید.
مثال ترکیبی 3: ساخت Baseline و مقایسه
این مثال بخشی از خانواده را در یک سناریوی مشترک به کار میگیرد. هدف، جمعآوری داده قابل تکرار و ساختن نقطه مقایسه برای بررسی بعدی است؛ خروجی را همراه زمان و شرایط بار ذخیره کنید.
ALTER INDEX IX_FactSales_OrderDate ON dbo.FactSales REBUILD WITH (DATA_COMPRESSION=PAGE);
| شاخص | مقدار نمونه | تصمیم |
|---|
| Metric-3 | نمونه ثبتشده | با برداشت بعدی مقایسه شود |
| Scope | Database / Instance | در گزارش درج شود |
نکته فنی: این Query بهتنهایی نسخه نهایی عیبیابی نیست. آن را با حداقل یک شاهد مستقل از برنامه، سیستمعامل یا Execution Plan ترکیب کنید.
مثال ترکیبی 4: ساخت Baseline و مقایسه
این مثال بخشی از خانواده را در یک سناریوی مشترک به کار میگیرد. هدف، جمعآوری داده قابل تکرار و ساختن نقطه مقایسه برای بررسی بعدی است؛ خروجی را همراه زمان و شرایط بار ذخیره کنید.
ALTER TABLE dbo.FactSales REBUILD PARTITION=ALL WITH (DATA_COMPRESSION=ROW);
| شاخص | مقدار نمونه | تصمیم |
|---|
| Metric-4 | نمونه ثبتشده | با برداشت بعدی مقایسه شود |
| Scope | Database / Instance | در گزارش درج شود |
نکته فنی: این Query بهتنهایی نسخه نهایی عیبیابی نیست. آن را با حداقل یک شاهد مستقل از برنامه، سیستمعامل یا Execution Plan ترکیب کنید.
مثال ترکیبی 5: ساخت Baseline و مقایسه
این مثال بخشی از خانواده را در یک سناریوی مشترک به کار میگیرد. هدف، جمعآوری داده قابل تکرار و ساختن نقطه مقایسه برای بررسی بعدی است؛ خروجی را همراه زمان و شرایط بار ذخیره کنید.
SELECT SUM(reserved_page_count) AS Pages FROM sys.dm_db_partition_stats WHERE object_id=OBJECT_ID(N'dbo.FactSales');
| شاخص | مقدار نمونه | تصمیم |
|---|
| Metric-5 | نمونه ثبتشده | با برداشت بعدی مقایسه شود |
| Scope | Database / Instance | در گزارش درج شود |
نکته فنی: این Query بهتنهایی نسخه نهایی عیبیابی نیست. آن را با حداقل یک شاهد مستقل از برنامه، سیستمعامل یا Execution Plan ترکیب کنید.
مثال ترکیبی 6: ساخت Baseline و مقایسه
این مثال بخشی از خانواده را در یک سناریوی مشترک به کار میگیرد. هدف، جمعآوری داده قابل تکرار و ساختن نقطه مقایسه برای بررسی بعدی است؛ خروجی را همراه زمان و شرایط بار ذخیره کنید.
SELECT OBJECT_NAME(object_id) AS ObjectName,data_compression_desc,COUNT(*) AS Partitions FROM sys.partitions GROUP BY object_id,data_compression_desc;
| شاخص | مقدار نمونه | تصمیم |
|---|
| Metric-6 | نمونه ثبتشده | با برداشت بعدی مقایسه شود |
| Scope | Database / Instance | در گزارش درج شود |
نکته فنی: این Query بهتنهایی نسخه نهایی عیبیابی نیست. آن را با حداقل یک شاهد مستقل از برنامه، سیستمعامل یا Execution Plan ترکیب کنید.
سناریوهای واقعی
در Incident کندی، ابتدا Queryهای فقطخواندنی این مجموعه اجرا میشوند تا وضعیت لحظهای و روند کوتاهمدت ثبت شود. سپس موضوعی که بیشترین ارتباط را با اثر کاربر دارد انتخاب و مقاله فرزند آن برای تحلیل عمیق دنبال میشود.
در Capacity Planning، خروجیهای فضا، لاگ، Version Store یا Compression بهصورت دورهای نگهداری میشوند. هدف پیشبینی زمان رسیدن به آستانه و برنامهریزی تغییر پیش از ایجاد اختلال است.
در Change Management، Feature یا Command فقط پس از ثبت Baseline، تعریف معیار موفقیت و آمادهسازی Rollback اجرا میشود. این مجموعه باید بخشی از Runbook رسمی تیم باشد، نه مجموعهای از فرمانهای موردی.
هشدار درباره اقدامهای زنجیرهای
ترکیب چند تغییر در یک مرحله، تشخیص اثر هر تغییر را غیرممکن میکند. در محیط Production هر بار یک متغیر را تغییر دهید، اثر را اندازهگیری کنید و سپس به مرحله بعد بروید.
اشتباهات رایج
- انتخاب ابزار پیش از تعریف سؤال عیبیابی.
- مقایسه Snapshotهایی که Scope یا زمان اعتبار متفاوت دارند.
- اجرای تغییرات فایل، Isolation یا Rebuild بدون پنجره نگهداری.
- استفاده از یک آستانه ثابت برای همه سرورها.
- ذخیره خروجی بدون زمان، نام پایگاه و Context رخداد.
- نادیده گرفتن هزینه خودِ Query مانیتورینگ.
در سطح مجموعه، Performance فقط کاهش زمان یک Query نیست. باید اثر روی CPU، IO، لاگ، TempDB، Lock Duration، Recovery و زمان نگهداری همزمان ارزیابی شود. بهبود محلی ممکن است هزینه را به لایه دیگری منتقل کند.
برای مقایسه معتبر، یک Workload نماینده و بازه زمانی همسان انتخاب کنید. تغییرات بزرگ را روی زیرمجموعه داده یا Partition آزمایش کنید و سپس با معیارهای عددی تصمیم به توسعه دامنه بگیرید.
- Queryهای مشاهدهای را فیلتر و زمانبندی کنید.
- Baseline عادی و پرترافیک داشته باشید.
- تغییرات را تکبهتک اجرا کنید.
- محدودیت نسخه و Edition را پیش از فعالسازی بررسی کنید.
- پس از تغییر، بازه کافی برای مشاهده اثر در نظر بگیرید.
Best Practices
- برای هر موضوع Owner و Runbook مشخص تعریف کنید.
- خروجیها را با زمان و Scope استاندارد ذخیره کنید.
- از Queryهای کمخطر برای مرحله اول Incident استفاده کنید.
- Featureها و Database Optionها را با Rollback Plan فعال کنید.
- آستانهها را از Baseline همان محیط استخراج کنید.
- تغییرات نگهداری را با ظرفیت لاگ و TempDB هماهنگ کنید.
- نتیجه را به زبان اثر کسبوکار گزارش کنید.
- مقالات فرزند را بر اساس مسئله واقعی، نه ترتیب فهرست، مطالعه کنید.
این تصویر برای تصمیمگیری درباره خطا، هزینه و Best Practice در نقشه راه Data Compression و کاهش فضای SQL Server طراحی شده است و نشان میدهد انتخاب درست باید همزمان اثر کارایی، ریسک عملیاتی و قابلیت بازگشت را پوشش دهد. فرم بصری انتخابشده برای این مقاله: Performance / Tuning / Optimization.
مزایا، محدودیتها و زمان نامناسب استفاده
| بُعد | مزیت | محدودیت |
|---|
| پوشش | نمای جامع چند ابزار و تنظیم | نیازمند Context محیط |
| عملیات | قابل تبدیل به Runbook | تغییرات ممکن است اثر جانبی داشته باشند |
| آموزش | مسیر مادر–فرزند روشن | مطالعه بدون تمرین کافی نیست |
این مجموعه زمانی نباید بهعنوان چکلیست مکانیکی استفاده شود که سؤال عیبیابی، Scope یا معیار موفقیت تعریف نشده است. ابتدا مسئله را دقیق کنید و سپس فقط ابزارهای مرتبط را اجرا نمایید.
سؤالات متداول
از کدام عضو مجموعه شروع کنیم؟
از عضوی که کمخطرترین مشاهده را برای سؤال فعلی فراهم میکند.
آیا باید همه Queryها را همیشه اجرا کرد؟
خیر؛ فقط Queryهای مرتبط با Scope و اثر کاربر را انتخاب کنید.
چند Snapshot لازم است؟
حداقل Baseline عادی و نمونه رخداد؛ برای روند معتبر نمونههای بیشتری لازم است.
چرا نتیجه دو سرور یکسان نیست؟
اندازه، بار، نسخه، سختافزار و تنظیمات متفاوتاند.
آیا تغییرات را میتوان همزمان اجرا کرد؟
بهتر است تکبهتک باشند تا اثر هر تغییر قابل انتساب بماند.
بهترین آستانه هشدار چیست؟
آستانهای که از Baseline همان محیط و اثر واقعی سرویس استخراج شود.
چگونه خروجیها را نگهداری کنیم؟
در جدول تاریخچه با زمان، Scope، نسخه و شناسه رخداد.
چه زمانی Rollback لازم است؟
وقتی معیار توقف یا Regression مشاهده شود.
آیا مانیتورینگ هزینه دارد؟
بله؛ تناوب و حجم خروجی باید کنترل شود.
چگونه مسیر مطالعه را ادامه دهیم؟
از جدول مقایسه، مقاله فرزند مرتبط با مسئله فعلی را انتخاب کنید.
سؤالات مصاحبه
چگونه از این خانواده یک Runbook میسازید؟
پاسخ باید شامل سؤال آغازین، Query کمخطر، معیار Escalation، اقدام محدود، Rollback و بازبینی باشد.
چرا Baseline از Threshold مهمتر است؟
زیرا Threshold عمومی تفاوت اندازه و بار سیستمها را نادیده میگیرد، اما Baseline رفتار طبیعی همان محیط را نشان میدهد.
چگونه Root Cause را از Correlation جدا میکنید؟
با شواهد مستقل، تکرارپذیری و تغییر کنترلشده که اثر قابل اندازهگیری ایجاد کند.
چه زمانی تغییر را متوقف میکنید؟
وقتی معیار توقف فعال شود، اثر جانبی بیشتر از منفعت باشد یا داده کافی برای ادامه وجود نداشته باشد.
گزارش فنی خوب چه اجزایی دارد؟
زمان، Scope، اثر کاربر، شواهد، تصمیم، ریسک، نتیجه و اقدام بعدی.
چکلیست نهایی
- مسئله و اثر کاربر تعریف شد.
- Scope و زمان اعتبار داده مشخص است.
- Baseline در دسترس است.
- ابزار کمخطر آغازین انتخاب شد.
- شواهد مستقل جمعآوری شد.
- تغییر محدود و قابل بازگشت است.
- معیار موفقیت و توقف تعریف شد.
- بازبینی پس از تغییر انجام میشود.
خدمات برنامهنویسی و پایگاه داده
برای قبول سفارشهای برنامهنویسی و پایگاه داده با شماره 09131253620 تماس بگیرید. این مجموعه در حوزه برنامهنویسی در اصفهان، انجام پروژه، آموزش برنامهنویسی و آموزش SQL Server فعالیت دارد و مجموعهای معتبر با سابقه فعالیت حرفهای از سال ۱۳۷۵ شمسی تاکنون است.
خدمات شامل انجام پروژههای برنامهنویسی، طراحی و بهینهسازی پایگاه داده، آموزش برنامهنویسی و آموزش پایگاه داده SQL Server است. برای سفارش پروژه از طریق ایتا، واتساپ و تماس مستقیم هماهنگ کنید.
تماس مستقیم با 09131253620 | تماس با ما و ثبت سفارش پروژه