آموزش تابع سیستمی $PARTITION در SQL Server؛ آموزش کامل با ۱۰ مثال SQL Server

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

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

نظرات 0

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

مقدمه اختصاصی $PARTITION

$PARTITION شماره پارتیشنی را برمی‌گرداند که یک مقدار بر اساس تعریف Function در آن قرار می‌گیرد. این قابلیت زمانی نتیجه مطلوب می‌دهد که مرز داده، الگوی Query و برنامه نگهداری از ابتدا هماهنگ شوند.

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

برای دیدن جایگاه $PARTITION در کل مجموعه، راهنمای جامع پارتیشن‌بندی جداول در SQL Server را باز کنید.

تعریف فنی و نحو $PARTITION

در سطح کاتالوگ، $PARTITION روی اشیای پارتیشن‌بندی و وابستگی‌های آن‌ها اثر می‌گذارد. خروجی دستور باید با متادیتا و شمار ردیف‌ها تأیید شود، نه فقط با نبود پیام خطا.

قاعده ایمنی $PARTITION: پیش‌شرط، دامنه اثر، Transaction کوتاه و برنامه بازگشت باید پیش از اجرای تولید مشخص باشند.

Syntax استاندارد $PARTITION

$PARTITION.partition_function_name ( expression )

پارامترهای کلیدی $PARTITION

جزءتوضیح
نام Functionبدون پرانتز خالی
Expressionمقدار یا ستون سازگار
خروجیشماره صحیح پارتیشن

نقشه مفهومی $PARTITION

$PARTITION؛ نمودار فنی 1رابطه $PARTITION، Partition Number، Boundary Test، GROUP BY و Row Distribution در $PARTITION.$PARTITION$PARTITIONکنترل مرحله 1Partition Numberکنترل مرحله 2Boundary Testکنترل مرحله 3GROUP BYکنترل مرحله 4Row Distributionکنترل مرحله 5RANGE RIGHTکنترل مرحله 6Best Practice: $PARTITION + GROUP BY + RANGE RIGHTورودی، وابستگی، خطا و خروجی قبل از استقرار بررسی می‌شوند.

تصویر اول نشان می‌دهد $PARTITION چگونه با Partition Number، Boundary Test و کنترل نتیجه در فرایند $PARTITION مرتبط می‌شود.

ده مثال عملی منحصربه‌فرد برای $PARTITION

مثال 1: تعریف پایه با مقدار ثابت در $PARTITION

