From b56820b67d4e0435d01ff37462615f80bced31c6 Mon Sep 17 00:00:00 2001 From: Balazs Toldi Date: Thu, 7 Jan 2021 12:53:05 +0100 Subject: [PATCH] Added last few chapters (100.00% done) --- db.org | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) diff --git a/db.org b/db.org index 1a91235..1a95308 100644 --- a/db.org +++ b/db.org @@ -6,6 +6,7 @@ #+LATEX_HEADER: \usepackage{authblk} #+LATEX_HEADER: \usepackage{blindtext} #+LaTeX_HEADER: \setcounter{secnumdepth}{5} +#+LaTeX_HEADER: \usepackage{tikz} * Adat, információ, tudás. Metaadatok. Strukturált, szemi-strukturált és nem strukturált adatok ** Adat @@ -1320,5 +1321,177 @@ kerül. Ha a redo helyreállítás elszáll, akkor egyszerűen megismételendő, hiszen a 4. pontban végzett műveletek hatása az adatbázisra idempotens (idempotent). +* Ellenőrzési pontok +A redo helyreállításnál előfordulhat, hogy túl régi időpontra kell visszamennie +ahhoz, hogy a helyreállításhoz megfelelő időpontot találjunk. Ezen a problémán segítenek az ellenőrzési pontok, amikor kikény- +szerítik az adatbázisnak egy konzisztens állapotát: + +1. ideiglenesen megtiltjuk az új tranzakciók indítását és megvárjuk, amíg minden + tranzakció befejeződik vagy abortál +2. Megkeressük azokat a memóriablokkokat, amelyek módosultak, de még nem + kerültek a háttértárba +3. Ezeket a blokkokat visszaírjuk +4. naplózzuk az ellenőrzisi pontot +5. A naplót is kiírjuk a háttértárra + +** Előnyök +- redo helyreállításnál, csak a legutóbbi ellenőrzési pontig kell visszamenni a naplóban +- a napló korábbi részei eldobhatóak (ha más miatt sem kell) +- csökkenti a lavinák számát +** Hátrányok +- csökkenti a tranzakciós teljesítményt +** Ütemezése +- adott idő eltelte után +- adott számú tranzakció után +- az előző kettő kombinációja +* Időbélyeges tranzakciókezelés R/W modellben +** Időbélyeg +Olyan érték, amelyet minden tranzakcióhoz szigorú egyediséget biztosítva +rendelünk hozzá, és amely arányos (legegyszerűbb esetben azonos) a tranzakció +kezdőidejével. Jele: $t(\text{Tranzaakció})$ +Ezzel a módszer egy soros ekvivalens ütemezést valósíthatunk meg. Ehhez az +időbélyegek egyértelmű sorrendjét határozzuk meg, az egyes tranzakciókat +pontszerűnek vesszük, azaz nem vesszük figyelembe az adott tranzakció időigényét. + +Az időbélyeges ütemező működése: +1. megvizsgálja minden írás-olvasás előtt a hivatkozott adategység időbélyegét, +2. ha ez a sorosítási szabályokkal összhangban van (ld. később), akkor az + adategység időbélyegét felülírja a műveletet végrehajtó tranzakció + időbélyegével,ha nincs összhangban, akkor pedig abortálja a tranzakciót. + +Időbélyegek kiosztása során az egyértelműség kritikus: +- Egyprocesszoros rendszer: processzor időbélyege +- Többprocesszoros rendszer: az processzor vagy csomópont azonosítója is + hozzáveendő. + +** R/W modell +Két féle időbélyeget különböztet meg a modell: +- $R(A)$: olvasási időbélyeg +- $W(A)$: írási időbélyeg + +*** Négy lehetséges eset +Legyen $T$ egy vizsgálandó tranzakció és $t(T)$ a $T$ tranzakció időbélyege, +illetve $A$ adategység, $R(A)$ olvasási- és $W(A)$ írási-időbélyege + 1. $t(T) > R(A) \wedge t(T) > (W)$: Mindkét művelet elvégezhető +\begin{center} +\begin{tikzpicture} +% a straight line segment +\draw (0.5,0) -- (10.5,0); +% the ticks and their labels +\foreach \x in {1,...,10} + \draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax}; +% the thicker segment +%\draw[ultra thick] (2.06,0) -- (8.94,0); +% the labels +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (3.0,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (5,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (8.0,0) {}; +\node at (5.5,-0.8) {Időbélyegek azonosítója}; +\end{tikzpicture} +\end{center} + 2. $t(T) < R(A) \wedge t(T) < W(A)$: Egyik művelet sem végezhető el, abortálni + kell +\begin{center} +\begin{tikzpicture} +% a straight line segment +\draw (0.5,0) -- (10.5,0); +% the ticks and their labels +\foreach \x in {1,...,10} + \draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax}; +% the thicker segment +%\draw[ultra thick] (2.06,0) -- (8.94,0); +% the labels +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (3.0,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (5.0,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (8,0) {}; +\node at (5.5,-0.8) {Időbélyegek azonosítója}; +\end{tikzpicture} +\end{center} + 3. $t(T) < R(A) \wedge t(T) > W(A)$: Ha $T$ olvasni akar, akkor azt megteheti, + de ha írni akar, akkor abortálandó +\begin{center} +\begin{tikzpicture} +% a straight line segment +\draw (0.5,0) -- (10.5,0); +% the ticks and their labels +\foreach \x in {1,...,10} + \draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax}; +% the thicker segment +%\draw[ultra thick] (2.06,0) -- (8.94,0); +% the labels +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (3.0,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (5.0,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (8,0) {}; +\node at (5.5,-0.8) {Időbélyegek azonosítója}; +\end{tikzpicture} +\end{center} + 4. $t(T) > R(A) \wedge t(T) < W(A)$: Mindkét esetben abortálandó a tranzakció +\begin{center} +\begin{tikzpicture} +% a straight line segment +\draw (0.5,0) -- (10.5,0); +% the ticks and their labels +\foreach \x in {1,...,10} + \draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt) node[below,fill=white] {\the\numexpr\x +112\relax}; +% the thicker segment +%\draw[ultra thick] (2.06,0) -- (8.94,0); +% the labels +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$t(T)$}] at (3.0,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$W(A)$}] at (5.0,0) {}; +\node[fill=white,draw=black,circle,inner sep=2pt,label=above:{$R(A)$}] at (8,0) {}; +\node at (5.5,-0.8) {Időbélyegek azonosítója}; +\end{tikzpicture} +\end{center} + +* Az időbélyeges R/W modell és a 2PL összehasonlítása + +Elképzelhető, hogy egy ütemezés sorosítható +– időbélyegesen, de kétfázisú zárakkal nem +– időbélyegesen is és zárakkal is (pl. minden olyan ütemezés, amelyben a + tranzakciók nem használnak közös adatokat), +– kétfázisú zárakkal, de időbélyegesen nem, +– időbélyegesen sem és zárakkal sem. + +Tanulság: sem a zárakkal, sem az időbélyegekkel való sorosítás nem jobb egyér- +telműen a másiknál. + +* Tranzakcióhibák és az időbélyegek +Elképzelhető olyan helyzet, amelyben egy $T_1$ tranzakció előállít egy $A$ +adategységben értékeket, majd egy $T_2$ tranzakció ezt beolvassa, de később +$T_1$ valamilyen oknál fogva abortál. Ez a piszkos adat olvasásának esete, +amikor tehát lavinaveszéllyel kell számolni. + +** Megoldások +1. elfogadjuk a lavinát, hiszen időbélyeges tranzakciókezelést tipikusan olyan + környezetbe használjuk, ahol eleve kevés az abort, tehát kisebb a lavina veszély +2. Megakadályozzuk a piszkos adat olvasását. Pl addig nem írunk az adatbázisba + adatot amíg a tranzakció el nem érte a kész pontját. + +\begin{center} +\begin{tikzpicture} +% a straight line segment +\draw (0.5,0) -- (10.5,0); +% the ticks and their labels +\foreach \x in {1,...,10} + \draw[xshift=\x cm] (0pt,2pt) -- (0pt,-1pt); %node[below,fill=white] {\the\numexpr\x +112\relax}; +% the thicker segment +%\draw[ultra thick] (2.06,0) -- (8.94,0); +% the labels +\draw[black] (1.0,0.15) -- (1.0,-0.15) node[below] {\shortstack{írás,olvasás művelete\\ időbélyeg ellenőrzése}}; +\draw[black] (5.0,0.15) -- (5.0,-0.15) node[below] {készpont}; +\draw[black] (9.0,0.15) -- (9.0,-0.15) node[below] {írás az adatbázisba}; +\end{tikzpicture} +\end{center} +* Verziókezelés időbélyegek mellett ($MVCC$) +Feltételezés: minden adatelem írásakor a régi értéket is megőrizzük. + +Kézenfekvő megoldás, ha idősor jellegű adatokat kívánunk tárolni (betegek adatai, +tőzsdei árfolyamváltozások, szoftver projektek verziói stb.). + +Ez megoldja a ``jövőben olvasás'' problémáját (Tehát $T$ olvasni akarna +$A\text{-ból}$,de $t(T)