تقسيم الجداول في خادم SQL إنشاء نموذج قاعدة البيانات المادية: هندسة الأداء

سأقوم في هذه المقالة بتوضيح تفاصيل خطط تنفيذ الاستعلام عند الوصول إلى الجداول المقسمة. لاحظ أن هناك فرقًا كبيرًا بين الجداول المقسمة (التي أصبحت متوفرة فقط في SQL Server 2005) وطرق العرض المقسمة (التي كانت متوفرة في SQL Server 2000 وما زالت متوفرة في SQL Server 2005 والإصدارات الأحدث). سأوضح تفاصيل خطط الاستعلام لطرق العرض المقسمة في مقال آخر.

عرض الجدول

لنقم بإنشاء جدول مقسم بسيط:

إنشاء وظيفة القسم pf(int) كنطاق للقيم (0، 10، 100)

إنشاء نظام تقسيم ps كقسم pf all إلى ()

إنشاء جدول t (a int، b int) على ps(a)

يقوم هذا البرنامج النصي بإنشاء جدول بأربعة أقسام. قام SQL Server بتعيين قيم لمعرفات كل قسم من الأقسام الأربعة كما هو موضح في الجدول:

معرف بي تي ان قيم
1 ر<= 0
2 0 < t.a <= 10
3 10 < t.a <= 100
4 100 < t.a

الآن دعونا نلقي نظرة على خطة الاستعلام التي من شأنها أن تجبر المحسن على استخدام فحص الجدول:


……|–المسح المستمر(القيم:(((1)),((2)),((3)),((4))))
…….|–مسح الجدول(الكائن:([t]))

في الخطة المذكورة أعلاه، يحدد SQL Server بشكل صريح جميع معرفات الأقسام في عبارة "الفحص المستمر"، والتي تنفذ فحص الجدول وتوفر البيانات إلى مشغل ربط الحلقة المتداخلة. من الجدير بالذكر هنا أن عامل ربط الحلقة المتداخلة يجتاز الجدول الداخلي (في هذه الحالة، فحص كامل للجدول) مرة واحدة لكل قيمة من الجدول الخارجي (في حالتنا، "المسح المستمر"). لذلك نقوم بمسح الجدول أربع مرات؛ مرة واحدة لكل معرف القسم.

وتجدر الإشارة أيضًا إلى أن اتصال الحلقات المتداخلة يوضح بوضوح أن الجدول الخارجي هو قيم العمود الذي يتم تخزين معرفات القسم فيه. على الرغم من أنه لا يكون مرئيًا على الفور في عرض النص لخطة التنفيذ (لسوء الحظ، لا نلاحظ هذه المعلومات في بعض الأحيان)، فإن فحص الجدول يستخدم عمودًا به معرفات الأقسام التي تم تحديدها لإجراء الفحص وتحديد القسم الذي سيتم مسحه مسح. تتوفر هذه المعلومات دائمًا في خطة التنفيذ الرسومية (تحتاج إلى إلقاء نظرة على خصائص عامل عرض الجدول)، وكذلك في تمثيل XML لخطة تنفيذ الاستعلام:

تصفية القسم الثابت

خذ بعين الاعتبار الاستعلام التالي:

حدد * من t حيث أ< 100

|–حلقات متداخلة(ربط داخلي، مراجع خارجية:() معرف القسم:())
…….|–المسح المستمر(القيم:(((1)),((2)),((3))))
<(100)) PARTITION ID:())

المسند "أ"<100» явно исключает все строки для секции со значением идентификатора равным 4. В данном случае, нет смысла в просмотре соответствующей секции, поскольку ни одна из строк этой секции не удовлетворяет условию предиката. Оптимизатор учитывает этот факт и исключает эту секцию из плана исполнения запроса. В операторе «Constant Scan» указаны только три секции. У нас принято называть это статической фильтрацией секций (static partition elimination), поскольку мы знаем, что во время компиляции список просматриваемых секций остаётся статичным.

إذا أدت التصفية الثابتة إلى إزالة جميع الأقسام باستثناء قسم واحد، فلن نحتاج إلى مشغلي Constant Scan وNested Loops Join على الإطلاق:

حدد * من t حيث أ< 0

|–مسح الجدول (الكائن:([t])، أين:([t].[a]<(0)) PARTITION ID:((1)))

لاحظ أن عبارة "معرف القسم:((1))" التي تحدد معرف القسم المراد فحصه، أصبحت الآن جزءًا من عبارة فحص الجدول.

تصفية القسم الديناميكي

في بعض الحالات، لا يستطيع SQL Server تحديد أن تركيبة الأقسام التي يتم عرضها لن تتغير في وقت الترجمة، ولكن يمكن أن يرى أنه يمكن استبعاد بعض الأقسام.

حدد * من t حيث أ< @i

|–حلقات متداخلة(ربط داخلي، مراجع خارجية:() معرف القسم:())
…….|–تصفية(أين :(<=RangePartitionNew([@i],(0),(0),(10),(100))))
…….| |–المسح المستمر(القيم:(((1)),((2)),((3)),((4))))
…….|–مسح الجدول (الكائن:([t])، أين:([t].[a]<[@i]) PARTITION ID:())

هذا استعلام ذو معلمات. نظرًا لأننا لا نعرف قيمة المعلمة قبل التنفيذ (حقيقة أنني أستخدم ثابتًا كمعلمة في نفس الدفعة لا يغير الوضع)، فمن المستحيل تحديد قيمة معرف القسم لـ "المسح الثابت" "المشغل في مرحلة التجميع. قد يتعين عليك إلقاء نظرة على القسم 1 فقط، أو سيكون القسمان 1 و2، وهكذا. لذلك، تم تحديد معرفات الأقسام الأربعة جميعها في هذا البيان، ونستخدم تصفية وقت التشغيل لمعرفات الأقسام. نحن نسمي هذا القضاء على التقسيم الديناميكي.

يقوم المرشح بمقارنة معرف كل قسم بنتيجة الوظيفة الخاصة "RangePartitionNew". تقوم هذه الوظيفة بحساب نتائج تطبيق وظيفة التقسيم على قيمة المعلمة. وسيطات هذه الوظيفة (من اليسار إلى اليمين) هي:

  • القيمة (في هذه الحالة المعلمة @i) التي نريد عرضها على معرف القسم؛
  • علامة منطقية تشير إلى ما إذا كانت وظيفة التقسيم تعرض قيم الحدود اليسرى (0) أو اليمنى (1)؛
  • قيم حدود القسم (في هذه الحالة هي 0 و10 و100).

