Επικοινωνία με την υποστήριξη

Απαντάμε μέσω e-mail, συνήθως μέσα σε δύο ημέρες.

Το Google reCAPTCHA ελέγχει αυτή την υποβολή για κατάχρηση· δεδομένα αποστέλλονται στην Google. Το script φορτώνεται μόνο όταν ανοίξει αυτή η φόρμα.

← Όλα τα άρθρα

Πού βρίσκεται στην πραγματικότητα το σχήμα της βάσης δεδομένων

Ό,τι κάνει αυτή η υπηρεσία βρίσκεται σε σύστημα ελέγχου εκδόσεων. Τουλάχιστον ο κώδικας. Η βάση δεδομένων στην οποία τρέχει έχει 32 πίνακες, και για 15 από αυτούς δεν υπάρχει ορισμός πουθενά στο αποθετήριο — ούτε CREATE TABLE, ούτε αρχείο σχήματος, τίποτα. Ένα dump επαναφέρει και τους 32 με τη δομή τους ανέπαφη· αυτό που δεν περιέχει το αποθετήριο είναι ένα δεύτερο, ανεξάρτητο αντίγραφο αυτής της δομής.

17 πίνακες με ορισμό 15 χωρίς ορισμό πουθενά 21 ευρετήρια από κώδικα 11 μόνο στη βάση 32 πίνακες, 32 δευτερεύοντα ευρετήρια, 0 αρχεία σχήματος

Αυτοί οι αριθμοί προκύπτουν από τη σύγκριση της ζωντανής βάσης δεδομένων με 736 αρχεία και 5.671.710 χαρακτήρες του αποθετηρίου. Δεν είναι εκτίμηση.

Πώς χάνεται το μισό σχήμα

Δεν είναι απροσεξία, και αυτό ακριβώς κάνει το θέμα άξιο καταγραφής. Κάθε μεμονωμένο βήμα ήταν λογικό.

Οι πίνακες που δημιουργήθηκαν πριν υπάρξει ο σημερινός κώδικας δεν καταγράφηκαν ποτέ, επειδή τότε απλώς υπήρχαν. Οι πίνακες που προστέθηκαν από τότε ήρθαν μέσω σεναρίων μετάβασης, και αυτά τα σενάρια βρίσκονται στο αποθετήριο — από εκεί προέρχονται οι 17 ορισμοί. Οι στήλες που προστέθηκαν αργότερα μπήκαν με μια εντολή μίας γραμμής ALTER TABLE που πληκτρολογήθηκε σε μια γραμμή εντολών, επειδή η πληκτρολόγησή της ήταν πιο γρήγορη από τη συγγραφή σεναρίου για μια αλλαγή που κράτησε ένα δευτερόλεπτο.

Τα ευρετήρια είναι η χειρότερη περίπτωση. Ένα ευρετήριο προστίθεται όταν κάτι είναι αργό, τη στιγμή που είναι αργό, και λύνει το πρόβλημα αμέσως. Δεν μένει πίσω κανένα ίχνος, τίποτα προς έλεγχο, τίποτα που να αποτυγχάνει όταν ξεχαστεί. Έντεκα από τα τριάντα δύο δευτερεύοντα ευρετήρια εδώ υπάρχουν ακριβώς γι’ αυτόν τον λόγο και δεν είναι καταγεγραμμένα πουθενά.

Ο πίνακας που περιέχει τους ίδιους τους μετρητές, με 166.438 εγγραφές, είναι ανάμεσα στους δεκαπέντε χωρίς ορισμό στο αποθετήριο.

Τι χαλάει στην πράξη

Όχι πολλά, μέχρι μια συγκεκριμένη στιγμή: όταν η βάση δεδομένων επαναφέρεται από dump.

Ένα dump περιέχει τη δομή, οπότε μια απλή επαναφορά είναι εντάξει. Ο κίνδυνος είναι κάθε διαδικασία που ξαναχτίζει έναν πίνακα αντί να τον επαναφέρει — μετακόμιση σε άλλο μηχάνημα, εισαγωγή επιλεγμένων πινάκων, αναδημιουργία ενός πίνακα από σενάριο. Τα δεδομένα επιστρέφουν, τα ευρετήρια σιωπηλά όχι. Τίποτα δεν αποτυγχάνει. Τα ερωτήματα επιστρέφουν τις σωστές απαντήσεις. Απλώς αργούν περισσότερο, και η αιτία είναι αόρατη, επειδή η μόνη καταγραφή του τι ήταν το ευρετήριο είναι το μηχάνημα που δεν το έχει πια.

Αυτός είναι ο τρόπος αποτυχίας που αξίζει να κατονομαστεί: ένα ευρετήριο που λείπει δεν παράγει σφάλμα, παράγει μια πιο αργή σωστή απάντηση. Δεν υπάρχει δοκιμή γι’ αυτό, επειδή οι δοκιμές περνούν.

Τι κάνουμε γι’ αυτό στο μεταξύ

