Hacker News

Tri sloja predmemorije između odabira i diska

Tri sloja predmemorije između odabira i diska Ovo istraživanje zadire u tri, ispitujući njihov značaj i potencijalni utjecaj. Pokriveni temeljni koncepti Ovaj sadržaj istražuje: Temeljna načela i teorije Praktično...

9 min read Via frn.sh

Mewayz Team

Editorial Team

Hacker News

Kada vaša aplikacija aktivira naredbu SELECT, taj upit gotovo nikada ne dodiruje rotirajući disk ili čak neobrađenu flash memoriju — prolazi kroz tri različita sloja predmemorije koji tiho određuju hoće li vaš odgovor stići u mikrosekundama ili milisekundama. Razumijevanje ovih slojeva razlika je između poslovne platforme koja se skalira bez napora i one koja se savija pod opterećenjem u stvarnom svijetu.

Što se događa u trenutku kada SELECT upit napusti vašu aplikaciju?

U trenutku kada vaša aplikacija pošalje upit SELECT, ona ulazi u cjevovod koji većina programera nikad ne pregleda. Motor baze podataka presreće zahtjev prije bilo kakvog I/O-a, analizirajući SQL u interni plan izvršenja i odmah pregledavajući svoju prvu liniju obrane: predmemoriju rezultata upita. Ako je nedavno izvršen identičan upit s identičnim parametrima, mehanizam može vratiti predmemorirani skup rezultata bez dodirivanja ijedne stranice podataka. To se ponekad naziva predmemorija upita ili predmemorija rezultata, a na radnim opterećenjima s velikim brojem čitanja i malim zapisom — poput analitičkih nadzornih ploča i modula za izvješćivanje — može u potpunosti eliminirati veliku većinu čitanja diska.

Kritični uvid ovdje je da je predmemorija upita vrlo osjetljiva na mutacije podataka. Svaki INSERT, UPDATE ili DELETE u odnosu na temeljnu tablicu poništava relevantne predmemorirane rezultate. To je razlog zašto transakcijski sustavi s velikim brojem pisanja često u potpunosti onemogućuju predmemoriju upita i umjesto toga se oslanjaju na dublje slojeve.

Što je međuspremnik i zašto je važniji nego što mislite?

Drugi sloj predmemorije — i nedvojbeno najvažniji u proizvodnim sustavima — je međuspremnik (koji se naziva zajednički međuspremnik u PostgreSQL-u, InnoDB skup međuspremnika u MySQL-u). Ovo je područje RAM-a koje motor baze podataka koristi za držanje nedavno pristupanih stranica s podacima. Kada se upit ne može poslužiti iz predmemorije rezultata, mehanizam provjerava jesu li potrebne stranice s podacima već prisutne u međuspremniku prije izdavanja bilo kakvog čitanja diska.

Međuspremnik radi na principu vremenske i prostorne lokalnosti: podacima kojima se nedavno pristupilo vjerojatno će se ponovno pristupiti, a podacima pohranjenim u blizini pristupanih podataka vjerojatno će se uskoro pristupiti. Administratori baza podataka prilagođavaju veličinu skupa međuspremnika kao jednu od najvažnijih konfiguracijskih odluka koje donose. Spremnik međuspremnika koji je premalen uzrokuje stalno izbacivanje stranice, stvarajući fenomen koji se naziva razbijanje, gdje sustav troši više vremena na upravljanje promašajima predmemorije nego na izvršavanje upita.

Ključni uvid: U većini OLTP radnih opterećenja, međuspremnik dobre veličine znači da se 95–99% svih podataka čitanja poslužuje iz RAM-a. Radni skup — podskup vaših podataka koje upiti zapravo često dodiruju — često je daleko manji od ukupne veličine baze podataka. Dimenzioniranje skupa međuspremnika tako da odgovara vašem radnom skupu, a ne cijelom skupu podataka, jedina je radnja podešavanja s najvećim povratom koju možete poduzeti.

Kako predmemorija operativnog sustava popunjava prazninu između RAM-a i diska?

Čak i kada vlastiti međuspremnik baze podataka nedostaje, upit još nije predodređen za pravo čitanje diska. Operativni sustav održava predmemoriju stranica (također zvanu predmemorija datotečnog sustava), područje RAM-a kojim upravlja kernel koji sprema čitanje i pisanje na blok uređaje. Kada mehanizam baze podataka zatraži stranicu koja je odsutna iz njegovog spremišta međuspremnika, OS kernel provjerava vlastitu predmemoriju stranice prije izdavanja fizičke I/O naredbe kontroleru pohrane.

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

Ovaj treći sloj uglavnom je nevidljiv programerima aplikacija, ali je izuzetno važan na sustavima gdje je međuspremnik baze podataka premalo osiguran. Predmemorija stranice OS-a dijeli se na sve procese, tako da se natječe s vašim aplikacijskim poslužiteljem, web poslužiteljem i bilo kojim drugim softverom koji radi na istom hostu. Na namjenskim poslužiteljima baza podataka ovo je natjecanje minimalno, a predmemorija OS-a pruža značajan međuspremnik za drugu priliku. Na dijeljenim hostovima ili spremnicima s uskim memorijskim ograničenjima, predmemorija OS-a često je premalena da bi pomogla.

Koji je sloj predmemorije odgovoran za najviše uspjeha u izvedbi u praksi?

U proizvodnim sustavima u stvarnom svijetu, skup međuspremnika u velikoj mjeri dominira rezultatima izvedbe. Evo zašto svaki sloj različito doprinosi različitim slučajevima upotrebe:

  • Predmemorija rezultata upita: Najveća prednost na čitanju, uglavnom statičnim skupovima podataka — izvješćivanje upita, predmemorirane nadzorne ploče, krajnje točke javnog sadržaja. Beskoristan na tablicama s velikim brojem pisama.
  • Međuspremnik baze podataka: Univerzalni radni konj. Ovdje bi se prvo trebao podesiti svaki proizvodni poslužitelj baze podataka. Učinkovito obrađuje nasumične i sekvencijalne obrasce pristupa.
  • Predmemorija OS stranice: Pruža sigurnosnu mrežu kada je međuspremnik premalen. Također značajno pomaže tijekom sekvencijalnih skeniranja velikih tablica koje bi inače izbacile vruće stranice iz međuspremnika.
  • Predmemorija kontrolera pohrane (sloj hardvera): Četvrti, često zanemaren sloj — NVMe SSD-ovi i RAID kontroleri održavaju ugrađene predmemorije pisanja pomoću baterije ili kondenzatora. To štiti trajnost bez žrtvovanja protoka pisanja nauštrb latencije fsync.
  • Predmemorija aplikacijskog sloja (Redis, Memcached): nalazi se u cijelosti iznad baze podataka, sprema u predmemoriju serijalizirane rezultate upita ili izračunate objekte kako bi se uopće izbjeglo dodirivanje baze podataka — idealno za SaaS platforme s više zakupaca koje opslužuju tisuće istovremenih korisnika.

Kako moderne poslovne platforme mogu iskoristiti arhitekturu predmemorije za pouzdanost na velikom broju?

Za tvrtke koje rade preko mnogih funkcionalnih modula — CRM, upravljanje projektima, e-trgovina, analitika — arhitektura predmemorije izravno određuje odziv platforme kako timovi rastu. Platforme izgrađene na dobro slojevitoj strategiji predmemorije mogu opsluživati ​​desetke tisuća istodobnih korisnika bez proporcionalnih troškova infrastrukture. Ključ je u dizajniranju obrazaca pristupa podacima koji poštuju granice predmemorije: zadržavanje malih vrućih podataka i predvidljivosti obrazaca pristupa, korištenje replika za čitanje za raspodjelu opterećenja skupa međuspremnika i pozicioniranje predmemorije sloja aplikacije kao što je Redis ispred baze podataka za krajnje točke koje služe identičnim podacima većem broju korisnika istovremeno.

Mewayz je projektiran s upravo ovom filozofijom na umu. S 207 integriranih poslovnih modula koji napajaju više od 138.000 korisnika, podatkovni sloj platforme dizajniran je tako da se velika većina čitanja poslužuje iz predmemorije — održavajući brzo vrijeme odziva i predvidljive troškove infrastrukture bez obzira koristite li početni plan od 19 USD mjesečno ili profesionalni nivo od 49 USD mjesečno.

Često postavljana pitanja

Poboljšava li onemogućavanje predmemorije upita uvijek izvedbu baze podataka?

Ne uvijek, ali za velika opterećenja pisanja obično jest. Predmemorija upita zahtijeva globalni mutex za održavanje dosljednosti, što postaje usko grlo pod visokom konkurentnošću. MySQL 8.0 je u potpunosti uklonio predmemoriju upita iz tog razloga. PostgreSQL nikada nije implementirao ugrađenu predmemoriju upita, oslanjajući se umjesto toga na međuspremnik i predmemoriju sloja aplikacije. Ako je vaš omjer čitanja i pisanja visok i vaši se upiti jako ponavljaju, predmemorija upita može donijeti stvarne dobitke - u suprotnom, uložite taj trud u podešavanje u međuspremnik.

Kako mogu znati je li moj skup međuspremnika ispravne veličine?

Pratite omjer pogodaka svojeg skupa međuspremnika: postotak zahtjeva stranica posluženih iz skupa u odnosu na one koji zahtijevaju čitanje diska. Omjer pogodaka ispod 95% na OLTP radnom opterećenju signal je za povećanje veličine skupa. U MySQL-u postavite upit SHOW ENGINE INNODB STATUS i pogledajte stopu pogodaka međuspremnika. U PostgreSQL-u, pogled pg_statio_user_tables izlaže blokove gomile koji se čitaju s diska naspram onih koji se poslužuju iz skupa međuspremnika. Nastojte zadržati svoj cijeli radni skup - ne cijeli skup podataka - rezidentnim u RAM-u.

Kakav je odnos između slojeva predmemorije i pouzdanosti SaaS-a za više zakupaca?

U SaaS-u s više zakupaca, slojevi predmemorije sprječavaju probleme "bučnog susjeda" gdje veliko opterećenje upita jednog zakupca smanjuje performanse za sve ostale zakupce. Predmemoriranje aplikacije svjesno zakupca s poništavanjem temeljenim na TTL-u čuva vruće podatke po zakupcu u Redisu, drastično smanjujući pritisak na međuspremnik velikih računa. Udruživanje veza na razini baze podataka u kombinaciji s toplim međuspremnikom osigurava da burst aktivnosti s bilo kojeg pojedinačnog računa ne brišu dijeljene stranice iz predmemorije i uzrokuju skokove latencije na cijeloj platformi.


Slojevi predmemorije nisu trivijalnost baze podataka — oni su arhitektonski temelj koji odvaja platforme koje ostaju brze na skali od onih koje zahtijevaju stalno gašenje požara infrastrukture. Ako gradite ili vodite tvrtku kojoj je potrebna platforma koja je već optimizirana za ove stvarnosti, istražite Mewayz na app.mewayz.com — 207 modula, jedna koherentna platforma, izgrađena da radi pouzdano od vašeg prvog korisnika do stotisućitog.

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