في هذا المثال، نظرًا لأن @i يساوي 0، فإن نتيجة "RangePartitionNew" هي 1. وبالتالي، فإننا نقوم فقط بفحص القسم ذو المعرف 1. لاحظ أنه على عكس مثال تصفية القسم الثابت، على الرغم من أننا نقوم بفحص قسم واحد فقط، إلا أننا - لا يزال لدينا "الفحص المستمر" و"الانضمام إلى الحلقات المتداخلة". سبب حاجتنا لهذه البيانات هو أننا لا نعرف الأقسام التي سيتم مسحها حتى مرحلة التنفيذ.

في بعض الحالات، يمكن للمحسن أن يحدد بالفعل في وقت الترجمة أننا سنقوم بفحص قسم واحد فقط، حتى لو لم يتمكن من تحديد أي قسم. على سبيل المثال، إذا كان الاستعلام يستخدم مسند تكافؤ مفتاح القسم، فإننا نعلم أن قسمًا واحدًا فقط يمكنه تلبية هذا الشرط. لذلك، على الرغم من أنه كان علينا أن يكون لدينا تصفية ديناميكية للأقسام، فإننا لم نعد بحاجة إلى مشغلي "الفحص المستمر" و"ربط الحلقات المتداخلة". مثال:

حدد * من t حيث a = @i

|–مسح الجدول (OBJECT:([t])، حيث:([t].[a]=[@i]) معرف القسم:(RangePartitionNew([@i],(0),(0),(10 ),(100))))

مزيج من تصفية القسم الثابت والديناميكي

يمكن لـ SQL Server الجمع بين تصفية الأقسام الثابتة والديناميكية في خطة استعلام واحدة:

حدد * من t حيث a > 0 وa< @i

|–حلقات متداخلة(ربط داخلي، مراجع خارجية:() معرف القسم:())
……|–التصفية(أين :(<=RangePartitionNew([@i],(0),(0),(10),(100))))
……| |–المسح المستمر(القيم:(((2)),((3)),((4))))
……|–مسح الجدول (الكائن:([t])، أين:([t].[a]<[@i] AND [t].[a]>(0)) معرف القسم:())

لاحظ أنه في الخطة الأخيرة هناك تصفية ثابتة لقسم ID=1 باستخدام "الفحص المستمر"، وهناك أيضًا تصفية ديناميكية للأقسام الأخرى المحددة بواسطة المسندات.

قسم $

يمكنك استدعاء الدالة RangePartitionNew بشكل صريح باستخدام $partition:

حدد *، $partition.pf(a) من t

|–حساب العددية(DEFINE:(=RangePartitionNew([t].[a],(0),(0),(10),(100))))
……|–حلقات متداخلة(انضمام داخلي، مراجع خارجية:() معرف القسم:())
………..|–المسح المستمر(القيم:(((1)),((2)),((3)),((4))))
………..|–مسح الجدول(الكائن:([t]))

السمة المميزة لخطة تنفيذ الاستعلام هذه هي ظهور عامل تشغيل Compute Scalar.

معلومات إضافية

في الظروف الحديثة، يكون من الغريب أحيانًا أن نسمع "نحتاج إلى طي قاعدة بيانات 1C - يتجاوز حجمها 50 جيجابايت". إذا كان مسؤولو أنظمة SAP R3 أو Oracle e Business Suite أو حتى أنظمة MS Dynamics Ax سيفعلون ذلك، فمن المحتمل أن يتم طردهم. ومع ذلك، بالنسبة لـ 1C، تعد هذه "ممارسة قياسية".

بالنسبة لإصدارات الملفات، تعود القصة إلى الإصدار 1C 7.7 بحد أقصى 2 جيجابايت لحجم قاعدة البيانات. الآن أصبح الحد الأقصى البالغ 2 غيغابايت موجودًا على حجم الجدول فقط؛ ويمكن أن يكون حجم الملف صغيرًا جدًا بالفعل. صحيح، إذا نمت قاعدة البيانات الخاصة بك إلى هذا الحجم، فمن المحتمل أن يتم إدخال البيانات بشكل نشط هناك - ربما تحتاج إلى التفكير في خادم العميل؟

في الواقع، الغرض من هذه المقالة هو "إثناء" مستخدمي إصدار خادم العميل من 1C عن إجراء تجميع قاعدة البيانات، من خلال استخدام تقنيات "أكثر تقدمًا" إلى حد ما.

الرقم النهائي هو 30-40 طنًا، والحد الأدنى مقابل 20-25 إذا قمت بشراء قرص صلب وحصلت على 500 جيجابايت من المساحة الإضافية

لهذا السبب تحب المنتجات
ربما تكون منتجات جيدة، وتحقق أهدافها. كل ما في الأمر هو أن بنية الجداول تتغير من إصدار إلى إصدار من النظام الأساسي. أخبرنا 1C عن هذا أكثر من مرة. ظهر فاصل البيانات في الإصدار الرابع عشر وهذا كل شيء... على الأرجح لن تكون هذه المعالجة مناسبة للإصدار الرابع عشر. وهو أمر مخيف إلى حد ما، ناهيك عن انتهاك اتفاقية الترخيص.

وحتى بعد ذلك، سيكون هناك مستخدمون "احتاجوا فجأة" إلى البيانات المحذوفة، والذين "أرادوا فقط تصحيح" بعض الأرقام التي "لا تؤثر على التسلسل" في مستند فترة مغلقة. والأسوأ من ذلك أن يتبين أن شخصًا ما كان ينظر باستمرار إلى هذه المستندات لغرض ما يعرفه وحده. وبطبيعة الحال، كل هذه مجرد أخطاء في منهجية التشغيل، ولكن مع ذلك سيكون هناك استياء المستخدم.


-
افتح Management Studio في قائمة قواعد البيانات، وحدد القاعدة التي تحتاجها، وافتح خصائصها.
- انتقل إلى علامة التبويب "مجموعات الملفات" كما هو موضح في الشكل، وقم بإضافة مجموعة ملفات أخرى (في المثال تسمى SECONDARY)

- انتقل إلى علامة التبويب "الملفات" وأضف ملفًا جديدًا، حيث نختار مجموعة الملفات التي تم إنشاؤها. هذا الملف يمكن أن يكون موجودا على قرص آخر


-
الآن باستخدام المعالجة على سبيل المثال: نحدد الجداول التي يمكننا "التبرع بها" بأمان إلى وسيط أبطأ (أو العكس، كل شيء إلى وسيط أبطأ، والباقي إلى وسيط أسرع). تنطبق قاعدة 80/20 هنا. يتم تنفيذ 80% من العمليات باستخدام 20% من البيانات، لذا فكر في اللوحات التي تحتاجها سريعًا واللوحات التي لا تحتاجها كثيرًا. "تخزين المعلومات الإضافية"، وثائق إدخال الأرصدة الأولية، المستندات التي لم تعد تستخدمها، حددها على الفور على أنها تلك التي يمكن نقلها إلى مجموعة ملفات "بطيئة".