در مثال شماره 1، سناریوی «تعریف پایه با مقدار ثابت» برای $PARTITION اجرا می‌شود. هدف این است که رفتار $PARTITION در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_01 (int) AS RANGE RIGHT FOR VALUES (100,200);
SELECT v.ValueItem, $PARTITION.pf_Dollar_01(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(99),(100),(101),(200),(201)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 2: اجرای سناریو روی جدول نمونه در $PARTITION

در مثال شماره 2، سناریوی «اجرای سناریو روی جدول نمونه» برای $PARTITION اجرا می‌شود. هدف این است که رفتار Partition Number در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_02 (int) AS RANGE LEFT FOR VALUES (200,300);
SELECT v.ValueItem, $PARTITION.pf_Dollar_02(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(199),(200),(201),(300),(301)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 3: استفاده در SELECT و گزارش‌گیری در $PARTITION

در مثال شماره 3، سناریوی «استفاده در SELECT و گزارش‌گیری» برای $PARTITION اجرا می‌شود. هدف این است که رفتار Boundary Test در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_03 (int) AS RANGE RIGHT FOR VALUES (300,400);
SELECT v.ValueItem, $PARTITION.pf_Dollar_03(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(299),(300),(301),(400),(401)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 4: کنترل شرط و بازه هدف در $PARTITION

در مثال شماره 4، سناریوی «کنترل شرط و بازه هدف» برای $PARTITION اجرا می‌شود. هدف این است که رفتار GROUP BY در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_04 (int) AS RANGE LEFT FOR VALUES (400,500);
SELECT v.ValueItem, $PARTITION.pf_Dollar_04(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(399),(400),(401),(500),(501)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 5: ترکیب با قابلیت مکمل SQL Server در $PARTITION

در مثال شماره 5، سناریوی «ترکیب با قابلیت مکمل SQL Server» برای $PARTITION اجرا می‌شود. هدف این است که رفتار Row Distribution در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_05 (int) AS RANGE RIGHT FOR VALUES (500,600);
SELECT v.ValueItem, $PARTITION.pf_Dollar_05(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(499),(500),(501),(600),(601)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

$PARTITION؛ نمودار فنی 2رابطه Partition Number، Boundary Test، GROUP BY، Row Distribution و RANGE RIGHT در $PARTITION.$PARTITIONPartition Numberکنترل مرحله 1Boundary Testکنترل مرحله 2GROUP BYکنترل مرحله 3Row Distributionکنترل مرحله 4RANGE RIGHTکنترل مرحله 5Validation Queryکنترل مرحله 6Best Practice: Partition Number + Row Distribution + Validation Queryورودی، وابستگی، خطا و خروجی قبل از استقرار بررسی می‌شوند.

تصویر دوم جریان ورودی تا خروجی $PARTITION را با تمرکز بر Partition Number، Row Distribution و اعتبارسنجی نتیجه نمایش می‌دهد.

مثال 6: بررسی رفتار NULL یا داده مرزی در $PARTITION

در مثال شماره 6، سناریوی «بررسی رفتار NULL یا داده مرزی» برای $PARTITION اجرا می‌شود. هدف این است که رفتار RANGE RIGHT در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_06 (int) AS RANGE LEFT FOR VALUES (600,700);
SELECT v.ValueItem, $PARTITION.pf_Dollar_06(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(599),(600),(601),(700),(701)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 7: ثبت خطای رایج و نسخه اصلاح‌شده در $PARTITION

در مثال شماره 7، سناریوی «ثبت خطای رایج و نسخه اصلاح‌شده» برای $PARTITION اجرا می‌شود. هدف این است که رفتار Validation Query در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_07 (int) AS RANGE RIGHT FOR VALUES (700,800);
SELECT v.ValueItem, $PARTITION.pf_Dollar_07(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(699),(700),(701),(800),(801)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 8: سناریوی سازمانی دوره‌ای در $PARTITION

در مثال شماره 8، سناریوی «سناریوی سازمانی دوره‌ای» برای $PARTITION اجرا می‌شود. هدف این است که رفتار $PARTITION در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_08 (int) AS RANGE LEFT FOR VALUES (800,900);
SELECT v.ValueItem, $PARTITION.pf_Dollar_08(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(799),(800),(801),(900),(901)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 9: اجرای تراکنشی و امکان Rollback در $PARTITION

در مثال شماره 9، سناریوی «اجرای تراکنشی و امکان Rollback» برای $PARTITION اجرا می‌شود. هدف این است که رفتار Partition Number در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_09 (int) AS RANGE RIGHT FOR VALUES (900,1000);
SELECT v.ValueItem, $PARTITION.pf_Dollar_09(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(899),(900),(901),(1000),(1001)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

مثال 10: ممیزی Performance و متادیتا در $PARTITION

در مثال شماره 10، سناریوی «ممیزی Performance و متادیتا» برای $PARTITION اجرا می‌شود. هدف این است که رفتار Boundary Test در یک نمونه قابل بازتولید دیده شود و نتیجه بدون نیاز به اجرای ذهنی قابل فهم باشد.

CREATE PARTITION FUNCTION pf_Dollar_10 (int) AS RANGE LEFT FOR VALUES (1000,1100);
SELECT v.ValueItem, $PARTITION.pf_Dollar_10(v.ValueItem) AS PartitionNo
FROM (VALUES (NULL),(999),(1000),(1001),(1100),(1101)) AS v(ValueItem)
ORDER BY v.ValueItem;
شاخصخروجی نمونه
مقدار مرزیشماره پارتیشن قابل مشاهده
کنترل کاتالوگموفق

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

خطاهای رایج $PARTITION

خطاهای $PARTITION فقط Syntax نیستند و اغلب از ناسازگاری میان تعریف منطقی و وضعیت واقعی جدول، Scheme، Function یا Index ناشی می‌شوند.

  • فراموشی علامت دلار؛ این مورد در سناریوی $PARTITION باید پیش از اجرا کنترل شود.
  • تبدیل ضمنی نامناسب؛ این مورد در سناریوی $PARTITION باید پیش از اجرا کنترل شود.
  • تفسیر شماره به‌عنوان مرز؛ این مورد در سناریوی $PARTITION باید پیش از اجرا کنترل شود.
  • انتخاب Function اشتباه؛ این مورد در سناریوی $PARTITION باید پیش از اجرا کنترل شود.

برای عیب‌یابی $PARTITION از sys.partition_functions، sys.partition_schemes، sys.partition_range_values، sys.indexes و sys.partitions استفاده کنید تا اصلاح بر اساس داده واقعی باشد.

Performance و هم‌زمانی در $PARTITION

ملاحظه کارایی 1 در $PARTITION: مناسب برای گزارش تشخیصی. علاوه بر زمان اجرا، رشد لاگ، قفل Sch-M، تعداد ردیف و اثر بر Sessionهای هم‌زمان اندازه‌گیری شود.

ملاحظه کارایی 2 در $PARTITION: ترجیح فیلتر مستقیم برای Elimination. علاوه بر زمان اجرا، رشد لاگ، قفل Sch-M، تعداد ردیف و اثر بر Sessionهای هم‌زمان اندازه‌گیری شود.

ملاحظه کارایی 3 در $PARTITION: ترکیب با کاتالوگ و DMVs. علاوه بر زمان اجرا، رشد لاگ، قفل Sch-M، تعداد ردیف و اثر بر Sessionهای هم‌زمان اندازه‌گیری شود.

Best Practices اجرای $PARTITION

  1. نام Function را اعتبارسنجی کنید؛ این اصل برای اجرای پایدار $PARTITION در محیط سازمانی ضروری است.
  2. قبل و بعد مرز را آزمایش کنید؛ این اصل برای اجرای پایدار $PARTITION در محیط سازمانی ضروری است.
  3. تاریخ ISO به‌کار ببرید؛ این اصل برای اجرای پایدار $PARTITION در محیط سازمانی ضروری است.
  4. پیش از TRUNCATE شماره را تأیید کنید؛ این اصل برای اجرای پایدار $PARTITION در محیط سازمانی ضروری است.
  5. توزیع ردیف را پایش کنید؛ این اصل برای اجرای پایدار $PARTITION در محیط سازمانی ضروری است.

با اجرای این چک‌لیست، $PARTITION از یک دستور دستی به فرایندی قابل تکرار، قابل ممیزی و قابل بازگشت تبدیل می‌شود.

تصمیم فنی و کنترل ریسک $PARTITION

$PARTITION؛ نمودار فنی 3رابطه Boundary Test، GROUP BY، Row Distribution، RANGE RIGHT و Validation Query در $PARTITION.$PARTITIONBoundary Testکنترل مرحله 1GROUP BYکنترل مرحله 2Row Distributionکنترل مرحله 3RANGE RIGHTکنترل مرحله 4Validation Queryکنترل مرحله 5$PARTITIONکنترل مرحله 6Best Practice: Boundary Test + RANGE RIGHT + $PARTITIONورودی، وابستگی، خطا و خروجی قبل از استقرار بررسی می‌شوند.

تصویر سوم انتخاب میان اجرای مستقیم، اجرای روی پارتیشن خالی یا توقف برای بازطراحی را بر اساس Boundary Test، RANGE RIGHT و هزینه عملیاتی نشان می‌دهد.

ده پرسش متداول اختصاصی $PARTITION

$PARTITION: چه مسئله‌ای را حل می‌کند؟

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

$PARTITION: چه پیش‌نیازی دارد؟

آشنایی با Filegroup، Index، نوع داده و متادیتا لازم است؛ سپس Boundary Test روی داده آزمایشی بررسی شود.

$PARTITION: برای سامانه کوچک مناسب است؟

اگر چرخه آرشیو یا نگهداری مشخص باشد، $PARTITION حتی روی PRIMARY ارزش مدیریتی دارد؛ در غیر این صورت هزینه پیچیدگی باید سنجیده شود.

$PARTITION: چه زمانی متخصص لازم است؟

در جدول بزرگ، SLA سخت، چند Filegroup یا Sliding Window، طراحی $PARTITION باید با تست بار و برنامه بازگشت تخصصی انجام شود.

$PARTITION: با چه قابلیتی اشتباه می‌شود؟

نقش $PARTITION باید از مرزبندی، نگاشت فیزیکی و عملیات نگهداری جدا شود؛ مفهوم محوری این مقاله $PARTITION است.

$PARTITION: برای سفارش پیاده‌سازی چه اطلاعاتی لازم است؟

حجم و رشد داده، نسخه SQL Server، ساختار Index، کلید پارتیشن و پنجره نگهداری برای برآورد اجرای $PARTITION لازم‌اند.

$PARTITION: رایج‌ترین خطا چیست؟

در $PARTITION یکی از خطاهای مهم «فراموشی علامت دلار» است و باید پیش‌شرط‌ها از کاتالوگ کنترل شوند.

$PARTITION: اثر Performance چگونه است؟

هزینه $PARTITION به حجم داده و پارتیشن درگیر وابسته است؛ مناسب برای گزارش تشخیصی و پایش لاگ و قفل معیار اصلی‌اند.

$PARTITION: Best Practice اصلی چیست؟

برای $PARTITION باید «نام Function را اعتبارسنجی کنید» و خروجی کنترل پیش و پس از اجرا در مخزن تغییرات ثبت شود.

$PARTITION: سازگاری نسخه‌ها چگونه است؟

قابلیت‌های پایه $PARTITION در نسخه‌های مدرن SQL Server وجود دارند، اما مجوز و محدودیت نسخه هدف باید جداگانه آزموده شود.

سؤال‌های مصاحبه درباره $PARTITION

  1. نقش $PARTITION را در زنجیره Partition Function، Scheme و Table توضیح دهید.
  2. پیش از $PARTITION کدام Viewهای سیستمی را بررسی می‌کنید؟
  3. اثر $PARTITION بر لاگ و قفل چگونه اندازه‌گیری می‌شود؟
  4. برنامه Rollback برای شکست $PARTITION چیست؟
  5. در چه شرایطی اجرای $PARTITION را متوقف می‌کنید؟

پاسخ حرفه‌ای باید علاوه بر نحو، درباره $PARTITION، وابستگی، حجم داده و کنترل پس از اجرای $PARTITION صحبت کند.

چک‌لیست نهایی $PARTITION

  • تعریف واقعی اشیای مرتبط با $PARTITION از کاتالوگ خوانده شده است.
  • مقدارهای قبل، برابر و بعد از مرز برای $PARTITION آزموده شده‌اند.
  • فضای لاگ و قفل احتمالی $PARTITION در محیط نزدیک به تولید سنجیده شده است.
  • TRY/CATCH و Transaction کوتاه برای $PARTITION وجود دارد.
  • خروجی کنترلی و برنامه بازگشت $PARTITION ثبت شده است.

جمع‌بندی آموزش $PARTITION

$PARTITION زمانی قابل اتکا است که نقش آن در معماری پارتیشن‌بندی درست فهمیده شود. ده مثال این مقاله، مسیر تعریف، اجرا، کنترل خطا و سنجش Performance را به‌صورت مستقل پوشش دادند.

برای مقایسه $PARTITION با سایر دستورات، به مقاله مادر Table Partitioning بازگردید و ترتیب عملیات را در یک Sliding Window کامل مرور کنید.

خدمات برنامه‌نویسی و پایگاه داده برای $PARTITION

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

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

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

تماس با ما برای مشاوره تخصصی $PARTITION

 

0 نظر

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

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

حرف 500 حداکثر