دليل تحسين الأداء

دليل شامل لتحسين كل جانب من سير عمل PostgreSQL الخاص بك، من كتابة استعلامات فعالة إلى تكوين HarborDB وmacOS لأقصى أداء.

Guides
آخر تحديث: 16 فبراير 2026

مرحباً بك في دليل تحسين أداء HarborDB. سيُساعدك هذا المورد الشامل في تحسين كل جانب من سير عمل PostgreSQL الخاص بك، من كتابة استعلامات فعالة إلى تكوين HarborDB وmacOS لأقصى أداء.

فهم عوامل الأداء

تؤثر عدة عوامل على أداء قاعدة البيانات في HarborDB:

| العامل | التأثير | مستوى التحسين | | ---------------------------- | ---------- | ------------- | | تصميم الاستعلام | عالي | التطبيق | | فهارس قاعدة البيانات | عالي | قاعدة البيانات | | اتصال الشبكة | متوسط | البنية التحتية | | موارد النظام | متوسط | macOS | | إعدادات HarborDB | منخفض-متوسط | التطبيق | | تكوين PostgreSQL | عالي | قاعدة البيانات |

تحسين الاستعلامات

كتابة استعلامات فعالة

1. اختر فقط ما تحتاج إليه

-- ❌ غير فعال
SELECT * FROM customers;

-- ✅ فعال
SELECT customer_id, name, email FROM customers;

2. استخدم بنود WHERE بشكل فعال

-- ❌ غير فعال (فحص كامل للجدول)
SELECT * FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2024;

-- ✅ فعال (يستخدم الفهرس)
SELECT * FROM orders
WHERE order_date >= '2024-01-01'
  AND order_date < '2025-01-01';

3. حدّد مجموعات النتائج

-- حدد دائماً عند الاستكشاف
SELECT * FROM large_table LIMIT 100;

-- استخدم الترقيم للنتائج الكبيرة
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 50 OFFSET 0;

4. تجنب مشاكل استعلام N+1

-- ❌ غير فعال (استعلامات متعددة)
-- الاستعلام الأول: SELECT * FROM orders WHERE status = 'pending'
-- ثم لكل طلب: SELECT * FROM customers WHERE customer_id = ?

-- ✅ فعال (استعلام واحد مع JOIN)
SELECT o.*, c.name, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.status = 'pending';

استخدام EXPLAIN لتحليل الاستعلامات

يجعل HarborDB تحليل أداء الاستعلام سهلاً:

  1. اكتب استعلامك في المحرر
  2. انقر على "شرح" (⚡) في شريط الأدوات
  3. راجع خطة التنفيذ في لوحة النتائج

فهم مخرجات EXPLAIN

  • Seq Scan: فحص كامل للجدول (غالباً بطيء للجداول الكبيرة)
  • Index Scan: استخدام فهرس (عادة أسرع)
  • Nested Loop: ربط الجداول (تحقق إذا كان مناسباً)
  • تقديرات التكلفة: الأرقام الأعلى تعني عمل أكثر

أنماط تحسين شائعة

-- اقتراح إضافة فهرس مفقود
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 1234;

-- قد تظهر النتيجة: "Seq Scan on orders"
-- الحل: CREATE INDEX idx_orders_customer_id ON orders(customer_id);

تحسين فهارس قاعدة البيانات

متى تضيف الفهارس

أضف فهارس لـ:

  • المفاتيح الأساسية (مفهرسة تلقائياً)
  • المفاتيح الخارجية (غالباً تحتاج إلى فهرسة يدوية)
  • الأعمدة التي يتم تصفيتها بشكل متكرر
  • الأعمدة التي يتم ترتيبها بشكل متكرر
  • الأعمدة المستخدمة في شروط JOIN

إنشاء فهارس فعالة

-- فهرس عمود واحد
CREATE INDEX idx_orders_status ON orders(status);

-- فهرس متعدد الأعمدة (الترتيب مهم!)
CREATE INDEX idx_orders_date_status ON orders(order_date, status);

-- فهرس جزئي (لمجموعات فرعية محددة)
CREATE INDEX idx_active_users ON users(email) WHERE active = true;

-- فهرس فريد للقيود
CREATE UNIQUE INDEX idx_unique_email ON users(email);

صيانة الفهارس

-- تحقق من استخدام الفهرس
SELECT schemaname, tablename, indexname
FROM pg_stat_user_indexes
WHERE idx_scan = 0;  -- فهارس لم تستخدم أبداً

