
مرحبا يا هبر! أقدم إليكم ترجمة المقال الأصلي
"معيار PostgreSQL على FreeBSD و CentOS و Ubuntu Debian و openSUSE" بقلم مارتن كوفاتشيك. إنه يفحص اختبارات PostgreSQL 10.1 DBMS في البيئات القريبة من الظروف الحقيقية على أنظمة يونيكس المختلفة.
ترجمة
في هذا المنشور ، سأعرض نتائج اختبار PostgreSQL 10.1 التي تم إصدارها مؤخرًا. راجعت قاعدة البيانات على أنظمة التشغيل هذه (كل 64 بت):
- Ubuntu 16.04 ، kernel 4.10.0-38-generic
- openSUSE 42.3 ، kernel 4.4.87-25-default
- CentOS 7.4 ، kernel 3.10.0-693.2.2.el7.x86_64
- Debian 9.2 ، kernel 4.9.0-4-amd64
- فري 11.1
منهجية الاختبار
كان الهدف من الاختبار هو قياس أداء PostgreSQL في ظروف مشابهة لنشر الإنتاج (النموذجي):
- يتصل العملاء من خلال تجمع الاتصال للتأكد من عدم وجود إعادة اتصال دائمة بقاعدة البيانات (لم أستخدم تجمع الاتصال ، ولم أستخدم علامة -b pgbench بدلاً من ذلك)
- عملاء الاتصال عبر شبكة ، وليس عبر مأخذ يونيكس
- دليل بيانات PostgreSQL الموجود على مرآة RAID 1
لكل نظام تشغيل تم اختباره ، تم إنشاء قاعدة بيانات للتحكم بحجم ٧٤ غيغابايت:
pgbench -i -s 5000 pgbench
تتألف البنية التحتية للاختبار من خادمين مخصصين متصلين بشبكة بسرعة 1 جيجابت في الثانية:
- EX41-SSD: Intel i7-6700 ، 4 مراكز ، 8 سلاسل ، ذاكرة وصول عشوائي DDR4 سعة 32 جيجابايت ، تستخدم لإنشاء استعلامات SQL باستخدام pgbench
- PX121-SSD: Intel Xeon E5-1650 v3 و 6 مراكز و 12 مؤشرًا وذاكرة وصول عشوائي (RAM) DDR4 ECC بسعة 256 جيجابايت و 2 × 480 جيجا بايت SATA 6 جيجابايت / ثانية ومركز بيانات لسلسلة SSD يستخدم كملقم PostgreSQL
كنت مهتمًا بمجموعات الاختبار هذه:
- 32 جيجابايت للقراءة فقط : اختبار للقراءة فقط (عينات فقط دون تغيير البيانات) ، مجموعة البيانات لا تنسجم مع ذاكرة التخزين المؤقت لـ PostgreSQL
- 200 جيجابايت للقراءة فقط : اختبار للقراءة فقط ، يتم تخزين مجموعة البيانات في PostgreSQL مؤقتًا
- 32 غيغابايت من بروتوكول TCP-B : القراءة والكتابة ، لا تناسب مجموعة البيانات ذاكرة التخزين المؤقت لـ PostgreSQL
- TCP-B 200 GB : قراءة ، كتابة ، يتم تخزين مجموعة البيانات في PostgreSQL
إعداد pgbench
تم استخدام برنامج pgbench الإصدار 10.1 ، الذي يعمل على كمبيوتر FreeBSD 11.1 منفصل ، لإنشاء الحمل. يتألف البرنامج النصي للاختبار من ثلاثة أجزاء: فراغ + تدفئة ، واختبار للقراءة فقط ، واختبار للقراءة والكتابة. قبل كل اختبار للقراءة والكتابة ، تم مسح الجداول pgbench (تم استخدام علامة -v). أثناء الاختبار ، قمت تدريجياً بزيادة عدد العملاء الذين يصلون إلى قاعدة البيانات.
إعدادات خادم PostgreSQL
بالنسبة لتوزيعات Linux ، تم تثبيت PostgreSQL على نظام الملفات ext4 في إعداد RAID1 (برنامج RAID باستخدام mdraid) على جهازي SSD مع تعطيل
atime . في حالة FreeBSD ، تم استخدام نظام الملفات OpenZFS على جهازي SSD عند تكوين RAID1. تم إنشاء مجموعة بيانات ZFS مع بيانات PostgreSQL باستخدام المعلمات التالية:
zfs get recordsize,logbias,primarycache,atime,compression zroot/var/db/postgres NAME PROPERTY VALUE SOURCE zroot/var/db/postgres recordsize 8K local zroot/var/db/postgres logbias throughput local zroot/var/db/postgres primarycache all default zroot/var/db/postgres atime off inherited from zroot zroot/var/db/postgres compression lz4 local
كان تكوين خادم PostgreSQL هو نفسه على جميع أنظمة التشغيل باستثناء مسارات الملفات (يستخدم كل نظام تشغيل بنية الدليل الخاصة به). محتويات ملف
postgresql.conf (الإعدادات الأساسية) لمثيل 32 جيجابايت:
autovacuum = off default_statistics_target = 100 maintenance_work_mem = 1GB checkpoint_completion_target = 0.9 effective_cache_size = 24GB work_mem = 104MB wal_buffers = 16MB shared_buffers = 8GB max_connections = 300
محتويات ملف
postgresql.conf لمثيل 200 جيجابايت:
autovacuum = off default_statistics_target = 100 maintenance_work_mem = 2GB checkpoint_completion_target = 0.9 effective_cache_size = 144GB work_mem = 640MB wal_buffers = 16MB shared_buffers = 48GB max_connections = 300
التجارب المقارنة
لقد اختبرت PostgreSQL على خمسة أنظمة تشغيل مختلفة في وضعين - للقراءة فقط و TCP-B (للقراءة والكتابة) مع ملفي ذاكرة مختلفين. استغرق اختبار كل نظام تشغيل حوالي 30 ساعة (دون حساب الوقت اللازم لتكوين نظام التشغيل). تم حفظ نتائج كل المدى pgbench للتقييم في وقت لاحق.
النتائج - للقراءة فقط




