Hacker News

Tre cachelag mellem Select og Disk

Tre cachelag mellem Select og Disk Denne udforskning dykker ned i tre og undersøger dens betydning og potentielle virkning. — Mewayz Business OS.

7 min læst

Mewayz Team

Editorial Team

Hacker News

Når din applikation affyrer en SELECT-sætning, rører den forespørgsel næsten aldrig en roterende disk eller endda rå flash-lager - den passerer gennem tre adskilte cachelag, der stille bestemmer, om dit svar ankommer i mikrosekunder eller millisekunder. At forstå disse lag er forskellen mellem en virksomhedsplatform, der kan skaleres ubesværet, og en, der spænder under belastning fra den virkelige verden.

Hvad sker der i det øjeblik, en SELECT-forespørgsel forlader din ansøgning?

I det øjeblik din applikation sender en SELECT-forespørgsel, kommer den ind i en pipeline, som de fleste udviklere aldrig inspicerer. Databasemotoren opsnapper anmodningen, før nogen I/O forekommer, parser SQL'en til en intern eksekveringsplan og konsulterer straks dens første forsvarslinje: forespørgselsresultatcachen. Hvis en identisk forespørgsel med identiske parametre blev udført for nylig, kan motoren returnere et cachelagret resultatsæt uden at røre en enkelt side med data. Dette kaldes nogle gange forespørgselscachen eller resultatcachen, og på arbejdsbelastninger med høj læsning og lav skrivning - som analytics-dashboards og rapporteringsmoduler - kan det eliminere langt størstedelen af ​​disklæsninger helt.

Den kritiske indsigt her er, at forespørgselscachen er meget følsom over for datamutationer. Enhver INSERT, UPDATE eller DELETE mod den underliggende tabel ugyldiggør relevante cachelagrede resultater. Dette er grunden til, at skrivetunge transaktionssystemer ofte deaktiverer forespørgselscachen helt og stoler på de dybere lag i stedet.

Hvad er bufferpuljen, og hvorfor betyder det mere, end du tror?

Det andet cachelag - og uden tvivl det vigtigste i produktionssystemer - er bufferpuljen (kaldet den delte buffer i PostgreSQL, InnoDB bufferpuljen i MySQL). Dette er et område af RAM, som databasemotoren bruger til at holde nyligt tilgåede datasider. Når en forespørgsel ikke kan betjenes fra resultatcachen, kontrollerer motoren, om de påkrævede datasider allerede er hjemmehørende i bufferpuljen, før den udsender nogen disklæsning.

Bufferpuljen fungerer efter princippet om tidsmæssig og rumlig lokalitet: data, der er tilgået for nylig, vil sandsynligvis blive tilgået igen, og data, der er lagret i nærheden af ​​tilgåede data, vil sandsynligvis snart blive tilgået. Databaseadministratorer justerer bufferpuljens størrelse som en af ​​de konfigurationsbeslutninger, som de træffer med højeste gearing. En bufferpulje, der er for lille, forårsager konstant sideudsættelse, hvilket producerer et fænomen kaldet thrashing, hvor systemet bruger mere tid på at administrere cache-misser end på at udføre forespørgsler.

Nøgleindsigt: I de fleste OLTP-arbejdsbelastninger betyder en bufferpulje af en god størrelse, at 95-99 % af alle datalæsninger serveres fra RAM. Arbejdssættet - den delmængde af dine data, som forespørgsler faktisk berører ofte - er ofte langt mindre end den samlede databasestørrelse. At tilpasse din bufferpulje, så den passer til dit arbejdssæt, ikke hele dit datasæt, er den eneste tuning-handling, du kan foretage med det højeste afkast.

💡 VIDSTE DU?

Mewayz erstatter 8+ forretningsværktøjer i én platform

CRM · Fakturering · HR · Projekter · Booking · eCommerce · POS · Analyser. Gratis plan for altid tilgængelig.

Start gratis →

Hvordan udfylder operativsystemets cache hullet mellem RAM og disk?

Selv når databasens egen bufferpulje mangler, er en forespørgsel endnu ikke bestemt til en ægte disklæsning. Operativsystemet vedligeholder en sidecache (også kaldet filsystemcachen), en region med kernestyret RAM, der buffer læsning og skrivning til blokenheder. Når databasemotoren anmoder om en side, der er fraværende fra dens bufferpulje, kontrollerer OS-kernen sin egen sidecache, før den udsteder en fysisk I/O-kommando til lagercontrolleren.

Dette tredje lag er stort set usynligt for applikationsudviklere, men dybt vigtigt på systemer, hvor databasebufferpuljen er underprovisioneret. OS-sidecachen deles på tværs af alle processer, så den konkurrerer med din applikationsserver, webserver og enhver anden software, der kører på den samme vært. På dedikerede databaseservere er denne konkurrence minimal, og OS-cachen giver en meningsfuld anden-chance buffer. På delte værter eller containere med stramme hukommelsesgrænser er OS-cachen ofte for lille til at hjælpe.

Hvilket cachelag er ansvarligt for de fleste præstationsgevinster i praksis?

I virkelige produktionssystemer dominerer bufferpuljen ydeevnen

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.

Prøv Mewayz Gratis

Alt-i-ét platform til CRM, fakturering, projekter, HR & mere. Ingen kreditkort kræves.

Relateret vejledning

HR-ledelsesvejledning →

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

Begynd at administrere din virksomhed smartere i dag.

Tilslut dig 30,000+ virksomheder. Gratis plan for altid · Ingen kreditkort nødvendig.

Fandt du dette nyttigt? Del det.

Klar til at sætte dette i praksis?

Tilslut dig 30,000+ virksomheder, der bruger Mewayz. Gratis plan for evigt — ingen kreditkort nødvendig.

Start gratis prøveperiode →

Klar til at handle?

Start din gratis Mewayz prøveperiode i dag

Alt-i-ét forretningsplatform. Ingen kreditkort nødvendig.

Start gratis →

14 dages gratis prøveperiode · Ingen kreditkort · Annuller når som helst