Προσαρμόστε τις παραμέτρους εκτέλεσης της MySQL, τροποποιήστε το αρχείο /etc/my.cnf Προσαρμόστε τις παραμέτρους εκτέλεσης της MySQL ώστε να τεθούν σε ισχύ μετά την επανεκκίνηση της MySQL, μετά την έκδοση MySQL 4, ορισμένες εσωτερικές μεταβλητές μπορούν να οριστούν κατά το χρόνο εκτέλεσης της MySQL, αλλά θα είναι άκυρες κατά την επανεκκίνηση της MySQL. Πρόγραμμα MySQL - Κατάλογοι και αρχεία basedir = διαδρομή # Χρησιμοποιήστε τον δεδομένο κατάλογο ως ριζικό κατάλογο (κατάλογος εγκατάστασης). datadir = path # Διαβάστε το αρχείο βάσης δεδομένων από έναν δεδομένο κατάλογο. pid-file = όνομα αρχείου # Καθορίστε ένα αρχείο για το πρόγραμμα mysqld για την αποθήκευση του αναγνωριστικού διεργασίας (διαθέσιμο μόνο για συστήματα UNIX/Linux).
[mysqld] socket = /tmp/mysql.sock # Καθορίζει ένα αρχείο υποδοχής για τοπική επικοινωνία μεταξύ του προγράμματος-πελάτη MySQL και του διακομιστή (η προεπιλογή είναι /var/lib/mysql/mysql.sock αρχείο σε Linux) port=3306 # Καθορίζει τη θύρα για την οποία εκτελεί ακρόαση το MsSQL key_buffer = 384M # key_buffer είναι το μέγεθος του buffer που χρησιμοποιείται για την ευρετηρίαση μπλοκ, αυξάνοντας καλύτερα το ευρετήριο που χειρίζεται (για όλες τις αναγνώσεις και τις πολλαπλές εγγραφές). Το μπλοκ ευρετηρίου αποθηκεύεται προσωρινά και μοιράζεται από όλα τα νήματα και το μέγεθος του key_buffer εξαρτάται από το μέγεθος της μνήμης. table_cache = 512 # Ο αριθμός των ανοικτών πινάκων για όλα τα νήματα. Η αύξηση αυτής της τιμής αυξάνει τον αριθμό των περιγραφέων αρχείων που απαιτούνται από τη mysqld. Αποφεύγει την επιβάρυνση του συχνού ανοίγματος πινάκων δεδομένων sort_buffer_size = 2M # Εκχωρήστε ένα buffer αυτού του μεγέθους για κάθε νήμα που πρέπει να ταξινομηθεί. Η αύξηση αυτής της τιμής επιταχύνει τις λειτουργίες ORDER BY ή GROUP BY. Σημείωση: Η εκχωρημένη μνήμη που αντιστοιχεί σε αυτήν την παράμετρο είναι αποκλειστική για κάθε σύνδεση! Εάν υπάρχουν 100 συνδέσεις, τότε το συνολικό μέγεθος buffer ταξινόμησης που εκχωρείται στην πραγματικότητα είναι 100×6 = 600MB read_buffer_size = 2M # Το μέγεθος του buffer που μπορεί να χρησιμοποιηθεί για τη λειτουργία ερωτήματος ανάγνωσης. Όπως και με sort_buffer_size, η εκχωρημένη μνήμη που αντιστοιχεί σε αυτήν την παράμετρο είναι επίσης αποκλειστική για κάθε σύνδεση. query_cache_size = 32M # Καθορίζει το μέγεθος του buffer αποτελεσμάτων ερωτήματος MySQL read_rnd_buffer_size = 8M # Αλλάξτε την παράμετρο που θα διαβαστεί τυχαία μετά την ταξινόμηση χρησιμοποιώντας το δείκτη γραμμής. myisam_sort_buffer_size =64M # Απαιτείται buffer για την αναδιάταξη των πινάκων MyISAM όταν αλλάζουν thread_concurrency = 8 # Ο μέγιστος αριθμός ταυτόχρονων νημάτων ορίζεται ως ο αριθμός των λογικών CPU του διακομιστή ×2 και εάν η CPU υποστηρίζει H.T hyperthreading, × 2 thread_cache = 8 # #缓存可重用的线程数 Το skip-locking # αποφεύγει το εξωτερικό κλείδωμα της MySQL, μειώνει την πιθανότητα σφαλμάτων και ενισχύει τη σταθερότητα. [mysqldump] max_allowed_packet =16M # Το μέγιστο δυνατό πακέτο πληροφοριών που μπορεί να σταλεί μεταξύ του διακομιστή και του πελάτη
[myisamchk] key_buffer = 256Μ sort_buffer = 256Μ read_buffer = 2Μ write_buffer = 2Μ
Άλλες προαιρετικές παράμετροι: back_log = 384 Καθορίζει τον αριθμό των πιθανών συνδέσεων για τη MySQL. Όταν το κύριο νήμα MySQL λαμβάνει πολύ μεγάλο αριθμό αιτημάτων σύνδεσης σε πολύ σύντομο χρονικό διάστημα, αυτή η παράμετρος τίθεται σε ισχύ και το κύριο νήμα χρειάζεται λίγο χρόνο για να ελέγξει τη σύνδεση και να ξεκινήσει ένα νέο νήμα. Η τιμή back_log της παραμέτρου υποδεικνύει πόσα αιτήματα μπορούν να αποθηκευτούν στη στοίβα για σύντομο χρονικό διάστημα προτού η MySQL σταματήσει προσωρινά να ανταποκρίνεται σε νέα αιτήματα. Εάν το σύστημα έχει πολλές συνδέσεις σε σύντομο χρονικό διάστημα, είναι απαραίτητο να αυξηθεί η τιμή αυτής της παραμέτρου, η οποία καθορίζει το μέγεθος της ουράς ακρόασης για τις εισερχόμενες συνδέσεις TCP/IP. Η προσπάθεια να ορίσετε ένα όριο που back_log υψηλότερο από το λειτουργικό σας σύστημα θα είναι αναποτελεσματική. Η προεπιλεγμένη τιμή είναι 50. Για συστήματα Linux, συνιστάται να ορίσετε έναν ακέραιο αριθμό μικρότερο από 512. max_connections = ν Ο μέγιστος αριθμός συνδέσεων βάσης δεδομένων που μπορεί να χειριστεί ταυτόχρονα ο διακομιστής MySQL (η προεπιλεγμένη ρύθμιση είναι 100). Εάν ξεπεραστεί το όριο, θα αναφερθεί το σφάλμα Πάρα πολλές συνδέσεις key_buffer_size = n Τιμή RMA για μπλοκ ευρετηρίου (η προεπιλεγμένη ρύθμιση είναι 8M), αυξάνοντας το ευρετήριο για καλύτερο χειρισμό (για όλες τις αναγνώσεις και πολλαπλές εγγραφές) record_buffer: Κάθε νήμα που εκτελεί μια διαδοχική σάρωση εκχωρεί ένα buffer αυτού του μεγέθους σε κάθε πίνακα που σαρώνει. Εάν κάνετε πολλές διαδοχικές σαρώσεις, μπορεί να θέλετε να αυξήσετε αυτήν την τιμή. Η προεπιλεγμένη τιμή είναι 131072 (128K) wait_timeout: Ο αριθμός των δευτερολέπτων που περιμένει ο διακομιστής για μια ενέργεια σε μια σύνδεση πριν την τερματίσει. interactive_timeout: Ο αριθμός των δευτερολέπτων που περιμένει ο διακομιστής για ενέργεια σε μια αλληλεπιδραστική σύνδεση πριν την τερματίσει. Ως αλληλεπιδρών πελάτης ορίζεται ο πελάτης που χρησιμοποιεί την επιλογή CLIENT_INTERACTIVE για mysql_real_connect(). Η προεπιλεγμένη τιμή είναι 28800, μπορείτε να την αλλάξετε σε 3600. παράλειψη-όνομα-επίλυση Απενεργοποιήστε τη MySQL από την ανάλυση DNS σε εξωτερικές συνδέσεις, η χρήση αυτής της επιλογής εξαλείφει το χρόνο που χρειάζεται η MySQL για την επίλυση DNS. Ωστόσο, θα πρέπει να σημειωθεί ότι εάν αυτή η επιλογή είναι ενεργοποιημένη, όλες οι εξουσιοδοτήσεις σύνδεσης απομακρυσμένου κεντρικού υπολογιστή πρέπει να χρησιμοποιούν τη μέθοδο διεύθυνσης IP, διαφορετικά η MySQL δεν θα μπορεί να επεξεργαστεί κανονικά το αίτημα σύνδεσης! log-slow-queries = slow.log Καταγράψτε αργά ερωτήματα και βελτιστοποιήστε τα ένα προς ένα skip-innodb skip-bdb Κλείστε τους ανεπιθύμητους τύπους πινάκων και μην το προσθέσετε αν χρειάζεται
# > ΕΜΦΆΝΙΣΗ ΜΕΤΑΒΛΗΤΏΝ ΌΠΩΣ '%query_cache%'; # > ΕΜΦΆΝΙΣΗ ΚΑΤΆΣΤΑΣΗΣ ΌΠΩΣ 'Qcache%'; Εάν η τιμή Qcache_lowmem_prunes είναι πολύ μεγάλη, υποδηλώνει ότι συχνά δεν υπάρχει επαρκής αποθήκευση στην προσωρινή μνήμη. Εάν η τιμή του Qcache_hits είναι πολύ μεγάλη, σημαίνει ότι το buffer ερωτημάτων χρησιμοποιείται πολύ συχνά και εάν η τιμή είναι μικρή αλλά θα επηρεάσει την αποτελεσματικότητα, τότε μπορείτε να εξετάσετε το ενδεχόμενο να μην χρησιμοποιήσετε buffer ερωτημάτων. Εάν η τιμή Qcache_free_blocks είναι πολύ μεγάλη, σημαίνει ότι υπάρχουν πολλά υπολείμματα στο buffer.
########################################## ###### max_allowed_packet ###### ########################################## Ένα πακέτο επικοινωνίας είναι μια μεμονωμένη δήλωση SQL που αποστέλλεται στον διακομιστή MySQL ή μια μεμονωμένη γραμμή στον πελάτη. Το μέγιστο δυνατό πακέτο που μπορεί να σταλεί μεταξύ του διακομιστή MySQL 5.1 και του πελάτη είναι 1 GB. Όταν ένας πελάτης MySQL ή ένας διακομιστής mysqld λαμβάνει ένα πακέτο μεγαλύτερο από max_allowed_packet byte, εκδίδεται ένα σφάλμα "το πακέτο είναι πολύ μεγάλο" και η σύνδεση κλείνει. Για ορισμένους πελάτες, εάν το πακέτο επικοινωνίας είναι πολύ μεγάλο, ενδέχεται να αντιμετωπίσετε το σφάλμα "Απώλεια σύνδεσης με τον διακομιστή MySQL" κατά τη διάρκεια του ερωτήματος. Τόσο ο πελάτης όσο και ο διακομιστής έχουν τις δικές τους μεταβλητές max_allowed_packet, επομένως εάν σκοπεύετε να χειριστείτε μεγάλα πακέτα, πρέπει να προσθέσετε αυτήν τη μεταβλητή τόσο στον πελάτη όσο και στον διακομιστή. Εάν χρησιμοποιείτε ένα πρόγραμμα πελάτη mysql, η μεταβλητή max_allowed_packet του είναι προεπιλεγμένη στα 16 MB. Για να ορίσετε μεγαλύτερη τιμή, μπορείτε να ξεκινήσετε τη mysql με τον ακόλουθο τρόπο: mysql> mysql --max_allowed_packet=32M Ορίζει το μέγεθος του πακέτου πληροφοριών στα 32 MB. Η προεπιλεγμένη τιμή max_allowed_packet για το διακομιστή είναι 1MB. Εάν ο διακομιστής χρειάζεται να επεξεργαστεί μεγάλα ερωτήματα, μπορείτε να αυξήσετε αυτήν την τιμή (για παράδειγμα, εάν προετοιμάζεστε να επεξεργαστείτε μεγάλες στήλες blob). Για παράδειγμα, για να το ορίσετε στα 16 MB, μπορείτε να ξεκινήσετε τον διακομιστή ως εξής: mysql> mysqld --max_allowed_packet=16M
Μπορείτε επίσης να χρησιμοποιήσετε αρχεία επιλογών για να ορίσετε max_allowed_packet. Για να ορίσετε αυτήν τη μεταβλητή για τον διακομιστή στα 16MB, προσθέστε περιεχόμενο κατερχόμενης ζεύξης στο αρχείο επιλογών: [mysqld] max_allowed_packet=16Μ Είναι ασφαλές να αυξήσετε την τιμή αυτής της μεταβλητής, επειδή εκχωρείται πρόσθετη μνήμη μόνο όταν χρειάζεται. Για παράδειγμα, η mysqld θα εκχωρήσει περισσότερη μνήμη μόνο εάν εκδώσετε ένα μεγάλο ερώτημα ή η mysqld πρέπει να επιστρέψει μεγάλες γραμμές αποτελεσμάτων. Η μικρή προεπιλεγμένη τιμή αυτής της μεταβλητής είναι ένα προληπτικό μέτρο για τον εντοπισμό πακέτων σφαλμάτων μεταξύ του υπολογιστή-πελάτη και του διακομιστή και για να διασφαλιστεί ότι οι υπερχειλίσεις μνήμης δεν προκαλούνται από τυχαία χρήση μεγάλων πακέτων. Εάν χρησιμοποιείτε μεγάλες τιμές blob και δεν παραχωρείτε στο mysqld άδεια πρόσβασης σε αρκετή μνήμη για την επεξεργασία ερωτημάτων, θα αντιμετωπίσετε επίσης περίεργα προβλήματα που σχετίζονται με μεγάλα πακέτα. Εάν υποψιάζεστε ότι συμβαίνει αυτό, δοκιμάστε να αρχίσετε να αυξάνετε το ulimit -d 256000 σε mysqld_safe σενάριο και επανεκκινήστε το mysqld. ########################################## ##### Πώς να ανοίξετε και να κλείσετε πίνακες βάσης δεδομένων στη MySQL ##### ########################################## table_cache, max_connections και max_tmp_tables επηρεάζουν τον μέγιστο αριθμό αρχείων που διατηρεί ανοιχτά ο διακομιστής. Εάν αυξήσετε μία ή και τις δύο από αυτές τις τιμές, μπορεί να αντιμετωπίσετε το όριο που επιβάλλει το λειτουργικό σας σύστημα στον αριθμό των περιγραφέων αρχείων που ανοίγει κάθε διεργασία. Ωστόσο, μπορείτε να αυξήσετε το όριο σε πολλά συστήματα. Ζητήστε από την τεκμηρίωση του λειτουργικού σας συστήματος να καταλάβει πώς να το κάνετε αυτό, καθώς οι μέθοδοι αλλαγής των ορίων διαφέρουν πολύ από σύστημα σε σύστημα. table_cache που σχετίζονται με max_connections. Για παράδειγμα, για 200 ανοικτούς συνδέσμους, θα πρέπει να έχετε ένα buffer πίνακα τουλάχιστον 200 * n, όπου n είναι ο μέγιστος αριθμός πινάκων σε έναν σύνδεσμο. Η κρυφή μνήμη των ανοιχτών πινάκων μπορεί να αυξηθεί σε ένα table_cache το πολύ (64 από προεπιλογή. Αυτό μπορεί να γίνει με το -O table_cache=#选项来改变 της mysqld). Ένας πίνακας δεν κλείνει ποτέ, εκτός εάν η προσωρινή μνήμη είναι γεμάτη και ένα άλλο νήμα προσπαθεί να ανοίξει έναν πίνακα ή εάν χρησιμοποιείτε mysqladmin refresh ή mysqladmin flush-tables. Όταν η μνήμη cache πίνακα είναι πλήρης, ο διακομιστής χρησιμοποιεί την ακόλουθη διαδικασία για να βρει μια καταχώρηση cache που θα χρησιμοποιήσει: Οι πίνακες που δεν χρησιμοποιούνται επί του παρόντος δημοσιεύονται, με τη σειρά των λιγότερο χρησιμοποιούμενων (ΕΣΕ). Εάν η κρυφή μνήμη είναι γεμάτη και δεν υπάρχουν πίνακες για απελευθέρωση, αλλά πρέπει να ανοίξει ένας νέος πίνακας, η κρυφή μνήμη πρέπει να μεγεθυνθεί προσωρινά. Εάν η μνήμη cache βρίσκεται σε κατάσταση προσωρινής επέκτασης και ένας πίνακας αλλάξει από ενεργό σε ανενεργό, κλείνει και απελευθερώνεται από τη μνήμη cache. Ανοίξτε έναν πίνακα για κάθε ταυτόχρονη πρόσβαση. Αυτό σημαίνει ότι εάν έχετε 2 νήματα που έχουν πρόσβαση στον ίδιο πίνακα ή έχουν πρόσβαση στον πίνακα δύο φορές στο ίδιο ερώτημα (με AS), ο πίνακας πρέπει να ανοίξει δύο φορές. Το πρώτο άνοιγμα οποιουδήποτε πίνακα αντιστοιχεί σε 2 περιγραφείς αρχείων. Κάθε πρόσθετη χρήση του πίνακα αντιστοιχεί σε έναν μόνο περιγραφέα αρχείου. Για το πρώτο άνοιγμα, χρησιμοποιείται ένας επιπλέον περιγραφέας για την ευρετηρίαση του αρχείου. Αυτός ο περιγραφέας είναι κοινός σε όλα τα νήματα
|