إصدار Postgres 18 قادم خلال أسابيع قليلة فقط! إليك أهم وأبرز المميزات الجديدة فيه

الإدخال/الإخراج غير المتزامن (Asynchronous I/O)

يضيف Postgres 18 دعمًا للإدخال/الإخراج غير المتزامن، مما يعني قراءات أسرع في العديد من حالات الاستخدام. هذه الميزة جزء من سلسلة تحسينات كبيرة في الأداء قادمة في الإصدارات المستقبلية، قد تشمل المعالجة متعددة الخيوط (multi-threading).

ما هو الإدخال/الإخراج غير المتزامن؟
عندما لا تكون البيانات موجودة مسبقًا في الذاكرة المشتركة (shared buffers)، يقرأ Postgres من القرص. الإدخال/الإخراج المتزامن يعني أن كل طلب قراءة من القرص ينتظر حتى يكتمل قبل الانتقال لشيء آخر. في قواعد البيانات المزدحمة، هذا قد يكون عنق زجاجة.

الإدخال/الإخراج غير المتزامن في Postgres 18 سيسمح للعمّال باستغلال أوقات الخمول وتحسين الأداء عبر تجميع القراءات (batching). حاليًا يعتمد Postgres على نظام التشغيل لمعالجة الإدخال/الإخراج الذكي، مثل read-ahead أو posix_fadvise. لكن مع الإدخال/الإخراج غير المتزامن داخل قاعدة البيانات نفسها، سيكون الأداء أكثر استقرارًا.

ستتوفر أيضًا واجهة جديدة pg_aios لعرض بيانات عن النظام الجديد.
مع ذلك، عمليات الكتابة ستظل متزامنة حفاظًا على معايير ACID.

تشبيه مبسط:

  • المتزامن: تقف عند الكاشير منتظرًا طلبك حتى يجهز.

  • غير المتزامن: تطلب الطعام، تأخذ جهاز مناداة، وتجلس مع أصدقائك حتى يصدر تنبيه بأن الطلب جاهز.

سيؤثر الإدخال/الإخراج غير المتزامن على:

  • عمليات sequential scans

  • عمليات bitmap heap scans

  • بعض المهام مثل VACUUM

الإعداد الافتراضي سيكون io_method = worker بعدد 3 عمّال، ويمكن زيادته.
على أنظمة Linux 5.1+ يمكن استخدام io_uring بدلًا من العمليات المنفصلة.


UUID v7

الـ UUIDs تحصل على تحديث بالانتقال إلى الإصدار 7.
الـ UUID (معرّف عالمي فريد) هو سلسلة عشوائية فريدة تُستخدم غالبًا كمفتاح أساسي.

أهم المزايا:

  • فريد: يمكن توليده من أكثر من مكان.

  • غير مرتبط بقاعدة البيانات مباشرة: يمكن لتطبيقك إنشاء المفتاح الأساسي قبل إدخال البيانات.

  • صعوبة تخمين الروابط: أصعب بكثير من المفاتيح الرقمية البسيطة.

المشكلة في UUID v4 كانت ضعف الأداء مع الفهارس (indexes) الكبيرة بسبب العشوائية الكاملة. الإصدار v7 يحل المشكلة بجعل أول 48 بت تمثل طابعًا زمنيًا (timestamp)، والباقي عشوائي. هذا يحسّن من الأداء والفهرسة لأنه يحقق “locality” أفضل للبيانات المدخلة في نفس الفترة الزمنية.


B-tree Skip Scans

في Postgres 18، أصبح بالإمكان الاستفادة من الفهارس المركبة (multi-column indexes) بشكل أكبر.

في الإصدارات السابقة، لو كان لدينا فهرس على (status, date) فلا يمكن استخدامه إذا كانت الاستعلامات تستخدم date فقط. النتيجة: فحص تسلسلي كامل (sequential scan).

في Postgres 18، باستخدام skip scan يمكن لمحرك الاستعلامات استخدام نفس الفهرس، حتى لو لم يُستخدم العمود الأول (status) في الشرط. هذا يعطي أداء أفضل خاصة عند وجود أعمدة ذات عدد محدود من القيم المميزة (low cardinality).


الأعمدة المولّدة الافتراضية (Virtual Generated Columns)

سابقًا، الأعمدة المولّدة (generated columns) كانت تُخزن على القرص. الآن في Postgres 18، أصبحت افتراضية بشكل افتراضي، أي يتم حسابها عند الاستعلام دون تخزين.

مثال:

التعليقات مغلقة.