پارتیشن‌بندی جداول در SQL Server؛ راهنمای کامل با مثال

راهنمای جامع پارتیشن‌بندی جداول در SQL Server

توسط admin | گروه SQL Server | 1405/05/03

نظرات 0

راهنمای جامع پارتیشن‌بندی جداول در SQL Server

پارتیشن‌بندی به‌عنوان تصمیم معماری

پارتیشن‌بندی در SQL Server یک جدول یا ایندکس بزرگ را به بخش‌های منطقی با شماره، مرز و مقصد مشخص تقسیم می‌کند، در حالی که برنامه همچنان یک نام جدول واحد می‌بیند.

ارزش اصلی زمانی ایجاد می‌شود که کلید پارتیشن با چرخه واقعی داده هماهنگ باشد؛ تاریخ فروش، زمان رخداد یا دوره مالی نمونه‌هایی هستند که آرشیو و نگهداری آن‌ها بر اساس بازه انجام می‌شود.

این مجموعه یازده موضوع مستقل را از ساخت Function تا تشخیص شماره پارتیشن پوشش می‌دهد و برای هرکدام ده مثال، خروجی نمونه، FAQ و نکات Performance دارد.

فهرست دسترسی سریع

نقشه معماری Table Partitioning

TABLE PARTITIONING؛ نمودار فنی 1رابطه Partition Function، Partition Scheme، Filegroup، Partitioned Table و Aligned Index در TABLE PARTITIONING.TABLE PARTITIONINGPartition Functionکنترل مرحله 1Partition Schemeکنترل مرحله 2Filegroupکنترل مرحله 3Partitioned Tableکنترل مرحله 4Aligned Indexکنترل مرحله 5SPLIT / MERGEکنترل مرحله 6Best Practice: Partition Function + Partitioned Table + SPLIT / MERGEورودی، وابستگی، خطا و خروجی قبل از استقرار بررسی می‌شوند.

Function مرز منطقی را می‌سازد، Scheme مقصد ذخیره را تعیین می‌کند و جدول و ایندکس روی این Data Space قرار می‌گیرند؛ سپس عملیات نگهداری چرخه عمر داده را کنترل می‌کنند.

لایه مرزبندی منطقی

Partition Function یک ورودی تک‌ستونی دارد و با Boundary Valueها آن را به شماره پارتیشن تبدیل می‌کند. RANGE LEFT یا RANGE RIGHT تعیین می‌کند خود مقدار مرزی در کدام سمت قرار گیرد.

برای مرز ابتدای ماه معمولاً RANGE RIGHT خواناتر است؛ برای مرز پایان دوره ممکن است RANGE LEFT مناسب باشد. انتخاب نهایی باید با مقدار قبل، برابر و بعد از مرز آزموده شود.

لایه نگاشت فیزیکی

Partition Scheme شماره‌های منطقی را به Filegroupها نگاشت می‌کند. همه پارتیشن‌ها می‌توانند روی PRIMARY باشند و همچنان مزیت مدیریتی داشته باشند.

چند Filegroup زمانی توجیه دارد که I/O، Backup، Read-only یا آرشیو را بهتر کند. نگاشت پیچیده بدون زیرساخت مناسب فقط هزینه نگهداری را افزایش می‌دهد.

زمان، UTC و دقت مرز

برای کلید زمانی، date، datetime2 یا datetimeoffset باید آگاهانه انتخاب شوند. Literalهای DDL با قالب ISO نوشته شوند تا LANGUAGE و DATEFORMAT باعث تفسیر متفاوت نشوند.

در سامانه چندمنطقه‌ای ذخیره UTC و تعریف مرزها بر اساس UTC از افتادن رخداد در پارتیشن نادرست جلوگیری می‌کند. دقت ستون و Boundary نیز باید هماهنگ باشد.

معرفی یازده مقاله تخصصی

آموزش CREATE PARTITION FUNCTION در SQL Server

CREATE PARTITION FUNCTION برای ساخت پایه مرزبندی برای جدول‌ها و ایندکس‌های پارتیشن‌بندی‌شده استفاده می‌شود و محور فنی آن RANGE RIGHT است. آموزش کامل CREATE PARTITION FUNCTION با ده مثال

آموزش ALTER PARTITION FUNCTION در SQL Server

ALTER PARTITION FUNCTION برای توسعه یا کوچک‌کردن بازه‌ها در طول عمر سامانه استفاده می‌شود و محور فنی آن SPLIT RANGE است. آموزش کامل ALTER PARTITION FUNCTION با ده مثال

