إنتقل إلى المحتوى الرئيسي

انقطاع قاعدة البيانات

نظرة عامة​

يوضح هذا الدليل كيفية التعامل مع انقطاع خدمة قاعدة البيانات Supabase.

:::danger حالة طوارئ هذا دليل للتعامل مع حالات الطوارئ. اتبع الخطوات بدقة. :::

التشخيص الأولي​

1. التحقق من حالة Supabase​

# التحقق من اتصال قاعدة البيانات
curl -I https://your-project.supabase.co/rest/v1/

# التحقق من صفحة حالة Supabase
# https://status.supabase.com/

2. فحص السجلات​

# سجلات الخدمة
docker logs supabase-db

# سجلات Kong Gateway
docker logs supabase-kong

3. التحقق من الاتصالات​

# عدد الاتصالات النشطة
psql -c "SELECT count(*) FROM pg_stat_activity;"

# الاستعلامات الطويلة
psql -c "SELECT pid, now() - pg_stat_activity.query_start AS duration, query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY duration DESC
LIMIT 10;"

أنواع الانقطاع​

انقطاع جزئي​

الأعراض:

  • بعض الاستعلامات تفشل
  • بطء شديد في الاستجابة
  • أخطاء متقطعة

الإجراءات:

  1. تحديد الاستعلامات المتسببة
  2. إلغاء الاستعلامات المعلقة
  3. مراجعة الفهارس
-- إلغاء استعلام معلق
SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE duration > interval '5 minutes';

انقطاع كامل​

الأعراض:

  • فشل جميع الاتصالات
  • خطأ 503 Service Unavailable
  • لا يمكن الوصول لـ Supabase Studio

الإجراءات:

  1. تفعيل صفحة الصيانة
  2. إعادة تشغيل الخدمات
  3. التواصل مع دعم Supabase

خطوات الاستعادة​

1. تفعيل صفحة الصيانة​

# تحديث Nginx لعرض صفحة الصيانة
# أو استخدام Cloudflare Maintenance Mode

2. إعادة تشغيل الخدمات (التطوير المحلي)​

# إيقاف جميع الخدمات
docker compose down

# إعادة التشغيل
docker compose up -d

# مراقبة السجلات
docker compose logs -f supabase-db

3. التحقق من سلامة البيانات​

-- التحقق من الجداول الرئيسية
SELECT 'bookings' as table_name, COUNT(*) FROM bookings
UNION ALL
SELECT 'trips', COUNT(*) FROM trips
UNION ALL
SELECT 'companies', COUNT(*) FROM companies
UNION ALL
SELECT 'passengers', COUNT(*) FROM passengers;

4. استعادة النسخ الاحتياطية (إذا لزم)​

# تنزيل النسخة الاحتياطية من Supabase Dashboard
# استعادة النسخة
psql -d shambus < backup.sql

التواصل​

إبلاغ الفرق​

  1. فريق التطوير: Slack #engineering
  2. فريق الدعم: إعداد رسائل للعملاء
  3. الإدارة: تحديث عن حالة الخدمة

رسائل العملاء​

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

ما بعد الاستعادة​

1. مراجعة الحجوزات المتأثرة​

SELECT * FROM bookings
WHERE created_at > 'وقت الانقطاع'
AND status = 'pending';

2. إعادة المعالجة​

  • معالجة الحجوزات المعلقة
  • إرسال إشعارات التأكيد المتأخرة
  • مراجعة المقاعد المقفلة

3. تقرير الحادث​

توثيق:

  • وقت بداية الانقطاع
  • وقت الاكتشاف
  • الإجراءات المتخذة
  • وقت الاستعادة
  • الأسباب الجذرية
  • خطوات المنع المستقبلية

المراقبة​

إعداد التنبيهات​

  • مراقبة اتصالات قاعدة البيانات
  • تنبيهات للأخطاء 5xx
  • مراقبة استخدام الموارد