Το σχήμα δεν βρίσκεται σήμερα στο αποθετήριο, και αυτή είναι η ακριβής περιγραφή της κατάστασης. Αυτό που ισχύει είναι στενότερο από μια πλήρη λύση, και καλύπτει την περίπτωση που πραγματικά κοστίζει:

Ένα dump πριν από οτιδήποτε καταστροφικό, φυλαγμένο εκτός του ριζικού καταλόγου του ιστότοπου. Μια επαναφορά που έχει όντως εκτελεστεί τουλάχιστον μία φορά, αντί να θεωρείται δεδομένη. Και μια σύντομη λίστα, που ελέγχεται μετά από κάθε επαναφορά, με τα ευρετήρια που είναι γνωστό ότι υπάρχουν μόνο στη βάση σε λειτουργία — επειδή μπορεί κανείς να ρωτήσει το μηχάνημα ποια ευρετήρια έχει, και να συγκρίνει την απάντηση με την προηγούμενη φορά που ρωτήθηκε.

Η γενική εκδοχή ισχύει για περισσότερα από τις βάσεις δεδομένων. Αν ένα μέρος ενός συστήματος υπάρχει μόνο στο σύστημα σε λειτουργία, δεν υπάρχει δεύτερο αντίγραφό του. Η ερώτηση που αξίζει να τεθεί για κάθε κομμάτι υποδομής δεν είναι αν υπάρχει αντίγραφο ασφαλείας του, αλλά τι δεν θα μπορούσε να ξαναχτιστεί από το αποθετήριο αν το μηχάνημα χανόταν. Εδώ η απάντηση είναι δεκαπέντε πίνακες και έντεκα ευρετήρια, χρειάστηκε ένα απόγευμα για να διαπιστωθεί, και είναι μια λίστα αντί για έναν άγνωστο.

Ενημέρωση: Σεπτέμβριος 2026

Πέντε ημέρες μετά τη δημοσίευση αυτού του άρθρου, ο κατάλογος εργασίας καταχωρίστηκε στο αποθετήριο: 26 αρχεία και 4.058 γραμμές, ανάμεσά τους έντεκα σενάρια μετάβασης γραμμένα μεταξύ 28 Αυγούστου και 1ης Σεπτεμβρίου, που μέχρι τότε υπήρχαν μόνο στο μηχάνημα σε λειτουργία. Αυτό ήταν το εύκολο μισό — κώδικας που είχε γραφτεί αλλά δεν είχε καταγραφεί ποτέ.

Η μέτρηση επαναλήφθηκε την 1η Σεπτεμβρίου 2026 με τον ίδιο τρόπο: η ζωντανή βάση δεδομένων σε σύγκριση με ό,τι παρακολουθεί το git.

Πίνακες4630 με CREATE TABLE στο αποθετήριο, 16 χωρίς κανένα
Δευτερεύοντα ευρετήρια4332 δημιουργούνται από κώδικα στο αποθετήριο, 11 μόνο στη βάση σε λειτουργία
Σενάρια μετάβασης109σε έλεγχο εκδόσεων
30 πίνακες με ορισμό 16 χωρίς ορισμό πουθενά 32 ευρετήρια με αρχείο 11 μόνο στη βάση 46 πίνακες, 43 δευτερεύοντα ευρετήρια, 0 αρχεία σχήματος

Ο αριθμός που μετράει δεν κουνήθηκε. Στις 27 Αυγούστου έντεκα δευτερεύοντα ευρετήρια δεν υπήρχαν πουθενά αλλού παρά μόνο στη βάση σε λειτουργία. Την 1η Σεπτεμβρίου είναι ακόμη έντεκα. Στο μεταξύ προστέθηκαν έντεκα ακόμη ευρετήρια, και καθένα από αυτά ήρθε με ένα σενάριο μετάβασης: η συνήθεια άλλαξε, το χρέος όχι.

Τα έντεκα βρίσκονται σε πέντε πίνακες — τους μετρητές, τις γλώσσες, τις σελίδες παραπομπής, τη λίστα εξαιρέσεων και το αρχείο καταγραφής συμβάντων. Και οι πέντε προηγούνται του σημερινού κώδικα, και ακριβώς γι’ αυτό δεν καταγράφηκε ποτέ τίποτα γι’ αυτούς. Η συγγραφή ενός αρχείου τώρα θα σήμαινε ανασύνθεση, από έναν διακομιστή σε λειτουργία, όσων πληκτρολογήθηκαν σε μια γραμμή εντολών πριν από χρόνια.

Έτσι η θέση του Αυγούστου ισχύει. Το σχήμα εξακολουθεί να μην είναι στο αποθετήριο, και μια επαναφορά που ξαναχτίζει έναν πίνακα αντί να τον επαναφέρει θα έχανε ακόμη έντεκα ευρετήρια χωρίς καμία ένδειξη. Αυτό που άλλαξε είναι πιο περιορισμένο: ό,τι προστέθηκε από τότε έχει αφήσει πίσω του ένα αρχείο.

Διαφήμιση