سؤال

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

أنا أعتبر نفسي مؤهلاً إلى حد ما في كتابة استعلامات SQL وتصميم الجداول، لكنني لست محترفًا في إدارة الأعمال بأي حال من الأحوال...ومن هنا المشكلة.

بعض الخلفية:

  1. يعمل موقعي وخادم SQL على مضيف بعيد.أقوم بتحديث كود ASP.NET من Visual Studio وSQL عبر SQL Server Mgmt.ستوديو اكسبرس.ليس لدي إمكانية الوصول الفعلي إلى الخادم.

  2. جميع عملياتي المخزنة (أعتقد أنني حصلت عليها جميعًا) ملفوفة في المعاملات.

  3. الجدول الرئيسي هو 9400 سجل فقط في هذا الوقت.أقوم بإضافة 12 سجلًا جديدًا إلى هذا الجدول كل ليلة.

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

  5. الجداول الثانوية هي سجلات أصغر، ولكنها تحتوي على عدد أكبر منها.70.000 في واحد، و115.000 في الآخر.هذه هي سجلات التعليقات والتقييمات للعناصر الموجودة في رقم 3.

  6. الفهارس موجودة في الحقول الأكثر حاجة.وقمت بتعيينهم على إحصائيات إعادة الحساب التلقائي على الجداول الكبيرة.

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

وللأسف، يشعر المستخدمون بالإحباط بسبب هذه المشكلات وتتضاءل مشاركتهم.

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

ًشكراً جزيلا!كلك

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

المحلول

لا تحتاج إلى إعداد مهام الصيانة الخاصة بك كخطة صيانة.

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

ثم قم بإنشاء مهمة تستدعي الإجراء/الإجراءات المخزنة لديك.يمكن تكوين المهمة لتعمل وفقًا للجدول الزمني المطلوب.

لإنشاء مهمة، استخدم الإجراء sp_add_job.

لإنشاء جدول استخدم الإجراء sp_add_schedule.

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

في صحتك، جون

نصائح أخرى

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

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

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

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

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

خلاصة القول هي أنني أشك حقًا في أنه تم تكوينه بشكل خاطئ في SQL Server.أعني، إذا كان عليك إعادة تشغيل الخادم الخاص بك كل ليلة بسبب توقف النظام، فهل ستلوم النظام أو الكود الخاص بك؟نفس الصفقة هنا...تعلم الأدوات التي يوفرها SQL Server، أراهن أنها رائعة جدًا :-)

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

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