SQL Server؛ مدیریت جدول‌های بسیار بزرگ با Table Partitioning

چرا مهم است

اگر با جدول‌های بسیار بزرگ کار می‌کنی، backup،؜ نگهداری index و حذف داده‌های قدیمی می‌توانند پرهزینه شوند. این راهنما نشان می‌دهد چطور داده را به بخش‌های قابل‌مدیریت تقسیم کنی، بدون اینکه برنامه به جدول‌های جداگانه نیاز داشته باشد.

قبل از خواندن، این‌ها را بدان۵ مفهوم
Table Partitioning

تقسیم داده‌های یک جدول به بخش‌های کوچک‌تر براساس یک ستون، درحالی‌که برنامه همچنان با یک جدول منطقی کار می‌کند.

در حال نگارش: Table Partitioning

partition key

ستونی که مقدار آن برای تعیین partition هر ردیف استفاده می‌شود؛ مثلاً تاریخ سفارش.

در حال نگارش: partition key

partition function

در SQL Server،؜ قواعد و مرزهایی که تعیین می‌کنند هر مقدار partition key به کدام partition تعلق دارد.

در حال نگارش: partition function

partition scheme

در SQL Server،؜ نگاشتی که partition‌های منطقی را به filegroup‌های محل ذخیره‌سازی متصل می‌کند.

در حال نگارش: partition scheme

filegroup

گروه منطقی ذخیره‌سازی در SQL Server که یک یا چند فایل داده را در بر می‌گیرد.

در حال نگارش: filegroup

جدولی که در شروع کار کوچک است، ممکن است به‌مرور میلیون‌ها یا میلیاردها ردیف جمع کند؛ از سفارش‌های فروشگاه گرفته تا transaction‌های بانکی و رویدادهای ثبت‌شده در یک سامانه. راهنمای SQLServerCentral توضیح می‌دهد که در این مقیاس، نگهداری جدول دشوارتر می‌شود: زمان backup افزایش می‌یابد، بازسازی یا سازمان‌دهی مجدد index‌ها منابع و زمان بیشتری می‌خواهد و حذف داده‌های قدیمی با DELETE می‌تواند transaction log بزرگی ایجاد کند و باعث lock contention شود.

راهکار مطرح‌شده، Table Partitioning در SQL Server است. داده‌ها براساس یک ستون معنادار، مثل تاریخ سفارش، سال، منطقه یا دستهٔ مشتری، به partition‌های کوچک‌تر تقسیم می‌شوند. برنامه همچنان همان جدول را می‌بیند و لازم نیست شیوهٔ خواندن و نوشتن داده را تغییر دهد؛ اما SQL Server می‌تواند هر partition را جداگانه مدیریت کند. این جداسازی، نگهداری database،؜ رسیدگی به index‌ها، سازمان‌دهی فضای ذخیره‌سازی و آرشیو داده‌های تاریخی را آسان‌تر می‌کند.

در مثال مقاله، جدول Sales.Orders با ستون OrderDate تقسیم می‌شود. این ستون نقش partition key را دارد و مشخص می‌کند هر سفارش به کدام بخش تعلق دارد. چهار بخش برای سفارش‌های پیش از ۲۰۲۴، سفارش‌های ۲۰۲۴، سفارش‌های ۲۰۲۵ و سفارش‌های ۲۰۲۶ به بعد در نظر گرفته شده است؛ بدون اینکه برای هر سال نام جدول جداگانه‌ای لازم باشد.

دو جزء دیگر، قواعد تقسیم و محل ذخیره‌سازی را تعیین می‌کنند. partition function مرزهای تاریخ را مشخص می‌کند تا هر ردیف در partition مناسب قرار بگیرد. partition scheme نیز هر partition منطقی را به یک filegroup متصل می‌کند. هر filegroup می‌تواند یک یا چند فایل داده داشته باشد؛ فایل‌هایی که داده‌های جدول و index در آن‌ها ذخیره می‌شوند و اغلب پسوند .ndf دارند.

بخش اجرایی متن با ساخت database به نام SalesDB و schema به نام Sales شروع می‌شود. سپس filegroup‌های مربوط به بازه‌های زمانی ساخته می‌شوند. دستورهای نمایش‌داده‌شده پیش از ایجاد این موارد، وجودشان را بررسی می‌کنند تا موارد موجود دوباره ساخته یا جایگزین نشوند. متن بعد به ساخت فایل‌های داده و دریافت مسیر پیش‌فرض ذخیره‌سازی SQL Server می‌رسد.

نکتهٔ مهم راهنما این است که قرار دادن partition‌ها در filegroup‌های جدا، به‌خودی‌خود query‌ها را سریع‌تر نمی‌کند. استفاده از دیسک‌های جدا هم باید با راهبرد ذخیره‌سازی و نگهداری هماهنگ باشد؛ محور بحث، مدیریت داده در بخش‌های کوچک‌تر است.

نکته کلیدی

هنگام طراحی، نقش‌ها را جدا نگه دار: partition function مرز داده را تعیین می‌کند و partition scheme محل آن را به filegroup وصل می‌کند. از filegroup جدا انتظار سرعت بیشتر query نداشته باش؛ این جداسازی خودکار چنین اثری ندارد.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)