”Det är paradoxalt, men ändå sant, att säga att ju mer vi vet, desto mer okunniga blir vi i absolut mening, för det är bara genom upplysning som vi blir medvetna om våra begränsningar. Exakt ett av de mest glädjande resultaten av intellektuell evolution är det ständiga öppnandet av nya och större framtidsutsikter.” Nikola Tesla
PostgreSQL är ett fantastiskt projekt och det utvecklas i en otrolig hastighet. Vi kommer att fokusera på utvecklingen av feltoleransfunktioner i PostgreSQL genom dess versioner med en serie blogginlägg.
PostgreSQL i ett nötskal
PostgreSQL är feltolerant till sin natur. För det första är det ett avancerat databashanteringssystem med öppen källkod och kommer att fira sin 20-årsdag i år. Därför är det en beprövad teknik och har en aktiv gemenskap, tack vare vilken den har en snabb utveckling.
PostgreSQL är SQL-kompatibelt (SQL:2011) och helt ACID-kompatibel (atomicitet, konsistens, isolering, hållbarhet).
PostgreSQL tillåter fysisk och logisk replikering och har inbyggda fysiska och logiska replikeringslösningar. Vi kommer att prata om replikeringsmetoder (i nästa blogginlägg) i PostgreSQL angående feltolerans.
PostgreSQL tillåter synkrona och asynkrona transaktioner, PITR (Point-in-time Recovery) och MVCC (Multiversion concurrency control). Alla dessa begrepp är relaterade till feltolerans på någon nivå och jag ska försöka förklara deras effekter samtidigt som jag förklarar nödvändiga termer och deras tillämpningar i PostgreSQL.
PostgreSQL är robust!
Alla åtgärder på databasen utförs inom transaktioner , skyddad av en transaktionslogg som kommer att utföra automatisk kraschåterställning i händelse av programvarufel.
Databaser kan valfritt skapas med kontrollsummor för datablock för att hjälpa till att diagnostisera hårdvarufel. Det finns flera säkerhetskopieringsmekanismer, med fullständig och detaljerad PITR, vid behov av detaljerad återställning. En mängd olika diagnostiska verktyg finns tillgängliga.
Databasreplikering stöds inbyggt. Synkron replikering kan ge mer än "5 nior" (99,999 procent) tillgänglighet och dataskydd, om de är korrekt konfigurerade och hanterade.
Med tanke på fakta ovan kan vi enkelt hävda att PostgreSQL är robust!
PostgreSQL-feltolerans:WAL
Write ahead-loggning är det huvudsakliga feltoleranssystemet för PostgreSQL.
WAL består av en serie binära filer skrivna till underkatalogen pg_xlog i PostgreSQL-datakatalogen. Varje ändring som görs i databasen registreras först i WAL, därav namnet "write-ahead"-logg, som en synonym till "transaktionslogg". När en transaktion genomförs är standard- och säkert beteende att tvinga WAL-posterna till disken.
Om PostgreSQL skulle krascha, kommer WAL att spelas upp igen, vilket returnerar databasen till punkten för den senaste genomförda transaktionen och därmed säkerställer varaktigheten för eventuella databasändringar.
Transaktion? Begå?
Databasändringar i sig skrivs inte till disken vid transaktionsbekräftelse. Dessa ändringar skrivs till disken någon gång senare av bakgrundsskrivaren eller kontrollpekaren på en välinställd server. (Kontrollera WAL-beskrivningen ovan. )
Transaktioner är ett grundläggande koncept för alla databassystem. Det väsentliga med en transaktion är att den kombinerar flera steg i en enda, allt-eller-inget-operation.
Mellantillstånden mellan stegen är inte synliga för andra samtidiga transaktioner, och om något fel inträffar som hindrar transaktionen från att slutföras, så påverkar inget av stegen databasen alls. PostgreSQL stöder inte dirty-reads (transaktionen läser data som skrivits av en samtidig icke-överlåten transaktion ).
Checkpoint
Kraschåterställning spelar upp WAL, men från vilken tidpunkt börjar den återhämta sig?
Återställning startar från punkter i WAL som kallas checkpoints . Varaktigheten av kraschåterställning beror på antalet ändringar i transaktionsloggen sedan den senaste kontrollpunkten. En kontrollpunkt är en känd säker utgångspunkt för återställning, eftersom den garanterar att alla tidigare ändringar i databasen redan har skrivits till disken.
En kontrollpunkt kan antingen vara omedelbar eller schemalagd . Omedelbara kontrollpunkter utlöses av någon åtgärd från en superanvändare, såsom CHECKPOINT
kommando eller annat; schemalagda kontrollpunkter bestäms automatiskt av PostgreSQL.
Slutsats
I det här blogginlägget listade vi viktiga funktioner i PostgreSQL som är relaterade till feltolerans i PostgreSQL. Vi nämnde förutskrivningsloggning, transaktioner, commit, isoleringsnivåer, checkpoints och kraschåterställning. Vi fortsätter med PostgreSQL-replikering vid nästa blogginlägg.
Referenser:
PostgreSQL-dokumentation
PostgreSQL 9 Administration Cookbook – Andra upplagan