it:postgres_user_group:cikkek:miert_ir_az_adatbazis_hogyha_olvas
Különbségek
A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalonElőző változatKövetkező változat | Előző változat | ||
it:postgres_user_group:cikkek:miert_ir_az_adatbazis_hogyha_olvas [2023/04/20 23:21] – [Ellenőrzőösszegek] rblst | it:postgres_user_group:cikkek:miert_ir_az_adatbazis_hogyha_olvas [2023/04/20 23:53] (aktuális) – [Konklúzió] rblst | ||
---|---|---|---|
Sor 1: | Sor 1: | ||
====== Miért ír az adatbázis, hogyha csak olvasunk belőle? ====== | ====== Miért ír az adatbázis, hogyha csak olvasunk belőle? ====== | ||
- | Első olvasatra | + | Első ránézésre |
===== Klienseket kiszolgáló folyamatok ===== | ===== Klienseket kiszolgáló folyamatok ===== | ||
Sor 12: | Sor 12: | ||
A klienseket kiszolgáló folyamatok (client backends) az általuk végzett olvasások végeztével statisztikát küldenek a '' | A klienseket kiszolgáló folyamatok (client backends) az általuk végzett olvasások végeztével statisztikát küldenek a '' | ||
- | Tehát a statisztikagyűjtés mindenképpen generál írási művelet, még akkor is, ha csak olvasunk az adatbázisból. | + | Tehát a statisztikagyűjtés mindenképpen generál írási művelet, még akkor is, ha csak olvasunk az adatbázisból. Ezt ugyan ki lehet kapcsolni, de nem érdemes, mert a statisztikák hiánya nagyban korlátozná a PostgreSQL képességeit. |
===== Hint bitek ===== | ===== Hint bitek ===== | ||
Az adatbázistáblák minden sorához tárolja a rendszer, hogy melyik tranzakció hozta létre, és melyik módosította az adott sort. Minden egyes sorhoz tárolódnak továbbá ún. hint bitek, amelyek azt jelzik, hogy az adott sort létrehozó vagy módosító tranzakció lezárult-e már committal vagy aborttal. Ez az információ ahhoz szükséges, | Az adatbázistáblák minden sorához tárolja a rendszer, hogy melyik tranzakció hozta létre, és melyik módosította az adott sort. Minden egyes sorhoz tárolódnak továbbá ún. hint bitek, amelyek azt jelzik, hogy az adott sort létrehozó vagy módosító tranzakció lezárult-e már committal vagy aborttal. Ez az információ ahhoz szükséges, | ||
- | Ha egy táblát módosító | + | Ha egy tranzakció véget ér, a tranzakció státusza (commit vagy abort) |
- | A hint bitek frissítése úgy történik, hogy egy módosított adatblokkokból történő első olvasás során a commit logban lévő információ beíródik | + | A hint bitek frissítése úgy történik, hogy egy módosított adatblokkokból történő első olvasás során a commit logban lévő információ beíródik |
Tehát ezúttal is azzal szembesülünk, | Tehát ezúttal is azzal szembesülünk, | ||
Sor 26: | Sor 26: | ||
Az esetleges adatkorrupció korai detektálása érdekében érdemes bekapcsolni azt a funkciót, hogy a PostgreSQL számítson ellenőrzőösszeget az egyes adatblokkokra (data checksums). A data checksums opció bekapcsolása viszont azzal is jár, hogy amikor egy checkpoint művelet után egy adatblokk először módosul, akkor beíródik a blokk teljes tartalma a WAL-ba (Write-Ahead Log, avagy tranzakciós napló, amely minden módosítást rögzít). | Az esetleges adatkorrupció korai detektálása érdekében érdemes bekapcsolni azt a funkciót, hogy a PostgreSQL számítson ellenőrzőösszeget az egyes adatblokkokra (data checksums). A data checksums opció bekapcsolása viszont azzal is jár, hogy amikor egy checkpoint művelet után egy adatblokk először módosul, akkor beíródik a blokk teljes tartalma a WAL-ba (Write-Ahead Log, avagy tranzakciós napló, amely minden módosítást rögzít). | ||
- | Ez a naplózás megtörténik akkor is, ha csak a hint bitek változtak meg a blokkban, vagyis időközben véget ért a blokkot módosító tranzakció, hiszen a bitek megváltozása miatt is változik a blokk ellenőrző-összege. | + | Ez a naplózás megtörténik akkor is, ha csak a hint bitek változtak meg a blokkban, hiszen a bitek megváltozása miatt is változik a blokk ellenőrzőösszege. Ez tehát azt jelenti, hogy minden olyan blokk első olvasása, amely a legutolsó checkpoint óta változott, WAL-fájlba írást fog eredményezni. |
- | Ez tehát azt jelenti, hogy minden olyan blokk első olvasása, amely a legutolsó checkpoint óta változott, WAL-ba írást fog eredményezni. Ez különösen | + | Különösen |
+ | |||
+ | ===== Konklúzió ===== | ||
+ | Remélem, a fenti példákkal sikerült rámutatni arra, hogy a PostgreSQL egy összetett rendszer, és a címben feltett kérdés nem is mindig érdektelen. Szívesen látunk kommentben további példákat arra, amikor az adatbázis ír is, pedig csak olvasunk belőle. | ||
it/postgres_user_group/cikkek/miert_ir_az_adatbazis_hogyha_olvas.1682032913.txt.gz · Utolsó módosítás: 2023/04/20 23:21 szerkesztette: rblst