Hacker News

Három gyorsítótár réteg a Select és a Disk között

Három gyorsítótár réteg a Select és a Disk között Ez a feltárás három részre bontakozik ki, megvizsgálva annak jelentőségét és lehetséges hatását. – Mewayz Business OS.

9 min read

Mewayz Team

Editorial Team

Hacker News

Amikor az alkalmazás elindít egy SELECT utasítást, ez a lekérdezés szinte soha nem érinti a forgó lemezt vagy akár a nyers flash tárolót – három különböző gyorsítótár-rétegen halad át, amelyek csendben meghatározzák, hogy a válasz mikroszekundumokban vagy ezredmásodpercekben érkezik-e. Ezeknek a rétegeknek a megértése jelenti a különbséget egy olyan üzleti platform között, amely könnyedén skálázható, és egy olyan üzleti platform között, amely a valós terhelés alatt meghajlik.

Mi történik abban a pillanatban, amikor egy SELECT lekérdezés elhagyja az alkalmazást?

Abban a pillanatban, amikor az alkalmazás elküldi a SELECT lekérdezést, egy olyan folyamatba kerül, amelyet a legtöbb fejlesztő soha nem vizsgál meg. Az adatbázismotor elfogja a kérést, mielőtt bármilyen I/O megtörténne, elemzi az SQL-t egy belső végrehajtási tervbe, és azonnal lekérdezi az első védelmi vonalat: a lekérdezés eredmény gyorsítótárát. Ha a közelmúltban egy azonos lekérdezést hajtottak végre azonos paraméterekkel, a motor úgy tudja visszaadni a gyorsítótárazott eredménykészletet, hogy egyetlen adatoldalt sem érint meg. Ezt néha lekérdezés-gyorsítótárnak vagy eredmény-gyorsítótárnak is nevezik, és magas olvasási és alacsony írási sebességű munkaterheléseknél – mint például az elemzési irányítópultok és a jelentéskészítő modulok – a lemezolvasások túlnyomó többségét teljesen kiküszöbölheti.

A kritikus betekintés az, hogy a lekérdezési gyorsítótár nagyon érzékeny az adatmutációkra. Bármilyen INSERT, UPDATE vagy DELETE az alapul szolgáló táblázatban érvényteleníti a releváns gyorsítótárban tárolt eredményeket. Ez az oka annak, hogy a nehéz írást igénylő tranzakciós rendszerek gyakran teljesen letiltják a lekérdezési gyorsítótárat, és inkább a mélyebb rétegekre hagyatkoznak.

Mi az a pufferkészlet, és miért fontosabb, mint gondolná?

A második gyorsítótárréteg – és vitathatatlanul a legfontosabb az éles rendszerekben – a pufferkészlet (amelyet a PostgreSQL-ben megosztott puffernek, a MySQL-ben pedig InnoDB pufferkészletnek neveznek). Ez a RAM egy olyan régiója, amelyet az adatbázis-motor a közelmúltban elért adatlapok tárolására használ. Ha egy lekérdezést nem lehet kiszolgálni az eredmény-gyorsítótárból, a motor ellenőrzi, hogy a szükséges adatlapok már a puffertárban vannak-e, mielőtt bármilyen lemezolvasást indítana.

A pufferkészlet az időbeli és térbeli lokalitás elvén működik: a közelmúltban elért adatok valószínűleg ismét elérhetőek lesznek, a hozzáfért adatok közelében tárolt adatok pedig hamarosan. Az adatbázis-adminisztrátorok úgy hangolják be a pufferkészlet méretét, mint az egyik legnagyobb tőkeáttételt igénylő konfigurációs döntést. A túl kicsi pufferkészlet állandó oldalkiürítést okoz, ami a thrashing nevű jelenséget idézi elő, ahol a rendszer több időt tölt a gyorsítótár hiányosságainak kezelésével, mint a lekérdezések végrehajtásával.

