Kontaktirajte podršku

Odgovaramo e-poštom, obično u roku od dva dana.

Radi zaštite od zloupotrebe, Google reCAPTCHA proverava ovo slanje. Pritom se podaci prenose Googleu. Skripta se učitava tek kada otvorite ovaj formular.

← Sve objave

Gde se šema baze zapravo nalazi

O sadržaju i njegovoj proveri

U ovom članku

Sve što ovaj servis radi nalazi se u kontroli verzija. Kôd u svakom slučaju. Baza na kojoj radi ima 32 tabele, a 15 njih nema definiciju nigde u repozitorijumu — nema CREATE TABLE, nema datoteke sa šemom, ništa. Dump vraća svih 32 sa netaknutom strukturom; ono što repozitorijum ne sadrži jeste druga, nezavisna kopija te strukture.

17 tabela definisano 15 definisano nigde 21 indeks pravi kôd 11 samo u bazi 32 tabele, 32 sekundarna indeksa, 0 datoteka sa šemom

Ove brojke potiču iz poređenja žive baze sa 736 datoteka i 5.671.710 znakova repozitorijuma. Nisu procena.

Kako polovina šeme nestane

Nije u pitanju nemarnost, i zato je vredno zapisati. Svaki pojedinačni korak bio je razuman.

Tabele napravljene pre današnje baze koda nikada nisu zapisane, jer su tada jednostavno postojale. Tabele dodate od tada stizale su kroz skripte za migraciju, a te skripte jesu u repozitorijumu — odatle dolazi 17 definicija. Kolone dodate kasnije dodavane su jednolinijskom naredbom ALTER TABLE ukucanom u komandnoj liniji, jer je kucanje bilo brže od pisanja skripte za promenu koja traje sekundu.

Indeksi su najgori slučaj. Indeks se dodaje kada nešto uspori, u trenutku kada je sporo, i problem rešava odmah. Ne ostaje nikakav artefakt, ništa za pregled, ništa što pada kada se zaboravi. Jedanaest od trideset dva sekundarna indeksa ovde postoji upravo iz tog razloga i nigde nije zabeleženo.

Tabela koja čuva same brojače, sa 166.438 redova, među onih je petnaest bez definicije u repozitorijumu.

Šta se zapravo kvari

Ne mnogo, do jednog određenog trenutka: kada se baza vraća iz dumpa.

Dump nosi strukturu, pa je običan povraćaj u redu. Opasnost je svaka putanja koja tabelu ponovo gradi umesto da je vraća — prelazak na drugi računar, uvoz odabranih tabela, ponovno pravljenje jedne iz skripte. Podaci se vrate, a indeksi tiho ne. Ništa ne pada. Upiti vraćaju tačne odgovore. Samo traju duže, a uzrok je nevidljiv, jer je jedini zapis o tome kakav je indeks bio računar koji ga više nema.

To je način greške koji vredi imenovati: indeks koji nedostaje ne proizvodi grešku, nego sporiji tačan odgovor. Za to ne postoji test, jer testovi prolaze.

Šta radimo u međuvremenu

Šema danas nije u repozitorijumu, i to je tačan opis stanja. Ono što je uvedeno uže je od potpunog rešenja, ali pokriva slučaj koji zaista košta:

Dump pre svega destruktivnog, čuvan van korena veba. Povraćaj koji je bar jednom zaista izvršen, a ne pretpostavljen. I kratka lista, proveravana posle svakog povraćaja, indeksa za koje se zna da postoje samo u bazi koja radi — jer se računar može pitati koje indekse ima, a odgovor se može uporediti sa prošlim putom kada je pitan.

Opšta verzija važi za više od baza podataka. Ako deo sistema postoji samo u sistemu koji radi, ne postoji druga njegova kopija. Pitanje koje vredi postaviti o svakom delu infrastrukture nije da li je pod rezervnom kopijom, nego šta se ne bi moglo ponovo izgraditi iz repozitorijuma kada bi računar nestao. Ovde je odgovor petnaest tabela i jedanaest indeksa, utvrđivanje je trajalo popodne, i to je lista, a ne nepoznanica.

Dopuna, septembar 2026.

Pet dana pošto je ovaj članak objavljen, radni direktorijum je commitovan: 26 datoteka i 4.058 linija, među njima jedanaest skripti za migraciju napisanih između 28. avgusta i 1. septembra koje su do tada postojale samo na računaru koji radi. To je bila lakša polovina — kôd koji je napisan, ali nikada nije zabeležen.

Merenje je ponovljeno 1. septembra 2026. na isti način: živa baza naspram svega što git prati.

Tabele4630 sa CREATE TABLE u repozitorijumu, 16 bez ijedne
Sekundarni indeksi4332 pravi kôd u repozitorijumu, 11 samo u bazi koja radi
Skripte za migraciju109u kontroli verzija
30 tabela definisano 16 definisano nigde 32 indeksa sa datotekom 11 samo u bazi 46 tabela, 43 sekundarna indeksa, 0 datoteka sa šemom

Broj koji je važan nije se pomerio. Dana 27. avgusta jedanaest sekundarnih indeksa nije postojalo nigde osim u bazi koja radi. Dana 1. septembra još uvek ih je jedanaest. U međuvremenu je dodato još jedanaest indeksa i svaki je stigao sa skriptom za migraciju: navika se promenila, dug nije.

Tih jedanaest nalazi se na pet tabela — brojači, jezici, stranice upućivanja, lista isključenja i dnevnik događaja. Svih pet postoji pre današnje baze koda, što je upravo razlog zašto za njih nikada ništa nije zapisano. Pisanje datoteke sada značilo bi rekonstruisati, sa servera koji radi, ono što je pre mnogo godina ukucano u komandnoj liniji.

Dakle, stanje iz avgusta ostaje. Šema još uvek nije u repozitorijumu, a povraćaj koji ponovo gradi tabelu umesto da je vrati i dalje bi bez reči izgubio jedanaest indeksa. Promenilo se nešto uže: sve što je od tada dodato ostavilo je za sobom datoteku.

Oglas