مقارنة PostgreSQL مع FreeBSD و CentOS و Ubuntu Debian و openSUSE

صورة مرحبا يا هبر! أقدم إليكم ترجمة المقال الأصلي "معيار 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). أثناء الاختبار ، قمت تدريجياً بزيادة عدد العملاء الذين يصلون إلى قاعدة البيانات.

 #!/bin/sh THREADS=8 DURATION=1800 PGIP=192.168.1.120 # warmup pgbench -h ${PGIP} -U pgbench -j ${THREADS} -c 10 -T ${DURATION} -S -v pgbench for clients in 1 10 20 30 40 50 60 70 80 90 100 110 120 do echo "RO ${clients}" pgbench -h ${PGIP} -U pgbench -j ${THREADS} -c ${clients} -T ${DURATION} -S pgbench > pgbench_ro_${clients}.log done for clients in 1 10 20 30 40 50 60 70 80 90 100 110 120 do echo "RW ${clients}" pgbench -h ${PGIP} -U pgbench -j ${THREADS} -c ${clients} -T ${DURATION} -v pgbench > pgbench_rw_${clients}.log done 

إعدادات خادم 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 عميل متزامن).

Source: https://habr.com/ru/post/ar458156/


All Articles