بهتر کردن postgres با orioledb

یکی از بزرگترین مزایای Postgres بیش از بسیاری از DBMS های دیگر وجود دارد که این واقعیت وجود دارد که بدون نیاز به تعامل با پایگاه اصلی ، از طریق پسوندها ، به پیشرفت های خارجی یا ویژگی های جدید اجازه می دهد. پسوندهای زیادی با هدف منحصر به فرد وجود دارد (من همچنین دو پسوند بی اهمیت PG_WAL_EXT و PG_TABLE_BLOAT نوشتم)
یکی از پسوند هایی که به خصوص برجسته است ، OrioledB است. این یک موتور ذخیره سازی جایگزین برای Postgres فراهم می کند. Postgres فقط با یک موتور ذخیره سازی بر اساس پشته همراه است. این با MySQL متفاوت است که دارای چندین موتور ذخیره سازی است: InnoDB ، Myissam و غیره.
موتور ذخیره سازی مبتنی بر پشته در بیشتر موارد به خوبی کار می کند اما همچنین تعدادی از موارد را ارائه می دهد ، برخی از آنها عبارتند از: Bloat معرفی شده توسط نحوه رسیدگی به روزرسانی ها ، نیاز به جمع آوری زباله (خلاء) ، بسته بندی معامله
اوریولدب با قول حل مسائل ارائه شده توسط Postgres Heap همراه است. من آن را آزمایش کردم و نتایج بسیار خوب بود. فرآیندی را که استفاده کردم و نتایج زیر را شرح خواهم داد.
ابتدا به یک نسخه وصله دار Postgres نیاز دارید: 16 (برچسب: patches16_33) یا 17 (برچسب: patches17_5). مراحل در GitHub موجود است
این آزمون فقط برای بار کاری در 16 جدول با هر یک از 25 متر سوابق (تقریباً 94 گیگابایت برای هر تنظیم) است. من از سرور با رم 64 گیگابایتی ، 20cores و 500 گیگابایت NVME SSD (سیستم فایل EXT4) استفاده کردم. من از اسکریپت های راه اندازی خود برای ساخت و نصب Postgres استفاده می کنم. ابزار معیار مورد استفاده Sysbench است. orioledb مورد استفاده از منبع از تعهد اصلی شاخه ساخته شده است 0c484c4
بشر
مراحل نصب برای orioledb:
# Install dependencies
apt update
apt install python3 python3-dev python3-pip python3-setuptools python3-testresources libzstd1 libzstd-dev libssl-dev libcurl4-openssl-dev
git clone https://github.com/orioledb/orioledb
cd orioledb
git reset --hard 0c484c4 # optional
make USE_PGXS=1 ORIOLEDB_PATCHSET_VERSION=5
echo "shared_preload_libraries="orioledb.so"" >> /usr/local/pgsql/data/postgresql.conf
استخر بافر برای هر دو تنظیم روی 16 گیگابایت IE تنظیم شده است shared_buffers
برای پشته و orioledb.main_buffers
برای orioledb
برای اجرای تست های واقعی ، من از https://github.com/misachi/sysbench-graphing-tests استفاده کردم. هنگامی که همه چیز تنظیم شد ، در حال اجرا است ./run.threads
باید تست ها را اجرا کند. اسکریپت تضمین می کند که پایگاه داده قبل از اجرای تست ها گرم شود.
من برای هر مجموعه 2 رکورد انجام دادم: 2 اجرا از پس از پشته و 2 اجرا از پس از پس از آن با پسوند orioledb. نتایج همانطور که در زیر نشان داده شده است
با برچسب اجرا می شود out/res2
وت out/res3
نتایج را برای اجرای Postgres معمولی با موتور ذخیره سازی مبتنی بر پشته نشان دهید res4
وت res5
نتایج را برای postgres با orioledb نشان دهید.
بیت چشمگیر ، orioledb قادر است ضمن استفاده از منابع کمتری از CPU و حافظه ، از Peepgres Heap استفاده کند. این را می توان تا حدودی به صفحه بدون قفل Oioledb نسبت داد و از این رو باعث کاهش مشاجره شد.
استفاده از حافظه (MB) برای پشته های پس از
استفاده از CPU برای Heap Postgres
استفاده از حافظه (MB) برای orioledb
استفاده از CPU برای orioledb