وقت استعلام البحث ينقضي للمواقع الكبيرة

مرحبًا يا أصدقاء،

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

  • أكبر موقع لدينا (الموقع الذي يحدث فيه تجاوز الوقت بشكل متكرر أكثر) يحتوي على حوالي 1,700,000 منشور.
  • نحن نستخدم إعدادات autovacuum الافتراضية لـ PostgreSQL. قمنا بجمع بعض الإحصائيات حول الجداول ذات الصلة: categories، posts، topics، post_search_data، و users، وتبين أنها تخضع لعملية vacuum مرة واحدة يوميًا تقريبًا، لذا لا نعتقد أن هذا يتعلق بصفوف ميتة تبطئ عملية البحث لدينا.
  • قمنا بتشغيل Jobs::ReindexSearch.new({}) يدويًا، لكننا لم نلاحظ أي تحسن ملحوظ.

نحن نفكر في تشغيل أمر rake search:reindex على هذا الموقع، وهو أمر نعلم مسبقًا أنه سيستغرق وقتًا طويلاً، لكننا نتساءل عما إذا كان لديك أي اقتراحات أخرى؟

شكرًا مسبقًا

إحدى الطرق السريعة وغير الرسمية لجعل البحث أسرع هي استخدام الإعدادات search prefer recent posts و search recent posts size. تعمل هذه الطريقة بشكل ممتاز من خلال إعطاء الأولوية للمشاركات الحديثة أولاً لملء نتائج البحث.

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

إذا فشلت كل الخيارات الأخرى، يمكنك أيضًا تجربة Discourse Algolia Search

مرحبًا يا فالكو،

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