-- أعد بناء الفهارس المجزأة
REINDEX INDEX idx_orders_status;

-- حدّث الإحصائيات لمخطِّط الاستعلام
ANALYZE orders;

تحسين الاتصال

إعدادات تجميع الاتصالات

حسّن اتصالات HarborDB:

  1. افتح التفضيلاتالاتصالات
  2. اضبط الإعدادات بناءً على سير العمل:

| الإعداد | القيمة الموصى بها | الغرض | | ---------------------- | ----------------- | ------------------------- | | مهلة الاتصال | 30 ثانية | منع الاتصالات المعلقة | | الإبقاء نشطاً | مفعل | الحفاظ على الاتصالات الخاملة | | الحد الأقصى للاتصالات | 5-10 | توازن الأداء/الذاكرة | | وضع SSL | Prefer | آمن دون عبء إضافي |

تحسين الشبكة

لقواعد البيانات البعيدة:

  1. استخدم نفق SSH لاتصالات آمنة ومحسنة
  2. فعّل الضغط لمجموعات النتائج الكبيرة
  3. جدّل الاستعلامات الثقيلة خلال ساعات غير الذروة
  4. راقب تأخر الشبكة بالأدوات المدمجة
-- اختبر تأخر الشبكة
SELECT 1 as test;  -- استعلام بسيط لقياس وقت الذهاب والإياب

إعدادات أداء HarborDB

إدارة الذاكرة

اضبط استخدام الذاكرة في التفضيلاتالأداء:

| الإعداد | التوصية | التأثير | | --------------------- | --------------- | ------------------------------ | | ذاكرة التخزين المؤقت للاستعلام | 256 ميجابايت | استعلامات مكررة أسرع | | ذاكرة مجموعة النتائج | 512 ميجابايت | التعامل مع مجموعات بيانات أكبر | | وضع التدفق | مفعل | أفضل للنتائج الكبيرة | | التحديث التلقائي | 30 ثانية | توازن الحداثة/الأداء |

تحسين الواجهة

  1. عطّل الرسوم المتحركة في التفضيلات → المظهر
  2. قلل تأخير الإكمال التلقائي إلى 100 مللي ثانية
  3. حدد عمق التوسيع التلقائي للشريط الجانبي
  4. استخدم الوضع الداكن لكفاءة شاشة OLED

اختصارات لوحة المفاتيح للسرعة

أتقن معززات الإنتاجية هذه:

| الاختصار | الإجراء | الوقت المحفوظ | | -------- | -------------- | ----------------- | | ⌘ + R | تنفيذ الاستعلام | 2-3 ثوانٍ | | ⌘ + . | إلغاء الاستعلام | يمنع الانتظار | | ⌘ + T | علامة تبويب استعلام جديدة | 1-2 ثانية | | ⌘ + S | حفظ الاستعلام | 1 ثانية | | ⌘ + E | تصدير النتائج | 2 ثانية | | ⌘ + F | البحث في الاستعلام | 3-5 ثوانٍ |

تحسين نظام macOS

اعتبارات الأجهزة

الذاكرة (RAM)

  • الحد الأدنى: 8 جيجابايت للاستخدام الأساسي
  • الموصى به: 16 جيجابايت للعمل الاحترافي
  • الأمثل: 32 جيجابايت لمجموعات البيانات الكبيرة

التخزين (SSD)

  • الحد الأدنى: 256 جيجابايت مساحة حرة
  • الموصى به: 512 جيجابايت+ لملفات قاعدة البيانات والتصديرات
  • استخدم SSD خارجي لتخزين قاعدة البيانات الكبيرة

المعالج

  • Apple Silicon: محسّن لـ M1/M2/M3
  • Intel: i5 كحد أدنى، i7/i9 موصى به

إعدادات macOS

  1. موفر الطاقة (تفضيلات النظام):

    • عطّل "وضع الأقراص الصلبة في وضع السكون"
    • ابقِ الشاشة مضاءة خلال الاستعلامات الطويلة
  2. مراقب النشاط:

    • راقب استخدام ذاكرة HarborDB
    • تحقق من موارد عملية PostgreSQL
  3. أداة القرص:

    • تأكد من تمكين TRIM لـ SSD
    • راقب صحة القرص والمساحة الحرة

أوامر أداء Terminal

# تحقق من موارد النظام
top -o cpu  # استخدام وحدة المعالجة المركزية
vm_stat     # استخدام الذاكرة
iostat      # إدخال/إخراج القرص

