Οι μικρές επερωτήσεις δουλεύουν, οι μεγάλες αποτυγχάνουν: ποιο μέγεθος πακέτου φταίει;
Τα πακέτα του οδηγού SQL Server, τα όρια μηνυμάτων του MySQL και το MTU μιας διαδρομής IP είναι διαφορετικές μονάδες. Μια αποτυχία που εξαρτάται από το μέγεθος δεν τα κάνει εναλλάξιμα.
Οι μικρές επερωτήσεις επιστρέφουν, οι μεγάλες κολλάνε ή πέφτουν, και η πρώτη σκέψη είναι ότι κάτι δεν πάει καλά με το μέγεθος του πακέτου. Αυτή η σκέψη συνήθως είναι σωστή και σχεδόν πάντα στοχεύει το λάθος επίπεδο. Τρεις ρυθμίσεις μοιράζονται τη λέξη πακέτο και μετρούν τρία άσχετα πράγματα: τη μεταφορική συσκευασία ενός οδηγού βάσης δεδομένων, το όριο μηνυμάτων ενός διακομιστή βάσης δεδομένων και τη μέγιστη μονάδα μετάδοσης της διαδρομής IP. Το να ρυθμίζεις τη μία για να διορθώσεις ένα σύμπτωμα που προκαλεί μια άλλη είναι ο τρόπος με τον οποίο ένα πρόβλημα πέντε λεπτών γίνεται εβδομάδα συντονισμού. Η σειρά παρακάτω είναι αυτή που μου κόστισε τον λιγότερο χρόνο.
Τρία επίπεδα, μία κοινή λέξη
Κάθε γραμμή παρακάτω είναι διαφορετική μονάδα με διαφορετικό ιδιοκτήτη, και για καμία δεν μπορεί να συλλογιστεί κανείς από τις άλλες. Ένα μήνυμα βάσης δεδομένων μπορεί να καλύπτει πολλά τμήματα TCP και πολλά πακέτα IP, οπότε η αύξηση του επιτρεπόμενου μεγέθους του δεν μεγαλώνει τη διαδρομή, και η μείωση μιας ρύθμισης οδηγού δεν είναι η ίδια ενέργεια με την αλλαγή του MTU μιας διεπαφής. Η λέξη εμφανίζεται σε τρία διαφορετικά αρχεία διαμόρφωσης, γι' αυτό η αναζήτησή της επιστρέφει τρεις άσχετες απαντήσεις. Διαβάστε πρώτα το κείμενο του σφάλματος και μετά αποφασίστε ποιο αρχείο θα ανοίξετε.
| Setting or observation | Unit it describes |
|---|---|
| SQL Server client network packet setting | The provider's transport packaging for that connection |
| MySQL communication packet limit | A database message, such as one statement, row or replication event |
| IP path MTU | The largest IP packet the path carries without fragmentation handling |
Σημειώστε σε ποιο επίπεδο ανήκει η αποτυχημένη ενέργεια πριν ανοίξετε ένα αρχείο διαμόρφωσης. Το κείμενο του σφάλματος συνήθως το λέει, και το κείμενο του σφάλματος είναι το μέρος που οι άνθρωποι προσπερνούν.
Προσδιορίστε τον πάροχο πριν αλλάξετε τη ρύθμισή του
Για τον SQL Server, καταγράψτε την εφαρμογή, το όνομα του οδηγού ή του παρόχου, την έκδοση και την ενεργή διαμόρφωση σύνδεσης. Ένα διαγνωστικό σενάριο και μια εφαρμογή επιφάνειας εργασίας μπορούν να φτάσουν στον ίδιο διακομιστή μέσω διαφορετικών παρόχων, οπότε μια ρύθμιση που βοηθά τον έναν δεν αποδεικνύει τίποτα για τον άλλον. Οι προεπιλογές των παρόχων διαφέρουν, και ένα πεδίο συμβολοσειράς σύνδεσης με παρόμοιο όνομα δεν είναι απόδειξη ότι κάθε πάροχος το ερμηνεύει με τον ίδιο τρόπο.
Μην αντικαταστήσετε έναν συντηρούμενο οδηγό με παλαιότερο μόνο επειδή μια παλιά λύση χρησιμοποιούσε τη σύνταξή του. Η τρέχουσα τεκμηρίωση αποθαρρύνει νέα ανάπτυξη πάνω σε αυτά τα παλαιότερα στοιχεία, και η κληρονόμηση των περιορισμών τους είναι κακή ανταλλαγή για μία ρύθμιση.
Η απόρριψη μηνύματος δεν είναι σταμάτημα της διαδρομής
Στο MySQL 8.4, η τεκμηρίωση για τα πακέτα επικοινωνίας περιγράφει την απόρριψη μιας υπερμεγέθους δήλωσης, γραμμής ή συμβάντος δυαδικού αρχείου καταγραφής έναντι του ισχύοντος ορίου, και μπορεί να μετρούν τόσο το όριο του πελάτη όσο και του διακομιστή. Αυτή είναι απόρριψη στο επίπεδο της βάσης δεδομένων, όχι δήλωση ότι το δίκτυο πρέπει να μεταφέρει ένα γιγάντιο πακέτο IP. Διαβάστε το πραγματικό σφάλμα και το σχήμα του προβληματικού μηνύματος: ένα μεγάλο αποτέλεσμα από πολλές μικρές γραμμές είναι διαφορετική περίπτωση από μία τεράστια γραμμή, και αποτυγχάνουν με διαφορετικό τρόπο.
Οι εγκαταστάσεις MariaDB χρειάζονται τα τεκμηριωμένα όρια και τη διαγνωστική της δικής τους έκδοσης. Η αντιγραφή των προεπιλογών του MySQL στο MariaDB είναι εικασία με επιπλέον βήματα.
Πώς μοιάζουν στην πραγματικότητα τα στοιχεία της διαδρομής
Ένα πρόβλημα μεγέθους διαδρομής έχει το δικό του αποτύπωμα: μια αναπαραγώγιμη μεταφορική αποτυχία που εξαρτάται από το μέγεθος σε μια συγκεκριμένη διαδρομή και οικογένεια διευθύνσεων, με το κόστος της σήραγγας να παίζει ρόλο και την ανάδραση ανακάλυψης να συμπεριφέρεται όπως επιτρέπει η διαδρομή. Ένα χρονικό όριο μόνο του δεν τη διακρίνει από αργή επερώτηση, σφάλμα οδηγού ή όριο στην πλευρά του διακομιστή, και η αντιμετώπιση ενός χρονικού ορίου ως απόδειξη προβλημάτων MTU σας στέλνει με σιγουριά στο λάθος επίπεδο.
Αν δοκιμάσετε τη διαδρομή, κρατήστε τον προορισμό, τον λογαριασμό και το φόρτο εργασίας σταθερά ώστε η μόνη μεταβλητή να είναι το μέγεθος που ελέγχετε. Μια δοκιμή όπου άλλαξαν τρία πράγματα δεν σας λέει τίποτα για το ποιο είχε σημασία.
Αλλάξτε μία τεκμηριωμένη μεταβλητή και μετά καταγράψτε την
Κρατήστε τον προορισμό, τον λογαριασμό, τον πάροχο και το φόρτο εργασίας σταθερά, καταγράψτε την αρχική τιμή, εφαρμόστε μία υποστηριζόμενη αλλαγή και καταγράψτε το αποτέλεσμα. Μια μικρότερη ρύθμιση που κάνει μία δοκιμή να πετύχει είναι χρήσιμη απόδειξη για αυτή τη δοκιμασμένη στοίβα· δεν είναι καθολικό βέλτιστο και δεν καθορίζει τι προκάλεσε την αρχική αποτυχία. Αυτοί είναι διαφορετικοί ισχυρισμοί, και μόνο ο πρώτος υποστηρίζεται από ένα μόνο πείραμα.
Επιλύστε το αναγνωρισμένο όριο στο δικό του επίπεδο και μετά σημειώστε ποιο επίπεδο ήταν. Η σημείωση είναι αυτό που εμποδίζει τον επόμενο άνθρωπο να ρυθμίζει τον οδηγό επειδή το πρόβλημα ήταν η διαδρομή.