شهریار بیات
شهریار بیات
خواندن ۲ دقیقه·۳ ماه پیش

کش در دیتابیس mariadb

ما تو هومسا یه چالشی داشتیم برای افزایش ظرفیت کش دیتابیس ، این شد بهونه ای برای اینکه یه نگاهی به کش دیتابیس mariadb بندازیم و ببینیم چه نقطه قوت و ضعفی داره و چه قابلیت هایی رو بهمون ارائه میده.

کش دیتابیس توی MariaDB یکی از اون چیزهای مهمیه که اگه خوب تنظیمش کنی، سرعت و عملکرد دیتابیس رو حسابی بالا می‌بره. حالا فرض کن یه کوئری رو چند بار پشت سر هم اجرا می‌کنی. به جای اینکه هر بار از اول همه چی اجرا بشه، نتیجه رو توی کش ذخیره می‌کنه و سری بعد از همون استفاده می‌کنه. این کار باعث میشه سرور کمتر زیر بار بره و زمان پاسخ‌دهی هم سریع‌تر بشه.

کش دیتابیس دو تا بخش اصلی داره: یکی Query Cache و یکی دیگه هم Buffer Pool.

کوئری کش  (Query Cache) همونطور که از اسمش معلومه، نتایج کوئری‌ها رو ذخیره می‌کنه. یعنی اگه همون کوئری دوباره اجرا بشه، نتیجه از کش برمی‌گرده. اما نکته‌ای که وجود داره اینه که توی نسخه‌های جدیدتر MariaDB، این قابلیت کم کم حذف شده چون هماهنگ کردنش با تغییرات داده‌ها خیلی دردسر داشت.

قابلیت Buffer Pool همون جاییه که داده‌ها و صفحات رو توی RAM نگه می‌داره. وقتی یه رکورد رو می‌خونی، اگه قبلاً خونده شده باشه، به جای اینکه دوباره از دیسک بخونه، از اینجا برمی‌گردونه. اینطوری سرعت دسترسی به داده‌ها خیلی میره بالا.

حالا اگه بخوای مقایسه کنی، MySQL هم کش دیتابیس مشابهی داره، ولی توی نسخه‌های جدیدش مثل MariaDB، Query Cache رو حذف کردن. علتش هم اینه که مدیریت این کش توی سیستم‌های بزرگ سخت و پیچیده بود. در عوض، بیشتر تمرکزشون رو گذاشتن روی بهبود Buffer Pool و راهکارهای دیگه‌ای برای مدیریت کش.

دیتابیس PostgreSQL اما یه راه متفاوتی رو رفته. این دیتابیس اصولاً Query Cache نداره، ولی سیستم کشینگش خیلی بهینه‌تره. از یه چیزی به اسم Shared Buffers استفاده می‌کنه که داده‌ها رو توی حافظه نگه داره. در کل، PostgreSQL بیشتر رو بهینه‌سازی سیستم‌عامل و استفاده بهینه‌تر از حافظه تمرکز داره.

الگوریتم‌های کش، مثل LRU (Least Recently Used)، معمولاً تضمین می‌کنن که داده‌های قدیمی‌تر و کم‌استفاده‌تر از حافظه حذف بشن تا جا برای داده‌های جدیدتر و مهم‌تر باز بشه. اگه بخوای عملکرد کش رو بهتر کنی، می‌تونی اندازه Buffer Pool رو بیشتر کنی یا پارامترهای مرتبط با کش رو تنظیم کنی.

در نهایت، برای اینکه کش دیتابیس توی MariaDB بهتر کار کنه، باید به پارامترهایی مثل innodb_buffer_pool_size دقت کنی. این پارامتر تعیین می‌کنه که اندازه Buffer Pool چقدر باشه و افزایشش می‌تونه عملکرد دیتابیس رو بهبود بده. همچنین استفاده از ابزارهای مانیتورینگ برای مشاهده عملکرد کش و تنظیمات دقیق‌تر، خیلی کمک می‌کنه.




دیتابیسdatabasemariadbmysqldatabase optimization
شهریار بیات هستم برنامه نویس مهندس نرم افزار و مدیر فنی پلتفرم هومسا علاقه مند به تکنولوزی های روز و مباحث مرتبط به SRE و devops اینجا تجربیاتمو باهاتون به اشتراک میزارم
شاید از این پست‌ها خوشتان بیاید