# راقب HarborDB بشكل خاص
ps aux | grep HarborDB
lsof -p $(pgrep HarborDB) | wc -l  # الملفات المفتوحة

استراتيجيات مجموعات البيانات الكبيرة

العمل مع ملايين الصفوف

1. الترقيم من جانب الخادم

-- بدلاً من تحميل جميع الصفوف
SELECT * FROM huge_table;

-- استخدم الترقيم
SELECT * FROM huge_table
ORDER BY id
LIMIT 1000 OFFSET 0;

-- الصفحة التالية
SELECT * FROM huge_table
ORDER BY id
LIMIT 1000 OFFSET 1000;

2. تدفق النتائج

فعّل في التفضيلاتالأداء:

  • ✅ "تمكين التدفق للنتائج > 10000 صف"
  • ✅ "حجم جزء التدفق: 1000 صف"
  • ✅ "التدفق في الخلفية: مفعل"

3. المشاهدات المجسّدة

-- احسب مسبقاً الاستعلامات المكلفة
CREATE MATERIALIZED VIEW daily_sales_summary AS
SELECT
    DATE(order_date) as day,
    COUNT(*) as orders,
    SUM(total) as revenue
FROM orders
GROUP BY DATE(order_date);

-- حدّث دورياً
REFRESH MATERIALIZED VIEW daily_sales_summary;

تحسين التصدير

للتقديرات الكبيرة:

  1. صدّر إلى CSV (أكثر كفاءة من JSON)
  2. استخدم تصديرات مجزأة (التفضيلات → تصدير)
  3. اضغط التصديرات تلقائياً
  4. صدّر مباشرة إلى التخزين الخارجي

مراقبة الأداء

أدوات HarborDB المدمجة

  1. مؤقت الاستعلام: يظهر وقت التنفيذ في شريط الحالة
  2. مراقب الذاكرة: اعرض في نافذة → مراقب الأداء
  3. حالة الاتصال: مقاييس الشبكة في الوقت الفعلي
  4. سجل الاستعلام: راجع أداء الاستعلامات السابقة

استعلامات مراقبة PostgreSQL

-- الاستعلامات النشطة
SELECT
    pid,
    usename,
    query_start,
    state,
    query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY query_start DESC;

-- الاستعلامات البطيئة
SELECT
    query,
    calls,
    total_time,
    mean_time,
    rows
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;

-- إحصائيات الجدول
SELECT
    schemaname,
    relname,
    seq_scan,
    idx_scan,
    n_tup_ins,
    n_tup_upd,
    n_tup_del
FROM pg_stat_user_tables
ORDER BY seq_scan DESC;

مشاكل الأداء الشائعة والحلول

المشكلة: "الاستعلام يستغرق وقتاً طويلاً"

قائمة التحقق للحل:

  1. [ ] أضف فهارس مناسبة
  2. [ ] أعد كتابة الاستعلام ليكون أكثر كفاءة
  3. [ ] تحقق من تكوين PostgreSQL
  4. [ ] تحقق من اتصال الشبكة
  5. [ ] زِد إعدادات المهلة إذا لزم الأمر

المشكلة: "HarborDB يستخدم ذاكرة كثيرة جداً"

خطوات الحل:

  1. قلل حجم ذاكرة التخزين المؤقت للاستعلام (التفضيلات → الأداء)
  2. أغلق علامات تبويب الاستعلام غير المستخدمة
  3. أعد تشغيل HarborDB دورياً
  4. تحقق من تسرب الذاكرة (مراقب النشاط)
  5. زِد ذاكرة الوصول العشوائي للنظام إذا وصلت إلى الحدود باستمرار

المشكلة: "التصدير/الاستيراد بطيء جداً"

نصائح التحسين:

  1. استخدم تنسيق CSV بدلاً من JSON
  2. عطّل فحص مضاد الفيروسات على المجلد الهدف
  3. صدّر إلى SSD بدلاً من HDD
  4. استخدم أدوات PostgreSQL الأصلية (pg_dump/pg_restore) للعمليات الكبيرة جداً
  5. قسم العمليات الكبيرة إلى دفعات أصغر

المشكلة: "الواجهة تبدو بطيئة"