Kulcsfontosságú betekintés: A legtöbb OLTP-munkaterhelésben a jó méretű pufferkészlet azt jelenti, hogy az összes adatolvasás 95–99%-a RAM-ból történik. A munkakészlet – az adatok azon részhalmaza, amelyet a lekérdezések gyakran érintenek – gyakran sokkal kisebb, mint az adatbázis teljes mérete. A pufferkészlet méretezése a munkakészlethez, nem pedig a teljes adatkészlethez az egyetlen legnagyobb megtérülést hozó hangolási művelet.

💡 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 →

Hogyan tölti be az operációs rendszer gyorsítótára a RAM és a lemez közötti rést?

Még akkor is, ha az adatbázis saját pufferkészlete hiányzik, a lekérdezés még nem valós lemezolvasásra szolgál. Az operációs rendszer oldalgyorsítótárat (más néven fájlrendszer-gyorsítótárat) tart fenn, a kernel által felügyelt RAM egy olyan régióját, amely puffereli az olvasást és az írást a blokkoló eszközökhöz. Amikor az adatbázismotor olyan oldalt kér le, amely hiányzik a puffertárából, az operációs rendszer kernel ellenőrzi saját oldalgyorsítótárát, mielőtt fizikai I/O parancsot adna ki a tárolóvezérlőnek.

Ez a harmadik réteg nagyrészt láthatatlan az alkalmazásfejlesztők számára, de rendkívül fontos azokon a rendszereken, ahol az adatbázis-pufferkészlet alul van biztosítva. Az operációs rendszer oldalgyorsítótára az összes folyamat között meg van osztva, így versenyez az alkalmazáskiszolgálóval, a webszerverrel és az ugyanazon a gazdagépen futó bármely más szoftverrel. A dedikált adatbázis-kiszolgálókon ez a verseny minimális, és az operációs rendszer gyorsítótára jelentős második esély puffert biztosít. A megosztott gazdagépeken vagy szűk memóriakorlátokkal rendelkező tárolókon az operációs rendszer gyorsítótára gyakran túl kicsi ahhoz, hogy segítsen.

Melyik gyorsítótár-réteg felelős a gyakorlatban elért legnagyobb teljesítményért?

A valós termelési rendszerekben a pufferkészlet uralja a teljesítményt

Frequently Asked Questions

Does disabling the query cache always improve database performance?

Not always, but for write-heavy workloads it typically does. The query cache requires a global mutex to maintain consistency, which becomes a bottleneck under high concurrency. MySQL 8.0 removed the query cache entirely for this reason. PostgreSQL never implemented a built-in query cache, relying instead on the buffer pool and application-layer caching. If your read-to-write ratio is high and your queries are highly repetitive, a query cache can deliver real gains — otherwise, invest that tuning effort in the buffer pool.

How do I know if my buffer pool is sized correctly?

Monitor your buffer pool hit ratio: the percentage of page requests served from the pool versus those requiring a disk read. A hit ratio below 95% on an OLTP workload is a signal to increase pool size. In MySQL, query SHOW ENGINE INNODB STATUS and look at the buffer pool hit rate. In PostgreSQL, the pg_statio_user_tables view exposes heap blocks read from disk versus served from the buffer pool. Aim to keep your entire working set — not your full dataset — resident in RAM.

What is the relationship between cache layers and multi-tenant SaaS reliability?

In multi-tenant SaaS, cache layers prevent "noisy neighbor" problems where one tenant's heavy query load degrades performance for all other tenants. Tenant-aware application caching with TTL-based invalidation keeps per-tenant hot data in Redis, drastically reducing buffer pool pressure from large accounts. Database-level connection pooling combined with a warm buffer pool ensures that burst activity from any single account does not flush shared pages from cache and cause latency spikes across the platform.


Cache layers are not database trivia — they are the architectural foundation that separates platforms that stay fast at scale from those that require constant infrastructure firefighting. If you are building or running a business that needs a platform already optimized for these realities, explore Mewayz at app.mewayz.com — 207 modules, one coherent platform, built to perform reliably from your first user to your hundred-thousandth.

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