آموزش DROP PARTITION FUNCTION در SQL Server

DROP PARTITION FUNCTION برای پاک‌سازی طراحی قدیمی یا آزمایشی بدون شکستن وابستگی‌ها استفاده می‌شود و محور فنی آن Dependency Check است. آموزش کامل DROP PARTITION FUNCTION با ده مثال

آموزش CREATE PARTITION SCHEME در SQL Server

CREATE PARTITION SCHEME برای اتصال مرز منطقی به محل ذخیره‌سازی استفاده می‌شود و محور فنی آن Partition Scheme است. آموزش کامل CREATE PARTITION SCHEME با ده مثال

آموزش ALTER PARTITION SCHEME در SQL Server

ALTER PARTITION SCHEME برای آماده‌سازی محل ذخیره پارتیشن تازه پیش از SPLIT استفاده می‌شود و محور فنی آن NEXT USED است. آموزش کامل ALTER PARTITION SCHEME با ده مثال

آموزش DROP PARTITION SCHEME در SQL Server

DROP PARTITION SCHEME برای بازطراحی ذخیره‌سازی و حذف Data Space قدیمی استفاده می‌شود و محور فنی آن Data Space Dependency است. آموزش کامل DROP PARTITION SCHEME با ده مثال

آموزش SPLIT RANGE در پارتیشن‌بندی SQL Server

SPLIT RANGE برای ایجاد دوره یا دامنه جدید در Sliding Window استفاده می‌شود و محور فنی آن New Boundary است. آموزش کامل SPLIT RANGE با ده مثال

آموزش MERGE RANGE در پارتیشن‌بندی SQL Server

MERGE RANGE برای جمع‌کردن پنجره قدیمی پس از آرشیو یا تخلیه داده استفاده می‌شود و محور فنی آن Existing Boundary است. آموزش کامل MERGE RANGE با ده مثال

آموزش ALTER TABLE SWITCH در SQL Server

ALTER TABLE ... SWITCH برای بارگذاری سریع، آرشیو و تخلیه پارتیشن استفاده می‌شود و محور فنی آن Metadata Switch است. آموزش کامل ALTER TABLE ... SWITCH با ده مثال

آموزش TRUNCATE TABLE WITH PARTITIONS در SQL Server

TRUNCATE TABLE ... WITH (PARTITIONS(...)) برای پاک‌سازی بازه‌های مشخص با لاگ کمتر از DELETE استفاده می‌شود و محور فنی آن Partition List است. آموزش کامل TRUNCATE TABLE ... WITH (PARTITIONS(...)) با ده مثال

آموزش تابع سیستمی $PARTITION در SQL Server

$PARTITION برای آزمون مرزها، گزارش توزیع و کنترل عملیات نگهداری استفاده می‌شود و محور فنی آن $PARTITION است. آموزش کامل $PARTITION با ده مثال

جدول مقایسه موضوع‌ها

دستورکاربردنکته کلیدیآموزش کامل
CREATE PARTITION FUNCTIONساخت پایه مرزبندی برای جدول‌ها و ایندکس‌های پارتیشن‌بندی‌شدهRANGE RIGHTمقاله CREATE PARTITION FUNCTION
ALTER PARTITION FUNCTIONتوسعه یا کوچک‌کردن بازه‌ها در طول عمر سامانهSPLIT RANGEمقاله ALTER PARTITION FUNCTION
DROP PARTITION FUNCTIONپاک‌سازی طراحی قدیمی یا آزمایشی بدون شکستن وابستگی‌هاDependency Checkمقاله DROP PARTITION FUNCTION
CREATE PARTITION SCHEMEاتصال مرز منطقی به محل ذخیره‌سازیPartition Schemeمقاله CREATE PARTITION SCHEME
ALTER PARTITION SCHEMEآماده‌سازی محل ذخیره پارتیشن تازه پیش از SPLITNEXT USEDمقاله ALTER PARTITION SCHEME
DROP PARTITION SCHEMEبازطراحی ذخیره‌سازی و حذف Data Space قدیمیData Space Dependencyمقاله DROP PARTITION SCHEME
SPLIT RANGEایجاد دوره یا دامنه جدید در Sliding WindowNew Boundaryمقاله SPLIT RANGE
MERGE RANGEجمع‌کردن پنجره قدیمی پس از آرشیو یا تخلیه دادهExisting Boundaryمقاله MERGE RANGE
ALTER TABLE ... SWITCHبارگذاری سریع، آرشیو و تخلیه پارتیشنMetadata Switchمقاله ALTER TABLE ... SWITCH
TRUNCATE TABLE ... WITH (PARTITIONS(...))پاک‌سازی بازه‌های مشخص با لاگ کمتر از DELETEPartition Listمقاله TRUNCATE TABLE ... WITH (PARTITIONS(...))
$PARTITIONآزمون مرزها، گزارش توزیع و کنترل عملیات نگهداری$PARTITIONمقاله $PARTITION

