[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-27-ada-postgresql-nitaq-wasi-fahaaris-vacuum-tahsin-istillamat":3},{"article":4,"author":55},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":24,"related_articles":35},"d9000000-0000-0000-0000-000000000127","a0000000-0000-0000-0000-000000000095","Deep EVM #27: أداء PostgreSQL على نطاق واسع — الفهارس وVACUUM وتحسين الاستعلامات","deep-evm-27-ada-postgresql-nitaq-wasi-fahaaris-vacuum-tahsin-istillamat","تحسين أداء PostgreSQL للجداول الكبيرة: أنواع الفهارس، استراتيجيات VACUUM، تحسين الاستعلامات، وأخطاء الأداء الشائعة.","## الفهارس: الأساس\n\n### B-tree (الافتراضي)\nأفضل لمعظم الحالات: المساواة، النطاقات، الترتيب.\n\n```sql\nCREATE INDEX idx_articles_published_at ON articles(published_at DESC);\nCREATE INDEX idx_articles_locale_slug ON articles(locale, slug);\n```\n\n### GIN (للمصفوفات وJSONB)\n```sql\nCREATE INDEX idx_articles_tags ON articles USING gin(tags);\nCREATE INDEX idx_articles_metadata ON articles USING gin(metadata jsonb_path_ops);\n```\n\n### GiST (للجغرافيا والبحث النصي)\n```sql\nCREATE INDEX idx_locations_coords ON locations USING gist(coordinates);\n```\n\n### الفهارس الجزئية\n```sql\n-- فهرس فقط للمقالات المنشورة\nCREATE INDEX idx_published_articles ON articles(published_at)\n    WHERE published = true;\n```\n\n## VACUUM والصفوف الميتة\n\nPostgreSQL يستخدم MVCC — كل تحديث أو حذف يخلق صفاً ميتاً. VACUUM ينظف هذه الصفوف.\n\n```sql\n-- إعدادات autovacuum المُحسنة\nALTER TABLE articles SET (\n    autovacuum_vacuum_scale_factor = 0.01,    -- 1% بدلاً من 20%\n    autovacuum_analyze_scale_factor = 0.005,\n    autovacuum_vacuum_cost_delay = 2           -- أسرع\n);\n```\n\n## تحسين الاستعلامات\n\n### استخدم EXPLAIN ANALYZE\n```sql\nEXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT * FROM articles\nWHERE locale = 'ar' AND published = true\nORDER BY published_at DESC\nLIMIT 20;\n```\n\nابحث عن:\n- **Seq Scan** على جداول كبيرة — يحتاج فهرس\n- **Sort** — يحتاج فهرس مع ORDER BY\n- **Nested Loop** مع عدد كبير — قد يحتاج JOIN مختلف\n\n### تجنب SELECT *\n```sql\n-- سيء: يقرأ كل الأعمدة بما فيها content_md\nSELECT * FROM articles WHERE locale = 'ar';\n\n-- جيد: يقرأ فقط ما تحتاجه\nSELECT id, title, slug, excerpt, published_at\nFROM articles WHERE locale = 'ar';\n```\n\n## Connection Pooling مع PgBouncer\n\nPostgreSQL لديها حد اتصالات. PgBouncer يوفر تجميع اتصالات:\n\n```ini\n[databases]\nopensoft = host=localhost dbname=opensoft\n\n[pgbouncer]\npool_mode = transaction\nmax_client_conn = 1000\ndefault_pool_size = 50\n```\n\n## أخطاء الأداء الشائعة\n\n1. **فهارس زائدة** — كل فهرس يبطئ INSERT\u002FUPDATE\n2. **VACUUM معطل** — يسبب انتفاخ الجدول\n3. **استعلامات بدون LIMIT** — تُرجع ملايين الصفوف\n4. **تحويلات في WHERE** — تمنع استخدام الفهارس\n5. **اتصالات غير مغلقة** — تستنفد تجمع الاتصالات\n\n## الخلاصة\n\nأداء PostgreSQL على نطاق واسع يتطلب: الفهارس الصحيحة، VACUUM منتظم، تحسين الاستعلامات، وتجميع الاتصالات. قس أولاً بـ EXPLAIN ANALYZE، ثم حسّن.","\u003Ch2 id=\"\">الفهارس: الأساس\u003C\u002Fh2>\n\u003Ch3>B-tree (الافتراضي)\u003C\u002Fh3>\n\u003Cp>أفضل لمعظم الحالات: المساواة، النطاقات، الترتيب.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_articles_published_at ON articles(published_at DESC);\nCREATE INDEX idx_articles_locale_slug ON articles(locale, slug);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>GIN (للمصفوفات وJSONB)\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_articles_tags ON articles USING gin(tags);\nCREATE INDEX idx_articles_metadata ON articles USING gin(metadata jsonb_path_ops);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>GiST (للجغرافيا والبحث النصي)\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_locations_coords ON locations USING gist(coordinates);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>الفهارس الجزئية\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- فهرس فقط للمقالات المنشورة\nCREATE INDEX idx_published_articles ON articles(published_at)\n    WHERE published = true;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"vacuum\">VACUUM والصفوف الميتة\u003C\u002Fh2>\n\u003Cp>PostgreSQL يستخدم MVCC — كل تحديث أو حذف يخلق صفاً ميتاً. VACUUM ينظف هذه الصفوف.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- إعدادات autovacuum المُحسنة\nALTER TABLE articles SET (\n    autovacuum_vacuum_scale_factor = 0.01,    -- 1% بدلاً من 20%\n    autovacuum_analyze_scale_factor = 0.005,\n    autovacuum_vacuum_cost_delay = 2           -- أسرع\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"\">تحسين الاستعلامات\u003C\u002Fh2>\n\u003Ch3>استخدم EXPLAIN ANALYZE\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT * FROM articles\nWHERE locale = 'ar' AND published = true\nORDER BY published_at DESC\nLIMIT 20;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>ابحث عن:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Seq Scan\u003C\u002Fstrong> على جداول كبيرة — يحتاج فهرس\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Sort\u003C\u002Fstrong> — يحتاج فهرس مع ORDER BY\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Nested Loop\u003C\u002Fstrong> مع عدد كبير — قد يحتاج JOIN مختلف\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>تجنب SELECT *\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- سيء: يقرأ كل الأعمدة بما فيها content_md\nSELECT * FROM articles WHERE locale = 'ar';\n\n-- جيد: يقرأ فقط ما تحتاجه\nSELECT id, title, slug, excerpt, published_at\nFROM articles WHERE locale = 'ar';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"connection-pooling-pgbouncer\">Connection Pooling مع PgBouncer\u003C\u002Fh2>\n\u003Cp>PostgreSQL لديها حد اتصالات. PgBouncer يوفر تجميع اتصالات:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">[databases]\nopensoft = host=localhost dbname=opensoft\n\n[pgbouncer]\npool_mode = transaction\nmax_client_conn = 1000\ndefault_pool_size = 50\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"\">أخطاء الأداء الشائعة\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>فهارس زائدة\u003C\u002Fstrong> — كل فهرس يبطئ INSERT\u002FUPDATE\u003C\u002Fli>\n\u003Cli>\u003Cstrong>VACUUM معطل\u003C\u002Fstrong> — يسبب انتفاخ الجدول\u003C\u002Fli>\n\u003Cli>\u003Cstrong>استعلامات بدون LIMIT\u003C\u002Fstrong> — تُرجع ملايين الصفوف\u003C\u002Fli>\n\u003Cli>\u003Cstrong>تحويلات في WHERE\u003C\u002Fstrong> — تمنع استخدام الفهارس\u003C\u002Fli>\n\u003Cli>\u003Cstrong>اتصالات غير مغلقة\u003C\u002Fstrong> — تستنفد تجمع الاتصالات\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"\">الخلاصة\u003C\u002Fh2>\n\u003Cp>أداء PostgreSQL على نطاق واسع يتطلب: الفهارس الصحيحة، VACUUM منتظم، تحسين الاستعلامات، وتجميع الاتصالات. قس أولاً بـ EXPLAIN ANALYZE، ثم حسّن.\u003C\u002Fp>\n","ar","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:32.822797Z","أداء PostgreSQL على نطاق واسع — الفهارس وVACUUM وتحسين الاستعلامات","تحسين أداء PostgreSQL: الفهارس، VACUUM، تحسين الاستعلامات، PgBouncer، وأخطاء شائعة.","PostgreSQL أداء فهارس",null,"index, follow",[22,27,31],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000012","DevOps","devops","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000022","Performance","performance",{"id":32,"name":33,"slug":34,"created_at":26},"c0000000-0000-0000-0000-000000000005","PostgreSQL","postgresql",[36,43,49],{"id":37,"title":38,"slug":39,"excerpt":40,"locale":12,"category_name":41,"published_at":42},"d0000000-0000-0000-0000-000000000686","لماذا Bali تتحول إلى مركز تكنولوجيا التأثير في جنوب شرق آسيا 2026","limadha-bali-tatahawwal-markaz-tiknulujia-attathir-janub-sharq-asia-2026","تحتل Bali المرتبة 16 بين أنظمة الشركات الناشئة في جنوب شرق آسيا. مع تركيز متزايد لبناة Web3 وشركات AI المستدامة الناشئة وشركات تكنولوجيا السفر البيئي، تنحت الجزيرة مكانتها كعاصمة تكنولوجيا التأثير في المنطقة.","الهندسة","2026-03-28T10:44:50.120618Z",{"id":44,"title":45,"slug":46,"excerpt":47,"locale":12,"category_name":41,"published_at":48},"d0000000-0000-0000-0000-000000000685","فسيفساء حماية البيانات في ASEAN: قائمة امتثال للمطورين","fusayfisa-himayat-albayanat-asean-qaimat-imtithal-lilmutawwirin","تمتلك سبع دول في ASEAN الآن قوانين شاملة لحماية البيانات، لكل منها نماذج موافقة ومتطلبات توطين وهياكل عقوبات مختلفة. إليك قائمة امتثال عملية للمطورين الذين يبنون تطبيقات متعددة البلدان.","2026-03-28T10:44:50.114369Z",{"id":50,"title":51,"slug":52,"excerpt":53,"locale":12,"category_name":41,"published_at":54},"d0000000-0000-0000-0000-000000000684","التحول الرقمي في Indonesia بقيمة 29 مليار دولار: فرص لشركات البرمجيات","attahawwul-arraqami-indonesia-29-milyar-dular-furas-sharikat-albarmajiyat","من المتوقع أن يصل سوق خدمات تكنولوجيا المعلومات في Indonesia إلى 29.03 مليار دولار في 2026، ارتفاعاً من 24.37 مليار دولار في 2025. البنية التحتية السحابية والذكاء الاصطناعي والتجارة الإلكترونية ومراكز البيانات تقود أسرع نمو في جنوب شرق آسيا.","2026-03-28T10:44:50.092728Z",{"id":13,"name":56,"slug":57,"bio":58,"photo_url":19,"linkedin":19,"role":59,"created_at":60,"updated_at":60},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]