إصلاحات سريعة:

  1. عطّل تمييز بناء الجملة للاستعلامات الكبيرة جداً
  2. قلل التوسيع التلقائي للشريط الجانبي
  3. استخدم سمة واجهة مستخدم أبسط
  4. أغلق التطبيقات الأخرى المكثفة للموارد
  5. أعد تشغيل HarborDB وmacOS

تقنيات التحسين المتقدمة

تقسيم الجداول الكبيرة

-- إنشاء جدول مقسم
CREATE TABLE orders_partitioned (
    order_id BIGSERIAL,
    order_date DATE NOT NULL,
    customer_id INT,
    total DECIMAL(10,2)
) PARTITION BY RANGE (order_date);

-- إنشاء أقسام
CREATE TABLE orders_2024_q1 PARTITION OF orders_partitioned
    FOR VALUES FROM ('2024-01-01') TO ('2024-04-01');

CREATE TABLE orders_2024_q2 PARTITION OF orders_partitioned
    FOR VALUES FROM ('2024-04-01') TO ('2024-07-01');

تلميحات خطة الاستعلام

-- فرض استخدام الفهرس (استخدم بحذر)
SET enable_seqscan = off;

-- زِد ذاكرة العمل مؤقتاً
SET work_mem = '64MB';

-- استخدم طريقة ربط محددة
SET enable_nestloop = off;
SET enable_hashjoin = on;

تجميع الاتصالات مع PGBouncer

للتطبيقات ذات التزامن العالي:

  1. ثبّت PGBouncer (Homebrew: brew install pgbouncer)
  2. قم بتكوينه لتجميع المعاملات
  3. اتصل بـ HarborDB عبر PGBouncer
  4. راقب إحصاءات إعادة استخدام الاتصال

اختبار الأداء

إنشاء استعلامات قياسية

-- اختبر أداء الاستعلام
EXPLAIN ANALYZE
SELECT * FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'
  AND status = 'completed'
ORDER BY total DESC
LIMIT 100;

-- قارن مع نهج مختلف
EXPLAIN ANALYZE
SELECT * FROM orders
WHERE status = 'completed'
  AND order_date >= '2024-01-01'
  AND order_date <= '2024-12-31'
ORDER BY total DESC
LIMIT 100;

المراقبة مع مرور الوقت

أنشئ جدول سجل الأداء:

CREATE TABLE query_performance_log (
    log_id SERIAL PRIMARY KEY,
    query_hash TEXT,
    execution_time_ms INTEGER,
    row_count INTEGER,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    notes TEXT
);

-- سجّل الاستعلامات البطيئة
INSERT INTO query_performance_log
    (query_hash, execution_time_ms, row_count, notes)
SELECT
    md5(query),
    EXTRACT(MILLISECONDS FROM NOW() - query_start),
    result_rows,
    'تم اكتشاف استعلام بطيء'
FROM pg_stat_activity
WHERE state = 'active'
  AND NOW() - query_start > INTERVAL '5 seconds';

ملخص أفضل الممارسات

سير العمل اليومي

  1. ابدأ بـ EXPLAIN للاستعلامات المعقدة الجديدة
  2. استخدم LIMIT عند استكشاف البيانات
  3. أغلق الاتصالات غير المستخدمة
  4. أعد تشغيل HarborDB بانتظام (أسبوعياً)
  5. راقب موارد النظام خلال العمل المكثف

الصيانة الأسبوعية

  1. راجع سجلات أداء الاستعلام
  2. تحقق من الفهارس غير المستخدمة
  3. حدّث إحصائيات PostgreSQL (ANALYZE)
  4. نظّف الملفات المؤقتة
  5. احفظ نسخة احتياطية من تكوينات الأداء

المراجعة الشهرية

  1. حلل أنماط الاستعلام البطيء
  2. فكر في تقسيم الجداول للنمو
  3. راجع احتياجات الأجهزة
  4. حدّث HarborDB وPostgreSQL
  5. وثّق تحسينات الأداء

الحصول على المساعدة

دعم ضبط الأداء

إذا كنت بحاجة إلى مساعدة إضافية:

  1. شارك خطط الاستعلام مع فريق الدعم لدينا
  2. صدّر سجلات الأداء (التفضيلات → تصدير السجلات)
  3. أدرج مواصفات النظام (إصدار macOS، ذاكرة الوصول العشوائي، التخزين)
  4. صف سير العمل وأحجام مجموعات البيانات النموذجية

موارد إضافية

هل كان هذا مفيدًا؟

ساعدنا في تحسين هذا التوثيق من خلال تقديم ملاحظات.