Hacker News

سه لایه کش بین انتخاب و دیسک

سه لایه کش بین انتخاب و دیسک این اکتشاف به سه مورد می پردازد و اهمیت و تأثیر بالقوه آن را بررسی می کند. مفاهیم اصلی پوشش داده شده است این محتوا بررسی می کند: اصول و نظریه های بنیادی تمرین...

1 min read Via frn.sh

Mewayz Team

Editorial Team

Hacker News

وقتی برنامه شما یک عبارت SELECT را اجرا می کند، آن پرس و جو تقریباً هرگز یک دیسک در حال چرخش یا حتی حافظه فلش خام را لمس نمی کند - از سه لایه کش مجزا عبور می کند که بی سر و صدا تعیین می کند که آیا پاسخ شما در میکروثانیه یا میلی ثانیه می رسد. درک این لایه‌ها تفاوت بین یک پلتفرم تجاری است که بدون زحمت مقیاس می‌شود و پلتفرمی که تحت بار دنیای واقعی کمانش می‌کند.

لحظه ای که یک کوئری SELECT از برنامه شما خارج می شود چه اتفاقی می افتد؟

از لحظه‌ای که برنامه شما یک درخواست SELECT ارسال می‌کند، وارد خط لوله‌ای می‌شود که اکثر توسعه‌دهندگان هرگز آن را بررسی نمی‌کنند. موتور پایگاه داده درخواست را قبل از وقوع هر ورودی/خروجی رهگیری می کند، SQL را در یک برنامه اجرایی داخلی تجزیه می کند و بلافاصله با اولین خط دفاعی خود مشورت می کند: کش نتیجه پرس و جو. اگر پرس و جوی یکسان با پارامترهای یکسان اخیراً اجرا شده باشد، موتور می‌تواند مجموعه نتایج ذخیره‌شده را بدون دست زدن به یک صفحه از داده‌ها برگرداند. گاهی اوقات به این حافظه پنهان پرس و جو یا حافظه نهان نتیجه می گویند، و در بارهای کاری با خواندن بالا و کم نوشتن - مانند داشبوردهای تجزیه و تحلیل و ماژول های گزارش - می تواند اکثر قریب به اتفاق خواندن دیسک را به طور کامل حذف کند.

بینش مهم در اینجا این است که حافظه پنهان کوئری به جهش داده ها بسیار حساس است. هرگونه INSERT، UPDATE، یا DELETE در جدول زیرین، نتایج ذخیره‌شده مربوطه را باطل می‌کند. به همین دلیل است که سیستم‌های تراکنش سنگین معمولاً کش پرس و جو را به طور کامل غیرفعال می‌کنند و به جای آن بر لایه‌های عمیق‌تر تکیه می‌کنند.

حوضچه بافر چیست و چرا بیشتر از آنچه فکر می کنید اهمیت دارد؟

دومین لایه کش – و مسلماً مهمترین آن در سیستم های تولید – حوضچه بافر است (به نام بافر اشتراکی در PostgreSQL، مخزن بافر InnoDB در MySQL). این منطقه ای از RAM است که موتور پایگاه داده برای نگهداری صفحات داده اخیراً دسترسی یافته استفاده می کند. هنگامی که یک پرس و جو از کش نتیجه ارائه نمی شود، موتور قبل از صدور هر دیسک خواندنی بررسی می کند که آیا صفحات داده های مورد نیاز قبلاً در مخزن بافر ساکن هستند یا خیر.

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

بینش کلیدی: در اکثر بارهای کاری OLTP، یک مخزن بافر با اندازه مناسب به این معنی است که 95 تا 99٪ از کل داده های خوانده شده از RAM ارائه می شود. مجموعه کاری - زیرمجموعه ای از داده های شما که پرس و جوها در واقع اغلب آنها را لمس می کنند - اغلب بسیار کوچکتر از اندازه کل پایگاه داده است. اندازه کردن مخزن بافر برای تناسب با مجموعه کاری شما، نه کل مجموعه داده شما، تنها اقدام تنظیمی با بالاترین بازدهی است که می توانید انجام دهید.

چگونه حافظه پنهان سیستم عامل شکاف بین RAM و دیسک را پر می کند؟