شش مثال یکپارچه طراحی و نگهداری

مثال جامع 1: ساخت Function، Scheme و جدول ماهانه

این سناریو مرحله 1 از چرخه کامل Table Partitioning را نشان می‌دهد و خروجی آن برای درک نتیجه واقعی درج شده است.

CREATE PARTITION FUNCTION pf_MainMonth (date) AS RANGE RIGHT
FOR VALUES ('2026-01-01','2026-02-01','2026-03-01');
CREATE PARTITION SCHEME ps_MainMonth AS PARTITION pf_MainMonth ALL TO ([PRIMARY]);
CREATE TABLE dbo.MainSales (Id bigint NOT NULL, SaleDate date NOT NULL, Amount decimal(12,2) NOT NULL)
ON ps_MainMonth(SaleDate);
مرحلهخروجی نمونه
ساخت Function، Scheme و جدول ماهانهعملیات موفق و قابل کنترل

تحلیل مرحله 1: این مثال باید همراه شمار ردیف، مرز واقعی و وضعیت Indexها بررسی شود تا نتیجه در محیط تولید قابل پیش‌بینی باشد.

مثال جامع 2: آزمون مقدارهای مرزی

این سناریو مرحله 2 از چرخه کامل Table Partitioning را نشان می‌دهد و خروجی آن برای درک نتیجه واقعی درج شده است.

SELECT v.SampleDate, $PARTITION.pf_MainMonth(v.SampleDate) AS PartitionNo
FROM (VALUES (CAST('2026-01-31' AS date)),(CAST('2026-02-01' AS date)),(CAST('2026-02-02' AS date))) v(SampleDate);
مرحلهخروجی نمونه
آزمون مقدارهای مرزیعملیات موفق و قابل کنترل

تحلیل مرحله 2: این مثال باید همراه شمار ردیف، مرز واقعی و وضعیت Indexها بررسی شود تا نتیجه در محیط تولید قابل پیش‌بینی باشد.

مثال جامع 3: افزودن پارتیشن آینده

این سناریو مرحله 3 از چرخه کامل Table Partitioning را نشان می‌دهد و خروجی آن برای درک نتیجه واقعی درج شده است.

ALTER PARTITION SCHEME ps_MainMonth NEXT USED [PRIMARY];
ALTER PARTITION FUNCTION pf_MainMonth() SPLIT RANGE ('2026-04-01');
SELECT COUNT(*)+1 AS PartitionCount
FROM sys.partition_range_values
WHERE function_id=(SELECT function_id FROM sys.partition_functions WHERE name=N'pf_MainMonth');
مرحلهخروجی نمونه
افزودن پارتیشن آیندهعملیات موفق و قابل کنترل

تحلیل مرحله 3: این مثال باید همراه شمار ردیف، مرز واقعی و وضعیت Indexها بررسی شود تا نتیجه در محیط تولید قابل پیش‌بینی باشد.

TABLE PARTITIONING FLOW؛ نمودار فنی 2رابطه Input Data، Boundary Test، Partition Function، Partition Scheme و Filegroup در TABLE PARTITIONING FLOW.TABLE PARTITIONING FLOWInput Dataکنترل مرحله 1Boundary Testکنترل مرحله 2Partition Functionکنترل مرحله 3Partition Schemeکنترل مرحله 4Filegroupکنترل مرحله 5Partition Eliminationکنترل مرحله 6Best Practice: Input Data + Partition Scheme + Partition Eliminationورودی، وابستگی، خطا و خروجی قبل از استقرار بررسی می‌شوند.

تصویر دوم مسیر مقدار ورودی تا شماره پارتیشن، مقصد فیزیکی و نتیجه Query را نمایش می‌دهد.

مثال جامع 4: بارگذاری سریع با SWITCH

این سناریو مرحله 4 از چرخه کامل Table Partitioning را نشان می‌دهد و خروجی آن برای درک نتیجه واقعی درج شده است.