النتائج - TCP-B




النتائج
أظهر الاختبار أن الفرق بين توزيعات جنو / لينكس المختلفة ليس مهمًا جدًا. كان OpenSUSE 42.3 هو أفضل نظام تشغيل في اختبار القراءة فقط ، في حين أن FreeBSD ركض بمعدل 40٪ بشكل أبطأ. لسوء الحظ ، لم أكن أعرف سبب هذا الأداء المتواضع FreeBSD.
تم الحصول على صورة أكثر واقعية لأداء PostgreSQL في اختبار القراءة والكتابة (TCP-B). من بين توزيعات جنو / لينكس ، كان Centos 7.4 الأسرع وديبيان 9.2 الأبطأ. لقد فوجئت بسرور بواسطة FreeBSD 11.1 ، الذي كان يعمل بأكثر من ضعف سرعة نظام Linux ، على الرغم من أن FreeBSD استخدم ZFS ، وهو نظام ملفات نسخ على الكتابة. لقد افترضت أن هذا الاختلاف ناجم عن تكلفة برنامج RAID في نظام Linux ، لذلك قمت بإجراء ثلاثة اختبارات TCP-B لـ 100 عميل متزامن ، وهذه المرة بدون برنامج RAID:
- FreeBSD 11.1 + UFS : 5623.86 TPS
- FreeBSD 11.1 + ZFS : 8331.85 TPS
- CentOS 7.4 + ext4 : 8987.65 TPS
تظهر النتائج عدم كفاءة Linux SW RAID (أو كفاءة ZFS RAID). أداء CentOS 7.4 بدون SW RAID أعلى بقليل من أداء FreeBSD 11.1 مع ZFS RAID (من أجل TCP-B و 100 عميل متزامن).