حتی زمانی که مخزن بافر پایگاه داده خود را از دست می دهد، یک پرس و جو هنوز برای خواندن دیسک واقعی تعیین نشده است. سیستم عامل یک حافظه پنهان صفحه (همچنین به نام حافظه پنهان سیستم فایل) نگهداری می‌کند، منطقه‌ای از RAM مدیریت‌شده توسط هسته که خواندن و نوشتن را بافر می‌کند تا دستگاه‌ها را مسدود کند. هنگامی که موتور پایگاه داده صفحه‌ای را درخواست می‌کند که در مخزن بافر خود وجود ندارد، هسته سیستم عامل قبل از صدور یک فرمان فیزیکی ورودی/خروجی به کنترل‌کننده ذخیره‌سازی، حافظه پنهان صفحه خود را بررسی می‌کند.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

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

کدام لایه کش مسئول بیشترین عملکرد در عمل است؟

در سیستم‌های تولید در دنیای واقعی، مخزن بافر بر نتایج عملکرد با حاشیه وسیعی تسلط دارد. در اینجا دلیل است که هر لایه به طور متفاوتی در موارد استفاده نقش دارد:

  • حافظه پنهان نتیجه پرس و جو: بالاترین مزیت در مجموعه داده‌های خواندنی و عمدتا ثابت - پرسش‌های گزارش‌دهی، داشبوردهای حافظه پنهان، نقاط پایانی محتوای عمومی. در جداول سنگین نوشتن بی فایده است.
  • پول بافر پایگاه داده: اسب کاری جهانی. هر سرور پایگاه داده تولیدی باید ابتدا در اینجا تنظیم شود. الگوهای دسترسی تصادفی و متوالی را به طور موثر مدیریت می کند.
  • حافظه پنهان صفحه سیستم عامل: هنگامی که حوضچه بافر کمتر از اندازه باشد یک شبکه ایمنی ارائه می کند. همچنین در اسکن‌های متوالی جداول بزرگ که در غیر این صورت صفحات داغ را از مخزن بافر خارج می‌کنند، کمک زیادی می‌کند.
  • حافظه پنهان کنترل‌کننده ذخیره‌سازی (لایه سخت‌افزار): لایه چهارم که اغلب نادیده گرفته می‌شود - SSD‌های NVMe و کنترل‌کننده‌های RAID حافظه‌های ذخیره‌سازی ذخیره‌سازی را با باتری یا خازن پشتیبان نگه می‌دارند. این کار از دوام محافظت می کند، بدون اینکه توان نوشتن را به قیمت تأخیر fsync به خطر بیندازد.
  • حافظه پنهان لایه برنامه (Redis، Memcached): کاملاً بالای پایگاه داده قرار می‌گیرد و نتایج جستجوی سریال یا اشیاء محاسبه‌شده را در حافظه پنهان ذخیره می‌کند تا به هیچ وجه به پایگاه داده نخورد - ایده‌آل برای پلتفرم‌های SaaS چند مستاجر که به هزاران کاربر همزمان سرویس می‌دهند.

چگونه پلتفرم‌های تجاری مدرن می‌توانند از معماری حافظه پنهان برای قابلیت اطمینان در مقیاس استفاده کنند؟

برای کسب‌وکارهایی که در بسیاری از ماژول‌های کاربردی - CRM، مدیریت پروژه، تجارت الکترونیک، تجزیه و تحلیل - فعالیت می‌کنند، معماری کش مستقیماً پاسخگویی پلت فرم را با رشد تیم‌ها تعیین می‌کند. پلتفرم های ساخته شده بر روی یک استراتژی کش لایه بندی شده می توانند بدون هزینه زیرساخت متناسب به ده ها هزار کاربر همزمان خدمات رسانی کنند. نکته کلیدی طراحی الگوهای دسترسی به داده‌ها است که به مرزهای حافظه پنهان نگاه می‌کنند: کوچک نگه داشتن داده‌های داغ و الگوهای دسترسی قابل پیش‌بینی، استفاده از کپی‌های خواندنی برای توزیع بار استخر بافر، و قرار دادن یک حافظه پنهان لایه برنامه مانند Redis در مقابل پایگاه داده برای نقاط پایانی که داده‌های یکسان را به طور همزمان به چندین کاربر ارائه می‌دهند.

