Kreiptis pagalbos

Atsakome el. paštu, dažniausiai per dvi dienas.

Google reCAPTCHA tikrina šį pateikimą, kad apsaugotų nuo piktnaudžiavimo; duomenys siunčiami Google. Scenarijus įkeliamas tik atvėrus šią formą.

← Visi įrašai

Kur iš tiesų yra duomenų bazės schema

Apie turinį ir jo patikrą

Šiame straipsnyje

Viskas, ką daro ši paslauga, yra versijų valdyme. Bent jau kodas. Duomenų bazę, kuria ji remiasi, sudaro 32 lentelės, o 15 jų saugykloje niekur neturi apibrėžties — jokio CREATE TABLE, jokio schemos failo, nieko. Išklotinė atkuria visas 32 su nepažeista struktūra; ko saugykla neturi – antros, nepriklausomos tos struktūros kopijos.

17 apibrėžtų lentelių 15 niekur neapibrėžtų 21 indeksas sukuriamas kodu 11 tik duomenų bazėje 32 lentelės, 32 antriniai indeksai, 0 schemos failų

Šie skaičiai gauti lyginant veikiančią duomenų bazę su 736 failais ir 5 671 710 saugyklos ženklų. Tai ne spėjimas.

Kaip dingsta pusė schemos

Tai ne aplaidumas – būtent todėl verta užrašyti. Kiekvienas atskiras žingsnis buvo pagrįstas.

Lentelės, sukurtos dar iki dabartinio kodo, niekada neužrašytos, nes tuo metu jos tiesiog buvo. Vėliau pridėtos lentelės atėjo per migracijų scenarijus, o tie scenarijai yra saugykloje — iš ten ir 17 apibrėžčių. Vėliau pridėti stulpeliai pridėti vienos eilutės ALTER TABLE komanda, įvesta komandų eilutėje, nes tai buvo greičiau nei rašyti scenarijų sekundę trukusiam pakeitimui.

Indeksai – blogiausias atvejis. Indeksas pridedamas, kai kas nors lėta, tą pačią akimirką, ir iš karto pataiso problemą. Nelieka jokio darbo rezultato, nieko peržiūrėti, nieko, kas sugestų jį pamiršus. Vienuolika iš trisdešimt dviejų čia esančių antrinių indeksų egzistuoja būtent dėl to ir niekur neužfiksuoti.

Lentelė, sauganti pačius skaitiklius, 166 438 jų eilutes, yra viena iš penkiolikos be apibrėžties saugykloje.

Kas iš tiesų sugenda

Nedaug, iki vienos konkrečios akimirkos: kai duomenų bazė atkuriama iš išklotinės.

Išklotinė turi struktūrą, todėl paprastas atkūrimas tinkamas. Pavojus – kiekvienas kelias, kuris lentelę perkuria, o ne atkuria — persikėlimas į kitą kompiuterį, pasirinktų lentelių importas, vienos perkūrimas iš scenarijaus. Duomenys grįžta, o indeksai tyliai ne. Niekas nesugenda. Užklausos grąžina teisingus atsakymus. Jos tik trunka ilgiau, o priežastis nematoma, nes vienintelis įrašas, koks indeksas buvo, yra kompiuteris, kuris jo nebeturi.

Būtent tokį gedimą verta įvardyti: trūkstamas indeksas nesukelia klaidos, jis sukuria lėtesnį teisingą atsakymą. Tam nėra testo, nes testai sėkmingi.

Ką kol kas darome

Šiandien schemos saugykloje nėra – tai tikslus būsenos aprašymas. Esamos priemonės siauresnės už visą pataisymą ir apima tą atvejį, kuris iš tiesų kainuoja:

Išklotinė prieš bet ką destruktyvaus, laikoma už žiniatinklio šaknies ribų. Atkūrimas, bent kartą iš tiesų atliktas, o ne tik numanytas. Ir trumpas sąrašas indeksų, kurie, kaip žinoma, egzistuoja tik veikiančioje duomenų bazėje, tikrinamas po kiekvieno atkūrimo — nes kompiuterio galima paklausti, kokius indeksus jis turi, ir atsakymą palyginti su ankstesniu.

Bendroji versija taikoma ne tik duomenų bazėms. Jei sistemos dalis egzistuoja tik veikiančioje sistemoje, antros jos kopijos nėra. Apie bet kurią infrastruktūros dalį verta klausti ne ar ji turi atsarginę kopiją, o ko nepavyktų perkurti iš saugyklos dingus kompiuteriui. Čia atsakymas – penkiolika lentelių ir vienuolika indeksų; tai nustatyti truko popietę, ir dabar tai sąrašas, o ne nežinomybė.

Atnaujinta 2026 m. rugsėjį

Praėjus penkioms dienoms po šio įrašo, darbinis katalogas įtrauktas į pakeitimų istoriją: 26 failai ir 4 058 eilutės, tarp jų vienuolika migracijų scenarijų, parašytų nuo rugpjūčio 28 iki rugsėjo 1 d., kurie iki tol buvo tik veikiančiame kompiuteryje. Tai lengvoji pusė — kodas, kuris buvo parašytas, bet niekada neužfiksuotas.

Matavimas pakartotas 2026 m. rugsėjo 1 d. tuo pačiu būdu: veikianti duomenų bazė prieš viską, ką seka git.

Lentelės4630 turi CREATE TABLE saugykloje, 16 neturi
Antriniai indeksai4332 sukuriami saugyklos kodu, 11 tik veikiančioje duomenų bazėje
Migracijų scenarijai109versijų valdyme
30 apibrėžtų lentelių 16 niekur neapibrėžtų 32 indeksai turi failą 11 tik duomenų bazėje 46 lentelės, 43 antriniai indeksai, 0 schemos failų

Svarbusis skaičius nepasikeitė. Rugpjūčio 27 d. vienuolika antrinių indeksų egzistavo tik veikiančioje duomenų bazėje. Rugsėjo 1 d. jų vis dar vienuolika. Tarp tų datų pridėta dar vienuolika indeksų, ir kiekvienas atėjo su migracijos scenarijumi: įprotis pasikeitė, skola – ne.

Tie vienuolika yra penkiose lentelėse — skaitiklių, kalbų, nukreipiančių puslapių, neįtraukimo sąrašo ir įvykių žurnalo. Visos penkios senesnės už dabartinį kodą, todėl joms niekas niekada neužrašyta. Parašyti failą dabar reikštų iš veikiančio serverio atkurti tai, kas prieš daugelį metų įvesta komandų eilutėje.

Todėl rugpjūčio padėtis lieka. Schemos vis dar nėra saugykloje, o atkūrimas, perkurdamas lentelę, užuot ją atkūręs, vis dar tyliai prarastų vienuolika indeksų. Pakeitimas siauresnis: viskas, kas nuo tada pridėta, paliko failą.

Reklama