CREATE TABLE dbo.MainStage (Id bigint NOT NULL, SaleDate date NOT NULL, Amount decimal(12,2) NOT NULL,
CONSTRAINT CK_MainStage CHECK (SaleDate >= '2026-02-01' AND SaleDate < '2026-03-01'));
INSERT INTO dbo.MainStage VALUES (1,'2026-02-10',150000),(2,'2026-02-20',275000);
ALTER TABLE dbo.MainStage SWITCH TO dbo.MainSales PARTITION 3;
مرحلهخروجی نمونه
بارگذاری سریع با SWITCHعملیات موفق و قابل کنترل

تحلیل مرحله 4: این مثال باید همراه شمار ردیف، مرز واقعی و وضعیت Indexها بررسی شود تا نتیجه در محیط تولید قابل پیش‌بینی باشد.

مثال جامع 5: پاک‌سازی انتخابی یک پارتیشن

این سناریو مرحله 5 از چرخه کامل Table Partitioning را نشان می‌دهد و خروجی آن برای درک نتیجه واقعی درج شده است.

TRUNCATE TABLE dbo.MainSales WITH (PARTITIONS (2));
SELECT partition_number, rows FROM sys.partitions
WHERE object_id=OBJECT_ID(N'dbo.MainSales') AND index_id=0 ORDER BY partition_number;
مرحلهخروجی نمونه
پاک‌سازی انتخابی یک پارتیشنعملیات موفق و قابل کنترل

تحلیل مرحله 5: این مثال باید همراه شمار ردیف، مرز واقعی و وضعیت Indexها بررسی شود تا نتیجه در محیط تولید قابل پیش‌بینی باشد.

مثال جامع 6: گزارش کاتالوگ و مرزها

این سناریو مرحله 6 از چرخه کامل Table Partitioning را نشان می‌دهد و خروجی آن برای درک نتیجه واقعی درج شده است.

SELECT pf.name AS FunctionName, ps.name AS SchemeName, prv.boundary_id, prv.value
FROM sys.partition_functions pf
JOIN sys.partition_schemes ps ON ps.function_id=pf.function_id
LEFT JOIN sys.partition_range_values prv ON prv.function_id=pf.function_id
WHERE pf.name=N'pf_MainMonth' ORDER BY prv.boundary_id;
مرحلهخروجی نمونه
گزارش کاتالوگ و مرزهاعملیات موفق و قابل کنترل

تحلیل مرحله 6: این مثال باید همراه شمار ردیف، مرز واقعی و وضعیت Indexها بررسی شود تا نتیجه در محیط تولید قابل پیش‌بینی باشد.

Partition Elimination و طراحی Query

پارتیشن‌بندی به‌تنهایی Query را سریع نمی‌کند. Predicate قابل استنتاج روی ستون کلید لازم است تا Optimizer پارتیشن‌های نامرتبط را حذف کند.

شرط بازه مستقیم مانند تاریخ بزرگ‌تر مساوی شروع و کوچک‌تر از پایان معمولاً از اعمال تابع روی ستون بهتر است. Execution Plan باید تعداد پارتیشن‌های خوانده‌شده را تأیید کند.

گاهی ارزش اصلی مدیریت داده است، نه سرعت SELECT؛ آرشیو سریع، SWITCH، TRUNCATE انتخابی و نگهداری Index می‌توانند دلیل اصلی طراحی باشند.

Sliding Window و چرخه دوره‌ای

چرخه متداول شامل NEXT USED و SPLIT برای دوره آینده، SWITCH IN داده تازه، SWITCH OUT دوره قدیمی و MERGE مرز منقضی است.

SPLIT و MERGE باید تا حد ممکن روی پارتیشن خالی انجام شوند؛ وجود داده می‌تواند جابه‌جایی صفحه، رشد لاگ و قفل طولانی ایجاد کند.

Job باید Idempotent باشد، مرز تکراری نسازد، شماره پارتیشن را از متادیتا بخواند و در صورت ناسازگاری متوقف شود.

Performance، قفل و لاگ

عملیات Metadata-only نیز قفل Sch-M می‌گیرد و ممکن است پشت Session طولانی منتظر بماند. تراکنش‌های باز و Blocking باید قبل از نگهداری بررسی شوند.

برای SPLIT یا MERGE پارتیشن پر، فضای لاگ، رشد فایل، Backup Log و زمان بازیابی سنجیده شود. نتیجه محیط خالی معیار محیط تولید نیست.

