Hacker News

Tre hurtigbufferlag mellom Select og Disk

Tre hurtigbufferlag mellom Select og Disk Denne utforskningen går inn i tre, og undersøker dens betydning og potensielle innvirkning. — Mewayz Business OS.

7 min read

Mewayz Team

Editorial Team

Hacker News

Når applikasjonen din avfyrer en SELECT-setning, berører den spørringen nesten aldri en roterende disk eller til og med rå flash-lagring – den går gjennom tre distinkte hurtigbufferlag som stille bestemmer om svaret ditt kommer i løpet av mikrosekunder eller millisekunder. Å forstå disse lagene er forskjellen mellom en forretningsplattform som kan skaleres uanstrengt og en som spenner seg under virkelig belastning.

Hva skjer i det øyeblikket en SELECT-forespørsel forlater søknaden din?

I det øyeblikket applikasjonen din sender en SELECT-spørring, kommer den inn i en pipeline de fleste utviklere aldri inspiserer. Databasemotoren avskjærer forespørselen før noen I/O skjer, analyserer SQL-en til en intern utførelsesplan og konsulterer umiddelbart sin første forsvarslinje: spørringsresultatbufferen. Hvis en identisk spørring med identiske parametere nylig ble utført, kan motoren returnere et bufret resultatsett uten å berøre en enkelt side med data. Dette kalles noen ganger spørringsbufferen eller resultatbufferen, og på arbeidsbelastninger med høy lesing og lav skriving – som analyseinstrumentbord og rapporteringsmoduler – kan det eliminere det store flertallet av disklesninger helt.

Den kritiske innsikten her er at spørringsbufferen er svært følsom for datamutasjoner. Enhver INSERT, UPDATE eller DELETE mot den underliggende tabellen ugyldiggjør relevante hurtigbufrede resultater. Dette er grunnen til at skrivetunge transaksjonssystemer ofte deaktiverer spørringsbufferen helt og stoler på de dypere lagene i stedet.

Hva er bufferbassenget og hvorfor betyr det mer enn du tror?

Det andre hurtigbufferlaget - og uten tvil det viktigste i produksjonssystemer - er bufferpoolen (kalt den delte bufferen i PostgreSQL, InnoDB-bufferpoolen i MySQL). Dette er en region med RAM databasemotoren bruker til å holde nylig åpnede datasider. Når en spørring ikke kan betjenes fra resultatbufferen, kontrollerer motoren om de nødvendige datasidene allerede finnes i bufferbassenget før den utsteder disklesing.

Bufferbassenget opererer på prinsippet om tidsmessig og romlig lokalitet: data som er aksessert nylig, vil sannsynligvis bli aksessert igjen, og data som er lagret i nærheten av aksesserte data vil sannsynligvis bli aksessert snart. Databaseadministratorer justerer bufferbassengstørrelsen som en av konfigurasjonsbeslutningene de tar med høyest innflytelse. En bufferpool som er for liten forårsaker konstant sideutkastelse, og produserer et fenomen som kalles thrashing, der systemet bruker mer tid på å administrere cache-misser enn på å utføre spørringer.

Nøkkelinnsikt: I de fleste OLTP-arbeidsbelastninger betyr en bufferpool med god størrelse at 95–99 % av alle datalesinger blir servert fra RAM. Arbeidssettet – delsettet av dataene dine som spørringer faktisk berører ofte – er ofte langt mindre enn den totale databasestørrelsen. Å dimensjonere bufferbassenget slik at det passer til arbeidssettet ditt, ikke hele datasettet, er den eneste innstillingshandlingen med høyest avkastning du kan utføre.

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

Hvordan fyller operativsystemets cache gapet mellom RAM og disk?

Selv når databasens egen bufferpool mangler, er en spørring ennå ikke bestemt for en sann disklesing. Operativsystemet opprettholder en sidebuffer (også kalt filsystembuffer), en region med kjerneadministrert RAM som buffer lesing og skriving for å blokkere enheter. Når databasemotoren ber om en side som er fraværende fra bufferpoolen, sjekker OS-kjernen sin egen sidebuffer før den utsteder en fysisk I/O-kommando til lagringskontrolleren.

Dette tredje laget er stort sett usynlig for applikasjonsutviklere, men svært viktig på systemer der databasebufferbasen er underprovisionert. OS-sidebufferen deles på tvers av alle prosesser, så den konkurrerer med applikasjonsserveren, webserveren og all annen programvare som kjører på samme vert. På dedikerte databaseservere er denne konkurransen minimal, og OS-cachen gir en meningsfull andre-sjanse buffer. På delte verter eller beholdere med stramme minnebegrensninger er OS-bufferen ofte for liten til å hjelpe.

Hvilket bufferlag er ansvarlig for flest ytelsesgevinster i praksis?

I virkelige produksjonssystemer dominerer bufferpoolen ytelsen

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