Kontaktovať podporu

Odpovedáme e-mailom, zvyčajne do dvoch dní.

Google reCAPTCHA kontroluje toto podanie na ochranu pred zneužitím; údaje sa prenášajú spoločnosti Google. Skript sa načíta až pri otvorení tohto formulára.

← Všetky príspevky

Kde v skutočnosti žije schéma databázy

O obsahu a jeho overovaní

V tomto článku

Všetko, čo táto služba robí, je v správe verzií. Teda aspoň kód. Databáza, na ktorej beží, má 32 tabuliek a 15 z nich nemá definíciu nikde v repozitári — žiadne CREATE TABLE, žiadny súbor schémy, nič. Výpis obnoví všetkých 32 s neporušenou štruktúrou; repozitár však neuchováva druhú, nezávislú kópiu tejto štruktúry.

17 definovaných tabuliek 15 nikde nedefinovaných 21 indexov vytvorených kódom 11 iba v databáze 32 tabuliek, 32 sekundárnych indexov, 0 súborov schémy

Tieto čísla pochádzajú z porovnania živej databázy so 736 súbormi a 5 671 710 znakmi repozitára. Nie sú odhadom.

Ako zmizne polovica schémy

Nie je to nedbalosť a práve preto sa to oplatí zapísať. Každý jednotlivý krok bol rozumný.

Tabuľky vytvorené pred existenciou súčasného kódu sa nikdy nezapísali, pretože vtedy tu jednoducho boli. Tabuľky pridané odvtedy prišli cez migračné skripty a tieto skripty sú v repozitári — odtiaľ pochádza tých 17 definícií. Neskôr pridané stĺpce sa pridali jednoriadkovým príkazom ALTER TABLE napísaným do príkazového riadka, pretože to bolo rýchlejšie než písať skript na zmenu trvajúcu sekundu.

Indexy sú najhorší prípad. Index sa pridá, keď je niečo pomalé, práve vtedy, keď je to pomalé, a okamžite problém vyrieši. Nezostane žiadny výstup, nič na kontrolu ani nič, čo zlyhá, keď sa naň zabudne. Presne z tohto dôvodu tu existuje jedenásť z tridsiatich dvoch sekundárnych indexov a nikde nie sú zaznamenané.

Tabuľka uchovávajúca samotné počítadlá, 166 438 riadkov, patrí medzi pätnásť bez definície v repozitári.

Čo sa naozaj pokazí

Nie veľa až do jedného konkrétneho okamihu: keď sa databáza obnovuje z výpisu.

Výpis nesie štruktúru, takže priama obnova je v poriadku. Nebezpečná je každá cesta, ktorá tabuľku znovu vytvára namiesto obnovy — presun na iný stroj, import vybraných tabuliek, opätovné vytvorenie zo skriptu. Údaje sa vrátia a indexy potichu nie. Nič nezlyhá. Dopyty vracajú správne odpovede. Len trvajú dlhšie a príčina je neviditeľná, pretože jediným záznamom o indexe je stroj, ktorý ho už nemá.

Toto je spôsob zlyhania, ktorý sa oplatí pomenovať: chýbajúci index nevytvára chybu, vytvára pomalšiu správnu odpoveď. Neexistuje na to test, pretože testy prechádzajú.

Čo s tým zatiaľ robíme

Schéma dnes nie je v repozitári a to je presný opis stavu. Zavedené opatrenia sú užšie než úplná oprava a pokrývajú prípad, ktorý naozaj niečo stojí:

Výpis pred každým deštruktívnym úkonom, uložený mimo koreňového adresára webu. Obnova, ktorá sa skutočne vykonala aspoň raz, nie iba predpokladala. A krátky zoznam indexov, o ktorých sa vie, že existujú iba v bežiacej databáze, kontrolovaný po každej obnove — pretože stroja sa možno opýtať, aké indexy má, a odpoveď porovnať s predchádzajúcou odpoveďou.

Všeobecná verzia platí aj mimo databáz. Ak časť systému existuje iba v bežiacom systéme, nemá druhú kópiu. Pri každej časti infraštruktúry sa oplatí pýtať nie to, či je zálohovaná, ale čo by sa nedalo znovu vytvoriť z repozitára, keby stroj zmizol. Tu je odpoveďou pätnásť tabuliek a jedenásť indexov, zistenie trvalo popoludnie a je to zoznam, nie neznáma.

Aktualizácia: september 2026

Päť dní po zverejnení tohto príspevku sa pracovný adresár commitol: 26 súborov a 4 058 riadkov, medzi nimi jedenásť migračných skriptov napísaných medzi 28. augustom a 1. septembrom, ktoré dovtedy existovali iba na bežiacom stroji. To bola ľahká polovica — kód, ktorý bol napísaný, ale nikdy nezaznamenaný.

Meranie sa 1. septembra 2026 zopakovalo rovnakým spôsobom: živá databáza oproti všetkému, čo sleduje git.

Tabuľky4630 s CREATE TABLE v repozitári, 16 bez definície
Sekundárne indexy4332 vytvorených kódom v repozitári, 11 iba v bežiacej databáze
Migračné skripty109v správe verzií
30 definovaných tabuliek 16 nikde nedefinovaných 32 indexov so súborom 11 iba v databáze 46 tabuliek, 43 sekundárnych indexov, 0 súborov schémy

Číslo, na ktorom záleží, sa nepohlo. Dňa 27. augusta jedenásť sekundárnych indexov neexistovalo nikde mimo bežiacej databázy. Dňa 1. septembra ich je stále jedenásť. Medzitým pribudlo ďalších jedenásť indexov a každý prišiel s migračným skriptom: zvyk sa zmenil, dlh nie.

Tých jedenásť je na piatich tabuľkách — počítadlá, jazyky, odkazujúce stránky, zoznam vylúčení a protokol udalostí. Všetkých päť predchádza súčasnému kódu a práve preto sa pre ne nikdy nič nezapísalo. Napísať súbor teraz by znamenalo z bežiaceho servera zrekonštruovať, čo sa pred rokmi napísalo do príkazového riadka.

Augustový stav teda trvá. Schéma stále nie je v repozitári a obnova, ktorá tabuľku znovu vytvorí namiesto obnovy, by stále bez slova stratila jedenásť indexov. Zmena je užšia: všetko pridané odvtedy po sebe zanechalo súbor.

Reklama