sys.dm_db_partition_stats، sys.partition_range_values و sys.destination_data_spaces سه منبع اصلی مانیتورینگ ردیف، مرز و مقصد هستند.

نمودار تصمیم عملیات نگهداری

PARTITION MAINTENANCE DECISION؛ نمودار فنی 3رابطه Create Function، Create Scheme، SPLIT Empty، SWITCH Stage و TRUNCATE Selected در PARTITION MAINTENANCE DECISION.PARTITION MAINTENANCE DECISIONCreate Functionکنترل مرحله 1Create Schemeکنترل مرحله 2SPLIT Emptyکنترل مرحله 3SWITCH Stageکنترل مرحله 4TRUNCATE Selectedکنترل مرحله 5MERGE Oldکنترل مرحله 6Best Practice: Create Function + SWITCH Stage + MERGE Oldورودی، وابستگی، خطا و خروجی قبل از استقرار بررسی می‌شوند.

این نمودار انتخاب میان ساخت، توسعه، انتقال، پاک‌سازی و ادغام را بر اساس مرز و شمار ردیف نشان می‌دهد.

ده پرسش متداول Table Partitioning

آیا همیشه Query سریع‌تر می‌شود؟

خیر؛ Partition Elimination و Index مناسب لازم‌اند. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

چند Filegroup اجباری است؟

هیچ؛ همه مقصدها می‌توانند روی PRIMARY باشند. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

RANGE LEFT یا RIGHT؟

بر اساس معنا و تست مقدار مرزی انتخاب می‌شود. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

تعداد مناسب پارتیشن؟

به دوره نگهداری، حجم و هزینه آمار وابسته است. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

کلید پارتیشن در Primary Key؟

برای Unique Index هم‌تراز معمولاً باید در کلید یکتا حضور داشته باشد. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

علت خطای SWITCH؟

تفاوت ستون، Index، Compression یا Constraint. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

آیا MERGE داده را حذف می‌کند؟

خیر؛ فقط مرز را حذف می‌کند. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

زمان ساخت دوره آینده؟

پیش از اولین درج دوره جدید. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

شماره پارتیشن تاریخ؟

با $PARTITION و سپس کنترل مرزها. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

اطلاعات لازم برای سفارش طراحی؟

حجم، رشد، Query، Index، نسخه، SLA و Recovery Model. این پاسخ در چارچوب طراحی جامع پارتیشن‌بندی SQL Server ارائه شده است.

سؤال‌های مصاحبه جامع

  1. تفاوت Function و Scheme را توضیح دهید.
  2. RANGE RIGHT برای ابتدای ماه چگونه عمل می‌کند؟
  3. چرا SPLIT پارتیشن خالی ارزان‌تر است؟
  4. شرایط SWITCH موفق چیست؟
  5. Index هم‌تراز چه نقشی دارد؟
  6. توزیع ردیف را چگونه کنترل می‌کنید؟
  7. Sliding Window را مرحله‌بندی کنید.
  8. چه زمانی پارتیشن‌بندی توصیه نمی‌شود؟

جمع‌بندی راهنمای Table Partitioning

پارتیشن‌بندی موفق از شناخت چرخه داده شروع می‌شود. Function مرز، Scheme مقصد و دستورات نگهداری عمر ساختار را مدیریت می‌کنند.

از لینک‌های این صفحه برای مطالعه ده مثال هر دستور استفاده کنید و پیش از استقرار، مرز، ردیف، Index، لاگ و Rollback را در محیط نزدیک به تولید بیازمایید.

خدمات برنامه‌نویسی و پایگاه داده برای Table Partitioning

برای تبدیل آموزش Table Partitioning به یک راهکار اجرایی، خدمات برنامه‌نویسی در اصفهان و پذیرش سفارش پایگاه داده با شماره 09131253620 ارائه می‌شود.

این مجموعه معتبر از سال ۱۳۷۵ شمسی در انجام پروژه، آموزش برنامه‌نویسی و آموزش SQL Server فعالیت حرفه‌ای دارد و می‌تواند طراحی مربوط به Table Partitioning را بازبینی یا اجرا کند.

برای سفارش پروژه‌ای که Table Partitioning بخشی از آن است، از تماس مستقیم 09131253620 استفاده کنید؛ ایتا، واتساپ و تماس مستقیم با +989131253620 نیز در دسترس است.

تماس با ما برای مشاوره تخصصی Table Partitioning

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر