ما هي أفضل طريقة لإدارة عدد كبير من الجداول في MS SQL Server؟

StackOverflow https://stackoverflow.com/questions/124237

سؤال

هذا السؤال مرتبط بسؤال آخر:
هل سيساعد وجود مجموعات ملفات متعددة في تسريع قاعدة البيانات الخاصة بي؟

البرنامج الذي نقوم بتطويره هو أداة تحليلية تستخدم MS SQL Server 2005 لتخزين البيانات العلائقية.يمكن أن يكون التحليل الأولي بطيئًا (نظرًا لأننا نقوم بمعالجة الملايين أو المليارات من صفوف البيانات)، ولكن هناك متطلبات أداء لاسترجاع التحليلات السابقة بسرعة، لذلك نقوم "بحفظ" نتائج كل تحليل.

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

يبدأ النهج في الانهيار بمجرد تجميع ما يكفي من نتائج التحليل المحفوظة - قبل أن نضيف قدرة أرشفة/تنظيف أكثر قوة، ارتفعت قاعدة بيانات الاختبار الخاصة بنا إلى عدة مليون الجداول.لكن ليس من المستغرب أن يكون لدينا أكثر من 100.000 طاولة، حتى في مرحلة الإنتاج.تضع Microsoft حدًا نظريًا هائلاً جدًا لحجم كائنات النظام (حوالي 2 مليار)، ولكن بمجرد أن تنمو قاعدة بياناتنا إلى أكثر من 100000 أو نحو ذلك، يمكن أن تتباطأ الاستعلامات البسيطة مثل CREATE TABLE وDROP TABLE بشكل كبير.

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

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

هل كانت مفيدة؟

المحلول 4

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

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

لقد لاحظنا أيضًا أن SQL 2008 يميل إلى التعامل مع كتالوجات النظام الكبيرة بشكل أفضل من SQL 2000 وSQL 2005.(لم نقم بالترقية إلى عام 2008 عندما نشرت هذا السؤال.)

نصائح أخرى

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

هناك احتمال آخر وهو وضع كل عملية تشغيل في قاعدة البيانات الخاصة بها ثم فصلها، وإرفاقها حسب الحاجة فقط (وفي شكل للقراءة فقط)

من المحتمل أن يكون أداء CREATE TABLE وDROP TABLE ضعيفًا لأن قواعد البيانات الرئيسية أو النموذجية لم يتم تحسينها لهذا النوع من السلوك.

أوصي أيضًا بالتحدث إلى Microsoft حول اختيارك لتصميم قاعدة البيانات.

هل الجداول كلها هياكل مختلفة؟إذا كانت نفس البنية، فقد تفلت من استخدام جدول مقسم واحد.

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

إذا كان هذا تحليليًا (ربما حسابات تسعير مشتقة؟) فيمكنك تفريغ نتائج تشغيل الحساب إلى ملفات ثابتة وإعادة استخدام حساباتك عن طريق التحميل من الملفات الثابتة.

يبدو أن هذه مشكلة/تطبيق مثير للاهتمام للغاية تعمل معه.أحب أن أعمل على شيء مثل هذا.:)

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top