حدد الجدول الذي تريد نقله إلى مجموعة ملفات أخرى - حدد القائمة لتغيير الجدول (المشروع) وقم بتغيير مجموعة الملفات في الخصائص:

يتم أيضًا نقل فهارس الجدول إلى مجموعة الملفات هذه.
آلية ملائمة إلى حد ما لتوزيع الجداول عبر صفائف الأقراص بسرعات مختلفة. وهذا لا يتعارض مع اتفاقية الترخيص، لأن في الحل، لا نستخدم الوصول إلى قاعدة البيانات والمعلومات بوسائل أخرى غير منصة 1C. نحن نقوم فقط بتنظيم تخزين هذه البيانات بطريقة مناسبة.


دي بي سي سي تراسون (1807)

نكتب هذا الأمر في Management Studio وننفذه ويمكننا إنشاء قواعد بيانات عبر الشبكة بنجاح. بالطبع، يجب تشغيل مثيل SQL Server ضمن حساب مجال، ويجب أن يكون لهذا الحساب حقوق الوصول إلى مجلد الشبكة المطلوب.
ولكن يرجى توخي الحذر الشديد عند استخدام هذا الأمر إذا تعطلت شبكتك أثناء العمل مع قاعدة البيانات، فلن يكون من الممكن الوصول إلى قاعدة البيانات بأكملها أثناء غيابها. ليس من قبيل الصدفة أن مايكروسوفت أغلقت هذه الفرصة للاستخدام الشامل. بشكل عام، هذه الميزة مخصصة لإنشاء قواعد بيانات على مخازن NAS، وهو ما أوصي به بشدة. يعد خادم الملفات المستقر والموثوق الذي لديه اتصال مباشر بالخادم الذي يقوم بتشغيل MS SQL DBMS مناسبًا أيضًا.
يمكنك قراءة المزيد حول إشارات التتبع الأخرى في المقالة http://msdn.microsoft.com/ru-ru/library/ms188396.aspx
أولئك. يمكن حتى تخزين جزء من مجموعة الملفات على الشبكة، وهناك يمكن توسيع مساحة القرص دون مشاكل.

بالطبع، من الجيد تقسيم الجداول إلى مجموعات ملفات مختلفة... لكنك ستقول أن هناك جدولين هنا... والتي تعمل منذ عام 2005... وتشغل بالفعل عشرات الجيجابايت.. أتمنى أن أتمكن من وضع كافة البيانات فيها ووضع قرص منفصل، ولكن اترك البيانات الحالية.
لن تصدق ذلك، ولكن هذا ممكن أيضًا، وإن لم يكن بسيطًا جدًا:

إنشاء وظيفة للتقسيم حسب التاريخ:

إنشاء وظيفة التقسيم YearSection (التاريخ والوقت)
كنطاق مناسب للقيم ("20110101")؛

كل شيء قبل 2011 سيقع في قسم، وكل شيء بعده سيقع في قسم آخر.

إنشاء مخطط التقسيم

إنشاء مخطط التقسيم YearScheme
كتقسيم قسم السنة إلى (الثانوي، الابتدائي)؛

وبهذا نقول أن جميع البيانات حتى السنة 11 ستنتهي في مجموعة الملفات "الثانوية" وبعد ذلك - في المجموعة "الابتدائية"

الآن كل ما تبقى هو إعادة بناء الجدول عن طريق تقسيمه إلى أقسام. أسهل طريقة للقيام بذلك هي استخدام استوديو الإدارة، لأن العملية ليست بسيطة. تحتاج إلى إعادة بناء الفهرس المجمع على الجدول (والذي هو في الأساس الجدول نفسه)، واختيار نظام التقسيم الذي تم إنشاؤه للفهرس:

في الصورة ترى أن الاختيار غير متاح - كل شيء صحيح، تقسيم الجدول ممكن فقط في إصدار Enterprise من MS SQL Server. من السهل تمييز مؤشر الكتلة - صورة بين قوسين. تم إنشاؤه لـ RN وجميع كائنات 1C. بالنسبة إلى RN، يوجد دائمًا فهرس كتلة حسب الفترة. بالنسبة للمستندات والأدلة، سيكون من الجيد بالطبع إنشاء دليل آخر يتضمن التفاصيل التي سيتم من خلالها إجراء التقسيم... ولكن هذا سيكون بالفعل انتهاكًا لاتفاقية الترخيص.

ولكن للقيام بذلك، لا تحتاج إلى طي قاعدة البيانات، ولكن قم بما يلي:
أ) اشرح للجميع كيفية استخدام التحديدات، وكيفية حفظها، وكيفية استخدام فترات السجل، وكيفية حفظها
ب) قم بوضع علامة على البيانات غير الضرورية للحذف إذا كانت لا تحمل أي معنى (الأطراف المقابلة والعناصر التي لم تعد تعمل معها) - وهذا سيجلب فائدة أكبر للمستخدمين من التخفيض. في حالة توفر الموارد، قم بإعداد وضع العلامات التلقائي لحذف الكائنات غير المستخدمة وقم بإجراء تحديد افتراضي في رمز البرنامج بحيث لا يتم عرض الكائنات التي لا يحتاجها المستخدمون - تلك التي تم وضع علامة عليها للحذف - بشكل افتراضي
ج) قم بإعداد "تحديدات افتراضية" مفيدة أخرى - على سبيل المثال، بحيث يرى كل مدير المستندات الخاصة به فقط بشكل افتراضي. وإذا أراد أن ينظر إلى وثائق "الرفيق"، فإنه يحتاج إلى إيقاف الاختيار.

بالنسبة لجميع التفاصيل التي تشارك في الاختيار، لا تنس تحديد المربع "فهرسة مع طلب إضافي" - فلن تؤثر هذه "وسائل الراحة" على أداء النظام.

أثناء العمل على جداول كبيرة، نواجه باستمرار مشكلات في الأداء فيما يتعلق بصيانة البيانات وتحديثها. أحد الحلول الأكثر إنتاجية وملاءمة للمشاكل الناشئة هو التقسيم.
بشكل عام، التقسيم هو تقسيم جدول أو فهرس إلى كتل. اعتمادًا على إعداد التقسيم، يمكن أن تكون الكتل بأحجام مختلفة ويمكن تخزينها في مجموعات وملفات مختلفة.
التقسيم له مزايا وعيوب.
تم وصف المزايا بشكل جيد على موقع Microsoft على الويب، وفيما يلي مقتطف منها:

« يمكن أن يوفر تقسيم الجداول أو الفهارس الكبيرة فوائد الإدارة والأداء التالية:

  • يسمح ذلك بنقل مجموعات فرعية من البيانات والوصول إليها بسرعة وكفاءة مع الحفاظ على سلامة مجموعة البيانات. على سبيل المثال، يتم إكمال عملية مثل تحميل البيانات من OLTP إلى نظام OLAP في ثوانٍ، وليس في دقائق أو ساعات كما هو الحال مع البيانات غير المقسمة.
  • يمكن إتمام عمليات الصيانة بشكل أسرع بقسم واحد أو أكثر. تعتبر العمليات أكثر كفاءة لأنها يتم تنفيذها فقط على مجموعات فرعية من البيانات وليس على الجدول بأكمله. على سبيل المثال، يمكنك ضغط البيانات في قسم واحد أو أكثر، أو إعادة إنشاء قسم واحد أو أكثر من أقسام الفهرس.
  • يمكنك تحسين أداء الاستعلام استنادًا إلى الاستعلامات التي يتم تشغيلها بشكل متكرر في تكوين الأجهزة لديك. على سبيل المثال، يمكن لمُحسِّن الاستعلام تشغيل استعلامات ربط متساوية بشكل أسرع على جدولين مقسمين أو أكثر إذا كانت الجداول تحتوي على نفس أعمدة الأقسام لأنه يمكن ضم الأقسام نفسها.

عند فرز البيانات لعمليات الإدخال/الإخراج في SQL Server، يقوم أولاً بفرز البيانات إلى أقسام. يمكن لـ SQL Server الوصول إلى قرص واحد فقط في كل مرة، مما قد يؤدي إلى تقليل الأداء. لتسريع فرز البيانات، يوصى بتوزيع ملفات البيانات في أقسام عبر عدة محركات أقراص ثابتة، مما يؤدي إلى إنشاء RAID. بهذه الطريقة، على الرغم من فرز البيانات حسب القسم، سيتمكن SQL Server من الوصول في الوقت نفسه إلى كافة محركات الأقراص الثابتة في كل قسم.
يمكنك أيضًا تحسين الأداء باستخدام التأمين على مستوى القسم بدلاً من الجدول بأكمله. يمكن أن يؤدي ذلك إلى تقليل عدد تعارضات القفل للجدول
».

تشمل العيوب صعوبة إدارة ودعم تشغيل الجداول المقسمة.

لن نتوقف عند تنفيذ التقسيم، لأن هذه المشكلة موصوفة بشكل جيد للغاية على موقع Microsoft.

بدلاً من ذلك، سنحاول إظهار طريقة لتحسين تشغيل الجداول المقسمة، أو بالأحرى، سنعرض الطريقة المثلى (في رأينا) لتحديث البيانات لأي فترة زمنية.

الميزة الكبرى للجدول المقسم هي الفصل الفعلي لهذه الأقسام. تسمح لنا هذه الخاصية بتبديل الأقسام مع بعضها البعض أو مع أي جدول آخر.
بالنسبة لتحديث بيانات نموذجي باستخدام نافذة منزلقة (على سبيل المثال، شهريًا)، سنحتاج إلى اتباع الخطوات التالية:

1. ابحث عن الصفوف المطلوبة في جدول كبير؛
2. حذف الصفوف الموجودة من الجدول والفهرس؛
3. أدخل صفوفًا جديدة في الجدول وقم بتحديث الفهرس.

عند تخزين مليارات الصفوف في جدول، ستستغرق هذه العمليات وقتًا طويلاً، ولكن يمكننا أن نقتصر على إجراء واحد عمليًا: ما عليك سوى استبدال القسم المطلوب بجدول (أو قسم) تم إعداده مسبقًا. في هذه الحالة، لا نحتاج إلى حذف أو إدراج صفوف، ونحتاج أيضًا إلى تحديث الفهرس على الجدول الكبير بأكمله.

دعنا ننتقل من الكلمات إلى العمل ونوضح كيفية تنفيذ ذلك.

1. أولاً، قم بإعداد جدول مقسم كما هو موضح في المقالة المرتبطة أعلاه.
2. إنشاء الجداول اللازمة للتبادل.

لتحديث البيانات، نحتاج إلى نسخة مصغرة من الجدول المستهدف. وهي نسخة مصغرة لأنها ستقوم بتخزين البيانات التي يجب إضافتها إلى الجدول الهدف، أي. البيانات لمدة شهر واحد فقط. ستحتاج أيضًا إلى جدول فارغ ثالث لتنفيذ تبادل البيانات. لماذا هو مطلوب - سأشرح لاحقا.

يتم فرض شروط صارمة على النسخة المصغرة وطاولة التبادل:

  • يجب أن يكون كلا الجدولين موجودين قبل استخدام عبارة SWITCH. قبل إجراء عملية التبديل، يجب أن يكون كل من الجدول الذي يتم نقل القسم منه (الجدول المصدر) والجدول الذي يستقبل القسم (الجدول الهدف) موجودًا في قاعدة البيانات.
  • يجب أن يكون قسم الوجهة موجودًا ويجب أن يكون فارغًا. إذا تمت إضافة جدول كقسم إلى جدول مقسم موجود، أو تم نقل قسم من جدول مقسم إلى آخر، فيجب أن يكون القسم الوجهة موجودًا وأن يكون فارغًا.
  • يجب أن يكون الجدول الثانوي غير المقسم موجودًا ويجب أن يكون فارغًا. إذا كان المقصود من القسم تكوين جدول واحد غير مقسم، فيجب أن يكون الجدول الذي يستقبل القسم الجديد موجودًا وأن يكون جدولًا فارغًا غير مقسم.
  • يجب أن تكون الأقسام من نفس العمود. إذا تم تحويل قسم من جدول مقسم إلى آخر، فيجب تقسيم كلا الجدولين على نفس العمود.
  • يجب أن يكون الجدولان المصدر والوجهة في نفس مجموعة الملفات. يجب تخزين الجداول المصدر والهدف في عبارة ALTER TABLE...SWITCH في نفس مجموعة الملفات، بالإضافة إلى أعمدة القيمة الكبيرة الخاصة بها. يجب أيضًا تخزين أي فهارس أو أقسام فهرس أو طرق عرض أقسام مفهرسة مقابلة في نفس مجموعة الملفات. ومع ذلك، قد تكون مختلفة عن مجموعة الملفات بالنسبة للجداول المقابلة أو الفهارس الأخرى ذات الصلة.

اسمحوا لي أن أشرح القيود باستخدام مثالنا:

1. يجب تقسيم النسخة المصغرة من الجدول على نفس عمود العمود المستهدف. إذا كانت النسخة المصغرة عبارة عن جدول غير مقسم، فيجب تخزينها في نفس مجموعة الملفات مثل القسم الذي يتم استبداله.

2. يجب أن يكون جدول التبادل فارغًا ويجب أيضًا تقسيمه على نفس العمود أو يجب تخزينه في نفس مجموعة الملفات.

3. نقوم بتنفيذ التبادل.

الآن لدينا ما يلي:
جدول يحتوي على بيانات لجميع الأوقات (يشار إليه فيما يلي بـ Table_A)
جدول ببيانات شهر واحد (يشار إليه فيما يلي بـ Table_B)
جدول فارغ (يشار إليه فيما بعد بـ Table_C)

أولاً، نحتاج إلى معرفة القسم الذي نقوم بتخزين البيانات فيه.
يمكنك معرفة ذلك من خلال السؤال:

يختار
احسب كما
، $PARTITION.(dt) as
، رتبة () على (الترتيب حسب $PARTITION.(dt))
من ديبو. (بدون قفل)
المجموعة حسب $PARTITION.(dt)

في هذا الطلب نحصل على أقسام تحتوي على صفوف من المعلومات. ليست هناك حاجة لحساب الكمية - لقد فعلنا ذلك للتحقق من الحاجة إلى تبادل البيانات. نحن نستخدم Rank حتى نتمكن من الدخول في حلقة وتحديث عدة أقسام في إجراء واحد.

بمجرد أن نكتشف الأقسام التي يتم تخزين بياناتنا فيها، يمكن تبديلها. لنفترض أن البيانات مخزنة في القسم 1.

ثم تحتاج إلى تنفيذ العمليات التالية:
قم بتبديل الأقسام من الجدول الهدف بالجدول المراد تبادله.
تغيير الجدول. تبديل القسم 1 إلى . القسم 1
الآن لدينا ما يلي:
لا توجد بيانات متبقية في الجدول المستهدف في القسم الذي نحتاجه، أي. القسم فارغ
مبادلة الأقسام من الجدول الهدف والنسخة المصغرة
تغيير الجدول. تبديل القسم 1 إلى . القسم 1
الآن لدينا ما يلي:
ظهرت البيانات الشهرية في الجدول المستهدف، لكن النسخة المصغرة أصبحت الآن فارغة
مسح أو حذف جدول الصرف.

إذا كان لديك فهرس متفاوت المسافات على جدولك، فهذه ليست مشكلة أيضًا. يجب إنشاؤه على كافة الجداول الثلاثة المقسمة على نفس العمود. عند تغيير الأقسام، سيتم تحديث الفهرس تلقائيًا دون إعادة البناء.

يمكنك إنشاء جدول أو فهرس مقسم في SQL Server 2016 باستخدام SQL Server Management Studio أو Transact-SQL. يتم تقسيم البيانات الموجودة في جدول وفهارس مقسمة أفقيًا إلى كتل، والتي يمكن توزيعها عبر مجموعات ملفات متعددة في قاعدة البيانات. يمكن أن يؤدي التقسيم إلى تحسين إمكانية الإدارة وقابلية التوسع للجداول والفهارس الكبيرة.

أو يتضمن الفهرس عادةً أربع خطوات:

    قم بإنشاء مجموعة ملفات أو مجموعات ملفات والملفات المقابلة التي ستحتوي على أقسام وفقًا لنظام التقسيم.

    قم بإنشاء وظيفة تقسيم تقوم بتعيين صفوف الجدول أو الفهرس إلى الأقسام بناءً على قيم عناصر عمود محدد.

    قم بإنشاء نظام تقسيم يقوم بتعيين الأقسام من جدول أو فهرس مقسم إلى مجموعات ملفات جديدة.

    قم بإنشاء أو تعديل جدول أو فهرس وتحديد نظام التقسيم كموقع للتخزين.

في هذا القسم

    قبل أن تبدأ، أكمل الخطوات التالية.

    قيود

    أمان

    قم بإنشاء جدول أو فهرس مقسم باستخدام الأدوات التالية:

    ستوديو إدارة خادم SQL

قيود

    يقتصر نطاق الوظيفة ونظام التقسيم على قاعدة البيانات التي تم إنشاؤها فيها. توجد وظائف التقسيم في مساحة اسم منفصلة عن الوظائف الأخرى داخل قاعدة البيانات.

    إذا كانت أي صفوف في وظيفة التقسيم تحتوي على أعمدة تقسيم ذات قيم NULL، فسيتم وضع هذه الصفوف في القسم الموجود في أقصى اليسار. ومع ذلك، إذا تم تحديد NULL كقيمة حدية وتم تحديد RIGHT، فسيتم ترك القسم الموجود في أقصى اليسار فارغًا ويتم وضع القيم NULL في القسم الثاني.

أمان

الأذونات

يتطلب إنشاء جدول مقسم إذن CREATE TABLE على قاعدة البيانات وإذن ALTER على المخطط الذي تم إنشاء الجدول فيه. يتطلب إنشاء فهرس مقسم الحصول على إذن ALTER في الجدول أو طريقة العرض التي تم إنشاء الفهرس عليها. يتطلب إنشاء جدول أو فهرس مقسم أيًا من الأذونات الإضافية التالية:

    تغيير أي إذن لمساحة البيانات. يتم تعيين هذا الإذن افتراضيًا لأعضاء دور الخادم الثابت مسؤول النظاموأدوار قاعدة البيانات الثابتة db_ownerو db_ddladmin.

    إذن التحكم أو التغيير في قاعدة البيانات التي تم إنشاء الوظيفة ونظام التقسيم فيها.

    خادم التحكم أو تغيير أي إذن قاعدة بيانات على خادم قاعدة البيانات الذي يتم فيه إنشاء الوظيفة ونظام التقسيم.

اتبع الإرشادات خطوة بخطوة في هذا الإجراء لإنشاء مجموعة ملفات واحدة أو أكثر، والملفات المرتبطة، وجدول. سيشير المثال التالي إلى هذه الكائنات عند إنشاء جدول مقسم.

إنشاء مجموعات ملفات جديدة لجدول مقسم

إنشاء جدول مقسم

    انقر بزر الماوس الأيمن فوق الجدول المراد تقسيمه، ثم حدد تخزينوانقر إنشاء قسم...

    في معالج إنشاء القسمعلى الصفحة مع تحيات مصمم القسمانقر إضافي.

    على الصفحة اختيار عمود التقسيمفي الشبكة، حدد العمود الذي تريد تقسيم الجدول به. على الشبكة أعمدة التقسيم المتاحةيتم عرض الأعمدة التي تحتوي على أنواع البيانات التي يمكنك التقسيم حسبها فقط. إذا قمت بتحديد عمود محسوب كعمود التقسيم، فيجب أن تجعله ثابتًا.

    يتم تحديد اختيار عمود التقسيم ونطاق القيمة بشكل أساسي من خلال الدرجة التي يجب أن يتم تجميع البيانات بها بشكل منطقي. على سبيل المثال، يمكنك تقسيم البيانات إلى مجموعات منطقية حسب الشهر أو ربع السنة. تحدد استعلامات البيانات المجدولة ما إذا كان هذا التجميع المنطقي مناسبًا لإدارة أقسام الجدول. يمكن استخدام أي نوع بيانات كأعمدة تقسيم باستثناء نص, ntext, صورة, xml, الطابع الزمني, فارتشار (الحد الأقصى), نفارتشار (ماكس), فاربيناري (الحد الأقصى)والأسماء المستعارة لأنواع البيانات وأنواع البيانات المعرفة من قبل المستخدم CLR.

    الموقع المشترك لهذا الجدول مع الجدول المقسم المحدد
    يسمح لك بتحديد جدول مقسم يحتوي على بيانات ذات صلة للانضمام إلى هذا الجدول باستخدام عمود القسم. تعد الجداول المقسمة المرتبطة بأعمدة التقسيم أكثر كفاءة بشكل عام في الاستعلامات.

    قم بمحاذاة تخزين الفهارس غير الفريدة والفريدة من نوعها مع عمود تقسيم مفهرس
    محاذاة كافة الفهارس الموجودة في جدول مقسم باستخدام نفس المخطط. من خلال محاذاة الجدول وفهارسه، يمكن نقل الأقسام من وإلى الجداول المقسمة بشكل أكثر كفاءة لأن البيانات مقسمة باستخدام نفس الخوارزمية.

    بعد تحديد عمود التقسيم والأعمدة الأخرى، انقر فوق إضافي.

    على الصفحة اختيار وظيفة التقسيمفي الفصل حدد وظيفة التقسيمانقر أو . عند الاختيار إنشاء وظيفة التقسيمأدخل اسم الوظيفة. إذا تم تحديد الخيار وظيفة التقسيم الموجودة، ثم اختر من القائمة اسم الوظيفة التي سيتم استخدامها للتقسيم. لاحظ أنه إذا لم تكن هناك وظائف تقسيم أخرى في قاعدة البيانات، فستتم المعلمة وظيفة التقسيم الموجودةسوف تكون غير متاحة.

    إضافي.

    على الصفحة اختيار نظام التقسيمفي الفصل حدد نظام التقسيمانقر أو . عند الاختيار إنشاء نظام التقسيمأدخل اسم المخطط. إذا تم تحديد الخيار مخطط التقسيم الحالي، ثم حدد اسم النظام الذي سيتم استخدامه من القائمة. إذا لم تكن هناك أنظمة تقسيم أخرى في قاعدة البيانات، فإن الخيار مخطط التقسيم الحاليسوف تكون غير متاحة.

    عند الانتهاء من هذه الصفحة، انقر فوق الزر إضافي.

    على الصفحة رسم الخرائط القسمفي الفصل يتراوحيختار الحدود اليسرىأو الحدود اليمنىلتحديد أعلى أو أدنى قيمة قطع لتضمينها في كافة مجموعات الملفات التي تم إنشاؤها. بالإضافة إلى عدد مجموعات الملفات المحددة كحدود عند إنشاء الأقسام، يجب عليك دائمًا إدخال مجموعة ملفات إضافية واحدة.

    على الشبكة تحديد مجموعات الملفات وتحديد قيم الحدودفي الميدان مجموعة الملفاتحدد مجموعة الملفات التي سيتم تقسيم البيانات إليها. في الفصل حدودأدخل قيمة حدية لكل مجموعة ملفات. إذا لم يتم تحديد قيمة حد، تقوم وظيفة التقسيم بتعيين الجدول أو الفهرس بأكمله إلى قسم واحد باستخدام اسم وظيفة التقسيم.

    تتوفر الخيارات الإضافية التالية في هذه الصفحة:

    تعيين الحدود...
    فتح مربع حوار تحديد القيم الحديةحيث يمكنك تحديد قيم القطع والنطاقات الزمنية للأقسام. يتوفر هذا الخيار فقط إذا قمت بتحديد عمود تقسيم يحتوي على أحد أنواع البيانات التالية: تاريخ, التاريخ والوقت, com.smalldatetime, التاريخ والوقت2أو datetimeoffset.

    تقييم التخزين
    قم بتقدير عدد الصفوف ومساحة التخزين المطلوبة والمتاحة لكل مجموعة ملفات محددة للأقسام. هذه القيم للقراءة فقط في الشبكة.

    في مربع الحوار تحديد القيم الحديةيمكنك تعيين المعلمات الإضافية التالية:

    تاريخ البدء
    حدد تاريخ بدء لقيم نطاق القسم.

    تاريخ انتهاء الصلاحية
    حدد تاريخ انتهاء لقيم نطاق القسم. عند الاختيار الحدود اليسرىعلى الصفحة رسم الخرائط القسمسيكون هذا التاريخ هو القيمة الأخيرة لكل مجموعة من مجموعات الملفات والأقسام. عند الاختيار الحدود اليمنىعلى الصفحة رسم الخرائط القسمسيكون هذا التاريخ هو القيمة الأولى في مجموعة الملفات قبل الأخيرة.

    نطاق الموعد
    حدد دقة التاريخ أو خطوة قيمة النطاق لكل قسم.

    عند الانتهاء من هذه الصفحة، انقر فوق الزر إضافي.

    على الصفحة اختيار معلمة الإخراجتحديد كيفية ملء الجدول المقسم. يختار إنشاء البرنامج النصيلإنشاء برنامج نصي SQL استنادًا إلى البيانات الموجودة في الصفحات السابقة من المعالج. يختار إطلاق على الفورلإنشاء جدول مقسم جديد بعد إكمال كافة صفحات المعالج المتبقية. يختار جدوللإنشاء جدول مقسم جديد في وقت محدد مسبقًا في المستقبل.

    عند الاختيار إنشاء البرنامج النصيالخامس معلمات البرنامج النصيستكون الخيارات التالية متاحة:

    إخراج البرنامج النصي إلى الملف
    إنشاء برنامج نصي كملف SQL. أدخل اسم الملف وموقعه في الحقل اسم الملفأو انقر مراجعةلفتح مربع الحوار موقع ملف البرنامج النصي. في الفصل حفظ باسميختار نص يونيكودأو نص أنسي.

    إخراج البرنامج النصي إلى الحافظة
    حفظ البرنامج النصي في الحافظة.

    إخراج البرنامج النصي إلى نافذة طلب جديدة
    يتم إنشاء البرنامج النصي في نافذة محرر استعلام جديدة. يتم تحديد هذا الخيار بشكل افتراضي.

    عند الاختيار جدولانقر جدول التغيير.

    1. في مربع الحوار قم بإنشاء جدول عملفي الميدان اسمأدخل اسمًا لجدول المهام.

      في القائمة نوع الجدولحدد نوع الجدول الزمني:

      • ابدأ تلقائيًا عند بدء تشغيل SQL Server Agent

        تشغيل عندما تكون المعالجات خاملة

        تكرارية. حدد هذا الخيار إذا كان الجدول المقسم الجديد يتم تحديثه بانتظام ببيانات جديدة.

        مره واحده. يتم تحديد هذا الخيار بشكل افتراضي.

    2. حدد أو قم بإلغاء التحديد متضمنةلتشغيل الجدول الزمني أو إيقاف تشغيله.

      عند الاختيار تكرارية:

      1. في الفصل تكرارفي القائمة إجراءتشير إلى وتيرة التنفيذ:

        • عند الاختيار يوميًافي الميدان ينفذ كلحدد عدد المرات التي سيتم فيها تكرار جدول المهام خلال أيام.

          عند الاختيار أسبوعيفي الميدان ينفذ كلحدد عدد المرات التي سيتم فيها تكرار جدول المهام خلال أسابيع. حدد اليوم أو أيام الأسبوع التي يتم فيها تشغيل جدول المهام.

          عند الاختيار شهرياانقر يومأو واضح.

          • عند الاختيار يومأدخل تاريخ الشهر الذي يجب أن يتم فيه تشغيل جدول الوظائف، وحدد عدد مرات تشغيل جدول الوظائف مرة أخرى خلال أشهر. على سبيل المثال، إذا كنت تريد تشغيل المهمة في اليوم الخامس عشر من كل شهرين، فحدد يوموأدخل "15" في الحقل الأول و"2" في الحقل الثاني. يرجى ملاحظة أن الرقم الذي يتم إدخاله في الحقل الثاني يجب ألا يتجاوز "99".

            عند الاختيار واضححدد يومًا محددًا من الأسبوع في الشهر الذي يجب تشغيل جدول الوظائف فيه، وحدد عدد مرات تشغيل جدول الوظائف مرة أخرى خلال أشهر. على سبيل المثال، إذا كنت تريد تشغيل المهمة في اليوم الأخير من الأسبوع من كل شهرين، فحدد يوم، يختار آخرفي القائمة الأولى و يوم عملفي القائمة الثانية، ثم أدخل "2" في الحقل الثاني. يمكنك أيضًا الاختيار أولاً, ثانية, ثالثأو الرابع، بالإضافة إلى أيام محددة من الأسبوع (على سبيل المثال، الأحد أو الأربعاء) في القائمتين الأوليين. يرجى ملاحظة أن الرقم الذي تم إدخاله في الحقل الأخير يجب ألا يتجاوز "99".

      2. في الميدان كم مرة في اليومحدد عدد المرات التي سيتم فيها تشغيل جدول المهام مرة أخرى في يوم تشغيل جدول المهام:

        • عند الاختيار تنفيذ مرة واحدة كلتحديد وقت محدد من اليوم لتشغيل جدول المهام في الميدان تنفيذ مرة واحدة كل. أدخل الوقت من اليوم: الساعة والدقيقة والثانية.

          عند الاختيار ينفذ كلتشير إلى تكرار المهمة في اليوم المحدد في الميدان تكرار. على سبيل المثال، إذا كنت تريد تشغيل جدول المهام كل ساعتين في يوم تشغيل جدول المهام، فحدد ينفذ كل، أدخل "2" في الحقل الأول، ثم اختر من القائمة يشاهد. من هذه القائمة يمكنك أيضًا الاختيار دقائقو ثواني. يرجى ملاحظة أن الرقم الذي يتم إدخاله في الحقل الأول يجب ألا يتجاوز "100".

          في الميدان تبدأ فيأدخل الوقت لبدء تشغيل جدول المهام. في الميدان ينتهي عندأدخل الوقت اللازم لإنهاء إعادة تشغيل جدول المهام. أدخل الوقت من اليوم: الساعة والدقيقة والثانية.

        في الفصل مدة، في المنطقة تاريخ البدءأدخل تاريخ البدء لتشغيل جدول المهام. يختار تاريخ انتهاء الصلاحيةأو لا يوجد تاريخ انتهاءلتحديد تاريخ الانتهاء من الجدول الزمني للوظيفة. عند الاختيار تاريخ انتهاء الصلاحيةأدخل تاريخ الانتهاء لتشغيل جدول المهام.

      عند اختيار القيمة مره واحدهالخامس التنفيذ لمرة واحدةفي الميدان تاريخأدخل تاريخ البدء لجدول الوظائف. في الميدان وقتأدخل وقت البدء لجدول المهام. أدخل الوقت من اليوم: الساعة والدقيقة والثانية.

      في الفصل ملخصالخامس وصفتحقق من صحة كافة معلمات جدول المهام.

      انقر فوق الزر نعم.

    عند الانتهاء من هذه الصفحة، انقر فوق الزر إضافي.

    على الصفحة ملخص رأيفي الفصل عرض اختياراتكقم بتوسيع جميع الخيارات المتاحة للتأكد من صحة جميع إعدادات القسم. إذا كانت كافة الإعدادات صحيحة، فانقر فوق الزر مستعد.

    صفحة أداءيتم استخدام معالج التقسيم لتتبع معلومات الحالة حول إجراءات معالج التقسيم. اعتمادًا على الإجراءات التي تحددها في المعالج، قد تحتوي صفحة التقدم على إجراء واحد أو أكثر. يعرض الحقل العلوي الحالة العامة للمعالج وعدد رسائل الحالة والتحذيرات ورسائل الخطأ التي تلقاها.

    على الصفحة أداءتتوفر الخيارات التالية في معالج إنشاء القسم:

    ذكاء
    معلومات حول الحدث والحالة وأي رسائل يتم إرجاعها كنتيجة لإجراءات المعالج.

    فعل
    يحدد نوع واسم كل إجراء.

    ولاية
    يشير إلى ما إذا كان إجراء المعالج ككل قد قام بإرجاع قيمة بنجاحأو خطأ.

    رسالة
    أي رسائل خطأ أو تحذيرات من العملية.

    تقرير
    قم بإنشاء تقرير يحتوي على نتائج معالج إنشاء القسم. الخيارات المتاحة: عرض التقرير, حفظ التقرير إلى ملف، و إرسال التقرير عن طريق البريد الإلكتروني.

    عرض التقرير
    فتح مربع حوار عرض التقريروالذي يحتوي على تقرير نصي عن عمل معالج إنشاء الأقسام.

    نسخ التقرير إلى الحافظة
    نسخ نتائج تقرير المعالج إلى الحافظة.

    إرسال التقرير عن طريق البريد الإلكتروني
    انسخ نتائج تقرير حالة المعالج إلى رسالة بريد إلكتروني.

    عند الانتهاء من تحديد خياراتك، انقر فوق يغلق.

