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

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

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

← Όλα τα άρθρα

Όταν η προσθήκη ενός ευρετηρίου κάνει τα πράγματα πιο αργά

Ο πίνακας με τα ημερήσια στοιχεία έχει ένα κλειδί: τον μετρητή και την ημερομηνία μαζί. Πέντε σημεία στον κώδικα του θέτουν μια διαφορετική ερώτηση — όχι «αυτός ο μετρητής στον χρόνο» αλλά «όλοι οι μετρητές σε αυτές τις ημερομηνίες». Η συλλογή της αρχικής σελίδας, η κατάταξη, το sitemap, ένα διάγραμμα 90 ημερών και τα στοιχεία κατάστασης. Χωρίς ευρετήριο στη στήλη της ημερομηνίας, καθένα από αυτά διαβάζει και τις 114.113 γραμμές.

Με αυτό το ευρετήριο η συλλογή γίνεται δέκα φορές ταχύτερη. Δεν προστέθηκε. Ακολουθεί η μέτρηση που το αποφάσισε.

συλλογή, μία ημέρα — 61,5 σε 6,1 ms κατάταξη, 30 ημέρες — 88,6 σε 89,2 ms sitemap, 14 ημέρες — 79,6 σε 94,8 ms διάγραμμα 90 ημερών — 120,0 σε 109,2 ms στοιχεία κατάστασης, 365 ημέρες — 204,9 σε 225,1 ms επάνω μπάρα χωρίς το ευρετήριο, κάτω μπάρα με αυτό συνολικά: τα 555 ms γίνονται 524 ms

Ένα ερώτημα έγινε πολύ ταχύτερο

Η συλλογή ζητά τους μετρητές που ήταν ενεργοί σήμερα. Χωρίς ευρετήριο στην ημερομηνία σαρώνει ολόκληρο τον πίνακα· με ευρετήριο αναζητά μία μόνο ημερομηνία και διαβάζει 443 γραμμές. Τα 61,5 χιλιοστά του δευτερολέπτου έγιναν 6,1. Δεν είναι ένα αμφίσημο αποτέλεσμα, και αν ήταν το μόνο που μετρήθηκε, το ευρετήριο θα βρισκόταν τώρα στη βάση δεδομένων.

Δύο ερωτήματα έγιναν πιο αργά

Το sitemap ζητά δεκατέσσερις ημέρες και έγινε 19% πιο αργό. Τα στοιχεία κατάστασης ζητούν ένα έτος και έγιναν 10% πιο αργά. Και στις δύο περιπτώσεις ο σχεδιαστής ερωτημάτων (query planner) πέρασε από το πρωτεύον κλειδί στο νέο ευρετήριο και έκανε χειρότερη επιλογή.

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

Δεν υπάρχει τρόπος να πει κανείς «χρησιμοποίησε αυτό το ευρετήριο μόνο για τη συλλογή». Ένα ευρετήριο είναι διαθέσιμο σε κάθε ερώτημα που αγγίζει τη στήλη, και ο σχεδιαστής θα το χρησιμοποιήσει όπου οι εκτιμήσεις του λένε ότι πρέπει. Η προσθήκη του είναι αλλαγή σε κάθε ερώτημα του πίνακα, όχι μόνο σε εκείνο για το οποίο προοριζόταν.

Συνολικά: τίποτα

Και για τα πέντε μαζί, τα 555 χιλιοστά του δευτερολέπτου έγιναν 524. Βελτίωση 1,1×, που σε έναν μικρό διακομιστή ο οποίος εξυπηρετεί αυτές τις σελίδες ούτως ή άλλως από κρυφή μνήμη δεν αξίζει μια αλλαγή στο σχήμα της βάσης.

Το διάγραμμα 90 ημερών φαίνεται να βελτιώθηκε κατά 9%. Δεν προσμετράται, και αξίζει να εξηγηθεί γιατί. Κάθε ερώτημα μετρήθηκε σε τρεις γύρους: χωρίς το ευρετήριο, με αυτό και ξανά χωρίς αυτό. Αν η δεύτερη εκτέλεση χωρίς το ευρετήριο δεν πέσει κοντά στην πρώτη, η διαφορά οφειλόταν στο μηχάνημα, όχι στην αλλαγή. Για το διάγραμμα 90 ημερών οι δύο εκτελέσεις χωρίς το ευρετήριο διέφεραν κατά 13,8% — περισσότερο από το ίδιο το αποτέλεσμα που θα ισχυριζόμασταν. Άρα αυτή η γραμμή δεν μετρά τίποτα και αναφέρεται ως τίποτα.

Πώς έγινε η μέτρηση και γιατί αυτό έχει σημασία

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

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

Ποιος θα ήταν ο αριθμός

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

Αυτό είναι το γενικό μοτίβο. Μια αλλαγή σε κοινόχρηστη υποδομή δεν μπορεί να αξιολογηθεί με βάση την περίπτωση που την προκάλεσε. Το ερώτημα δεν είναι «βοηθά αυτό εκείνο που κοιτάζω», αλλά «τι άλλο το αγγίζει και τι συμβαίνει σε εκείνο».

Υπάρχει μια εκδοχή που ίσως λειτουργήσει: ένα ευρετήριο με τις δύο στήλες, πρώτα την ημερομηνία, ώστε η συλλογή να απαντάται μόνο από το ευρετήριο χωρίς επιστροφή στον πίνακα. Ίσως επίσης να μην παρασύρει τον σχεδιαστή στα ευρύτερα εύρη. Αυτό δεν έχει μετρηθεί, οπότε δεν είναι σύσταση — είναι το επόμενο που θα δοκιμαστεί στο αντίγραφο.

Διαφήμιση