انقطاع قاعدة البيانات
نظرة عامة
يوضح هذا الدليل كيفية التعامل مع انقطاع خدمة قاعدة البيانات 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;"
أنواع الانقطاع
انقطاع جزئي
الأعراض:
- بعض الاستعلامات تفشل
- بطء شديد في الاستجابة
- أخطاء متقطعة
الإجراءات:
- تحديد الاستعلامات المتسببة
- إلغاء الاستعلامات المعلقة
- مراجعة الفهارس
-- إلغاء استعلام معلق
SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE duration > interval '5 minutes';
انقطاع كامل
الأعراض:
- فشل جميع الاتصالات
- خطأ 503 Service Unavailable
- لا يمكن الوصول لـ Supabase Studio
الإجراءات:
- تفعيل صفحة الصيانة
- إعادة تشغيل الخدمات
- التواصل مع دعم 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
التواصل
إبلاغ الفرق
- فريق التطوير: Slack #engineering
- فريق الدعم: إعداد رسائل للعملاء
- الإدارة: تحديث عن حالة الخدمة
رسائل العملاء
نعتذر عن انقطاع الخدمة المؤقت.
فريقنا يعمل على حل المشكلة.
سيتم إعادة الخدمة في أقرب وقت ممكن.
ما بعد الاستعادة
1. مراجعة الحجوزات المتأثرة
SELECT * FROM bookings
WHERE created_at > 'وقت الانقطاع'
AND status = 'pending';
2. إعادة المعالجة
- معالجة الحجوزات المعلقة
- إرسال إشعارات التأكيد المتأخرة
- مراجعة المقاعد المقفلة
3. تقرير الحادث
توثيق:
- وقت بداية الانقطاع
- وقت الاكتشاف
- الإجراءات المتخذة
- وقت الاستعادة
- الأسباب الجذرية
- خطوات المنع المستقبلية
المراقبة
إعداد التنبيهات
- مراقبة اتصالات قاعدة البيانات
- تنبيهات للأخطاء 5xx
- مراقبة استخدام الموارد