سيقوم معالج التقسيم بإنشاء وظيفة التقسيم ونظامه، ثم يقوم بتطبيق التقسيم على الجدول المحدد. للتحقق من تقسيم الجدول، في Object Explorer، انقر بزر الماوس الأيمن فوق الجدول وحدد ملكيات. انتقل إلى صفحة تخزين. تعرض الصفحة معلومات بما في ذلك اسم وظيفة التقسيم والمخطط وعدد الأقسام.

إنشاء جدول مقسم

    في مستكشف الكائناتالاتصال بمثيل مشغل قاعدة البيانات.

    في اللوحة القياسية، حدد إنشاء طلب.

    انسخ المثال التالي في نافذة الاستعلام وانقر فوق الزر ينفذ. يوضح المثال التالي إنشاء مجموعات الملفات والوظائف وأنظمة التقسيم. يتم إنشاء جدول جديد عندما تحدد نظام تقسيم كموقع للتخزين.

    استخدم AdventureWorks2012؛يذهب - إضافة أربع مجموعات ملفات جديدة إلى قاعدة بيانات AdventureWorks2012 تغيير قاعدة بيانات AdventureWorks2012 إضافة FILEGROUP test1fg؛يذهب تغيير قاعدة بيانات AdventureWorks2012 إضافة FILEGROUP test2fg؛يذهب تغيير قاعدة البيانات AdventureWorks2012 إضافة FILEGROUP test3fg؛يذهب تغيير قاعدة بيانات AdventureWorks2012 إضافة FILEGROUP test4fg؛ - إضافة ملف واحد لكل مجموعة ملفات. تغيير قاعدة بيانات AdventureWorks2012 إضافة ملف (الاسم=test1dat1، اسم الملف= "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\t1dat1.ndf"، الحجم = 5 ميجا بايت، الحد الأقصى = 100 ميجا بايت، حجم الملف = 5 ميجا بايت) إلى مجموعة الملفات test1fg؛ تغيير قاعدة بيانات AdventureWorks2012 إضافة ملف (الاسم=test2dat2،اسم الملف= "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\t2dat2.ndf"، الحجم = 5 ميجا بايت، الحد الأقصى = 100 ميجا بايت، حجم الملف = 5 ميجا بايت) إلى مجموعة الملفات test2fg؛يذهب تغيير قاعدة بيانات AdventureWorks2012 إضافة ملف (الاسم=test3dat3،اسم الملف= "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\t3dat3.ndf"، الحجم = 5 ميجا بايت، الحد الأقصى = 100 ميجا بايت، حجم الملف = 5 ميجا بايت) إلى مجموعة الملفات test3fg؛يذهب تغيير قاعدة بيانات AdventureWorks2012 إضافة ملف (الاسم=test4dat4، اسم الملف= "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\t4dat4.ndf"، الحجم = 5 ميجا بايت، الحد الأقصى = 100 ميجا بايت، حجم الملف = 5 ميجا بايت) إلى مجموعة الملفات test4fg؛يذهب - إنشاء وظيفة قسم تسمى myRangePF1 والتي ستقوم بتقسيم الجدول إلى أربعة أقسام إنشاء وظيفة التقسيم myRangePF1 (int) كنطاق يسار للقيم (1، 100، 1000)؛يذهب - إنشاء نظام تقسيم يسمى myRangePS1 الذي يطبق myRangePF1 على مجموعات الملفات الأربع التي تم إنشاؤها أعلاه إنشاء مخطط تقسيم myRangePS1 كقسم myRangePF1 إلى (test1fg, test2fg, test3fg, test4fg) ؛يذهب - إنشاء جدول مقسم يسمى PartitionTable يستخدم myRangePS1 لتقسيم col1 إنشاء جدول PartitionTable (col1 int PRIMARY KEY , col2 char ( 10 )) ON myRangePS1 (col1) ؛يذهب

تعريف تقسيم الجدول

    يقوم الاستعلام التالي بإرجاع صف واحد أو أكثر إذا تم تقسيم PartitionTable. إذا لم يتم تقسيم الجدول، فلن يتم إرجاع أي صفوف.

تحديد قيم الحدود لجدول مقسم

    يقوم الاستعلام التالي بإرجاع قيم الحدود لكل قسم في PartitionTable.

    حدد t .name AS TableName، i .name AS IndexName، p .partition_number، p .partition_id، i .data_space_id، f .function_id، f .type_desc، r.boundary_id، r.value AS BoundaryValue FROM sys .tables AS t JOIN sys .indexes AS i ON t .object_id = i .object_id JOIN sys .partitions AS p ON i .object_id = p .object_id AND i .index_id = p .index_id JOIN sys .partition_schemes AS s ON i .data_space_id = s.data_space_id JOIN sys .partition_functions AS f ON s.function_id = f .function_id LEFT JOIN sys .partition_range_values ​​​​AS r ON f .function_id = r.function_id وr.boundary_id = p .partition_number حيث t .name = "PartitionTable" وi .type<= 1 ORDER BY p .partition_number;

تحديد عمود التقسيم لجدول مقسم

    يقوم الاستعلام التالي بإرجاع اسم عمود تقسيم الجدول. جدول التقسيم.

    حدد ر. AS ObjectID، t .name AS TableName، ic.column_id AS PartitioningColumnID، c .name AS PartitioningColumnName FROM sys .tables AS t JOIN sys .indexes AS i ON t. = ط. و انا.<= 1 -- clustered index or a heap JOIN sys .partition_schemes AS ps ON ps.data_space_id = i .data_space_id JOIN sys .index_columns AS ic ON ic. = i . AND ic.index_id = i .index_id AND ic.partition_ordinal >= 1 - لأن 0 = عمود غير مقسمانضم إلى sys .columns AS c ON t . =ج. AND ic.column_id = c .column_id WHERE t .name = "PartitionTable" ؛يذهب

انظر القسم لمزيد من المعلومات.