Mewayz دقیقاً با این فلسفه ساخته شده است. با 207 ماژول کسب و کار یکپارچه که بیش از 138000 کاربر را تامین می کند، لایه داده پلتفرم به گونه ای طراحی شده است که اکثر قریب به اتفاق قرائت ها از حافظه پنهان ارائه می شود - زمان پاسخگویی سریع و هزینه های زیرساخت قابل پیش بینی است، خواه از طرح اولیه 19 دلار در ماه استفاده می کنید یا سطح حرفه ای 49 دلار در ماه.

سوالات متداول

آیا غیرفعال کردن کش کوئری همیشه عملکرد پایگاه داده را بهبود می بخشد؟

نه همیشه، اما برای بارهای کاری سنگین معمولاً انجام می شود. کش کوئری برای حفظ ثبات به یک mutex جهانی نیاز دارد که در صورت همزمانی بالا به یک گلوگاه تبدیل می شود. به همین دلیل MySQL 8.0 کش کوئری را به طور کامل حذف کرد. PostgreSQL هرگز یک کش کوئری داخلی را پیاده سازی نکرد و در عوض بر روی مخزن بافر و ذخیره لایه برنامه تکیه کرد. اگر نسبت خواندن به نوشتن شما بالا است و درخواست‌های شما بسیار تکراری هستند، یک حافظه پنهان پرس و جو می‌تواند دستاوردهای واقعی داشته باشد - در غیر این صورت، این تلاش تنظیم را در مخزن بافر سرمایه‌گذاری کنید.

چگونه می توانم بدانم که اندازه مخزن بافر من درست است؟

نسبت ضربه استخر بافر خود را کنترل کنید: درصد درخواست‌های صفحه ارائه شده از استخر در مقابل درخواست‌هایی که نیاز به خواندن دیسک دارند. نسبت ضربه زیر 95 درصد در بار کاری OLTP سیگنالی برای افزایش اندازه استخر است. در MySQL، Show ENGINE INNODB STATUS را پرس و جو کنید و به نرخ ضربه استخر بافر نگاه کنید. در PostgreSQL، نمای pg_statio_user_tables بلوک‌های پشته‌ای را که از دیسک خوانده می‌شوند در مقابل ارائه شده از مخزن بافر، نمایش می‌دهد. هدف این است که کل مجموعه کاری خود - نه مجموعه داده کامل شما - در RAM ثابت بماند.

رابطه بین لایه‌های کش و قابلیت اطمینان SaaS چند مستاجر چیست؟

در SaaS چند مستاجر، لایه‌های حافظه پنهان از مشکلات "همسایه پر سر و صدا" جلوگیری می‌کنند، جایی که بار درخواستی سنگین یک مستاجر، عملکرد همه مستاجران دیگر را کاهش می‌دهد. حافظه نهان برنامه کاربردی آگاه به مستاجر با عدم اعتبار مبتنی بر TTL، داده‌های داغ هر مستاجر را در Redis نگه می‌دارد و فشار استخر بافر از حساب‌های بزرگ را به شدت کاهش می‌دهد. ادغام اتصال در سطح پایگاه داده همراه با یک مخزن بافر گرم تضمین می‌کند که فعالیت‌های پشت سر هم از هر حساب منفرد، صفحات به اشتراک‌گذاشته‌شده را از حافظه پنهان پاک نمی‌کند و باعث افزایش تاخیر در سراسر پلتفرم نمی‌شود.


لایه های حافظه پنهان پایگاه داده چیزهای بی اهمیتی نیستند - آنها پایه و اساس معماری هستند که پلتفرم هایی را که در مقیاس سریع می مانند از آنهایی که به آتش نشانی مداوم زیرساخت نیاز دارند جدا می کند. اگر کسب‌وکاری می‌سازید یا راه‌اندازی می‌کنید که نیاز به پلتفرمی دارد که قبلاً برای این واقعیت‌ها بهینه‌سازی شده است، Mewayz را در app.mewayz.com کاوش کنید — 207 ماژول، یک پلت‌فرم منسجم، ساخته شده برای عملکرد قابل‌اطمینان از اولین کاربر تا صدهزارمین کاربر.

.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Related Guide

HR Management Guide →

Manage your team effectively: employee profiles, leave management, payroll, and performance reviews.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime