15 Χρήσιμες συμβουλές συντονισμού και βελτιστοποίησης απόδοσης MySQL/MariaDB


Το MySQL είναι ένα ισχυρό ανοιχτού κώδικα Σχεσιακό Σύστημα Διαχείρισης Βάσεων Δεδομένων ή εν συντομία RDBMS. Κυκλοφόρησε το 1995 (20 ετών). Χρησιμοποιεί Δομημένη Γλώσσα Ερωτημάτων που είναι ίσως η πιο δημοφιλής επιλογή για τη διαχείριση περιεχομένου σε μια βάση δεδομένων. Η τελευταία έκδοση της MySQL είναι 5.6.25 και κυκλοφόρησε στις 29 Μαΐου 2015.

Ένα ενδιαφέρον γεγονός για τη MySQL είναι το γεγονός ότι το όνομα προέρχεται από την κόρη Michael Widenius (δημιουργός του MySQL) My. Παρόλο που υπάρχουν πολλά ενδιαφέροντα στοιχεία για τη MySQL, αυτό το άρθρο έχει σκοπό να σας δείξει μερικές χρήσιμες πρακτικές που θα σας βοηθήσουν να διαχειριστείτε τον διακομιστή MySQL.

Τον Απρίλιο 2009 το έργο MySQL αγοράστηκε από την Oracle. Ως αποτέλεσμα, δημιουργήθηκε ένα πιρούνι κοινότητας MySQL που ονομάζεται MariaDB. Ο κύριος λόγος για τη δημιουργία του πιρουνιού ήταν να παραμείνει το έργο ελεύθερο υπό τη Γενική Δημόσια Άδεια.

Σήμερα το MySQL και το MariaDB είναι ένα από τα πιο συχνά χρησιμοποιούμενα RDBMS που χρησιμοποιούνται για εφαρμογές ιστού όπως το WordPress, το Joomla, Magento και άλλα.

Αυτό το άρθρο θα σας δείξει μερικές βασικές, αλλά χρήσιμες συμβουλές για το πώς να βελτιστοποιήσετε τη βελτιστοποίηση της απόδοσης του MySQL/MariaDB. Λάβετε υπόψη ότι αυτό το άρθρο προϋποθέτει ότι έχετε ήδη εγκαταστήσει MySQL ή MariaDB. Εάν εξακολουθείτε να αναρωτιέστε πώς να τα εγκαταστήσετε στο σύστημά σας, μπορείτε να ακολουθήσετε τους εκτενείς οδηγούς μας εδώ:

  1. Εγκατάσταση LAMP σε RHEL/CentOS 7
  2. Εγκατάσταση LAMP στο Fedora 22
  3. Ρύθμιση LAMP στο Ubuntu 15.04
  4. Εγκατάσταση του MariaDB στο Debian 8
  5. Εγκαταστήστε το MariaDB στο Gentoo Linux
  6. Εγκαταστήστε το MariaDB στο Arch Linux

Σημαντικό: Πριν ξεκινήσουμε – μην αποδεχτείτε αυτές τις προτάσεις στα τυφλά. Κάθε ρύθμιση της MySQL είναι μοναδική και απαιτεί πρόσθετη σκέψη, πριν κάνετε οποιεσδήποτε αλλαγές.

Πράγματα που πρέπει να γνωρίζετε:

  1. Το αρχείο διαμόρφωσης MySQL/MariaDB βρίσκεται στο /etc/my.cnf. Κάθε φορά που τροποποιείτε αυτό το αρχείο θα πρέπει να κάνετε επανεκκίνηση της υπηρεσίας MySQL, ώστε οι νέες αλλαγές να ισχύουν.
  2. Για τη σύνταξη αυτού του άρθρου η έκδοση MySQL 5.6 έχει χρησιμοποιηθεί ως πρότυπο.

1. Ενεργοποιήστε το αρχείο InnoDB ανά πίνακα

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

Το InnoDB παρέχει πιο ευέλικτη προσέγγιση και κάθε πληροφορία βάσης δεδομένων διατηρείται σε ένα αρχείο δεδομένων .ibd. Κάθε αρχείο .ibd αντιπροσωπεύει έναν δικό του χώρο τραπεζιού. Με αυτόν τον τρόπο οι λειτουργίες της βάσης δεδομένων, όπως "TRUNCATE " μπορούν να ολοκληρωθούν πιο γρήγορα και μπορείτε επίσης να ανακτήσετε αχρησιμοποίητο χώρο κατά την απόθεση ή την περικοπή ενός πίνακα βάσης δεδομένων.

Ένα άλλο πλεονέκτημα αυτής της διαμόρφωσης είναι το γεγονός ότι μπορείτε να διατηρήσετε ορισμένους από τους πίνακες της βάσης δεδομένων σε μια ξεχωριστή συσκευή αποθήκευσης. Αυτό μπορεί να βελτιώσει σημαντικά τη φόρτωση I/O στους δίσκους σας.

Το innodb_file_per_table είναι ενεργοποιημένο από προεπιλογή στην MySQL 5.6 και νεότερη έκδοση. Μπορείτε να το δείτε στο αρχείο /etc/my.cnf. Η οδηγία μοιάζει με αυτό:

innodb_file_per_table=1

2. Αποθηκεύστε δεδομένα βάσης δεδομένων MySQL σε ξεχωριστό διαμέρισμα

Σημείωση: Αυτή η ρύθμιση λειτουργεί μόνο με MySQL, αλλά όχι με MariaDB.

Μερικές φορές η ανάγνωση/εγγραφή του λειτουργικού συστήματος μπορεί να επιβραδύνει την απόδοση του διακομιστή MySQL, ειδικά εάν βρίσκεται στον ίδιο σκληρό δίσκο. Αντίθετα, θα συνιστούσα να χρησιμοποιήσετε ξεχωριστό σκληρό δίσκο (κατά προτίμηση SSD) για την υπηρεσία MySQL.

Για να το ολοκληρώσετε, θα χρειαστεί να συνδέσετε τη νέα μονάδα δίσκου στον υπολογιστή/διακομιστή σας. Για τους σκοπούς αυτού του άρθρου, θα υποθέσω ότι η μονάδα δίσκου θα βρίσκεται κάτω από το /dev/sdb.

Το επόμενο βήμα είναι να προετοιμάσετε τη νέα μονάδα δίσκου:

fdisk /dev/sdb

Τώρα πατήστε "n " για να δημιουργήσετε νέο διαμέρισμα. Στη συνέχεια, πατήστε "p " για να κάνετε το νέο διαμέρισμα κύριο. Μετά από αυτό, ορίστε τον αριθμό διαμερίσματος από 1-4. Μετά από αυτό θα επιλέξετε το μέγεθος του διαμερίσματος. Πατήστε enter εδώ. Στο επόμενο βήμα θα χρειαστεί να διαμορφώσετε το μέγεθος του διαμερίσματος.

Εάν θέλετε να χρησιμοποιήσετε ολόκληρο τον δίσκο, πατήστε enter για άλλη μια φορά. Διαφορετικά, μπορείτε να ορίσετε χειροκίνητα το μέγεθος του νέου διαμερίσματος. Όταν είστε έτοιμοι, πατήστε "w " για να γράψετε τις αλλαγές. Τώρα θα χρειαστεί να δημιουργήσουμε ένα σύστημα αρχείων για το νέο μας διαμέρισμα. Αυτό μπορεί να γίνει εύκολα με:

mkfs.ext4 /dev/sdb1

Τώρα θα προσαρτήσουμε το νέο μας διαμέρισμα σε ένα φάκελο. Ονόμασα τον φάκελο μου "ssd" και δημιούργησα στον ριζικό κατάλογο:

mkdir /ssd/

Είμαστε έτοιμοι να προσαρτήσουμε το νέο διαμέρισμα που μόλις φτιάξαμε στον νέο φάκελο:

mount /dev/sdb1  /ssd/

Μπορείτε να εκτελέσετε την προσάρτηση κατά την εκκίνηση προσθέτοντας την ακόλουθη γραμμή στο αρχείο /etc/fstab.

/dev/sdb1 /ssd ext3 defaults 0 0

Τώρα είστε έτοιμοι να μετακινήσετε τη MySQL στον νέο δίσκο. Πρώτα σταματήστε την υπηρεσία MySQL με:

service mysqld stop

Θα συνιστούσα να σταματήσετε επίσης το Apache/nginx για να αποτρέψετε τυχόν προσπάθειες εγγραφής στις βάσεις δεδομένων:

service httpd stop
service nginx stop

Τώρα αντιγράψτε ολόκληρο τον κατάλογο MySQL στη νέα μονάδα δίσκου:

cp /var/lib/mysql /ssd/ -Rp

Αυτό μπορεί να διαρκέσει λίγο, ανάλογα με την τοποθεσία των βάσεων δεδομένων MySQL. Μόλις ολοκληρωθεί αυτή η διαδικασία μετονομάστε τον κατάλογο MySQL:

mv /var/lib/mysql /var/lib/mysql-backup

Στη συνέχεια θα δημιουργήσουμε έναν συμβολικό σύνδεσμο.

ln -s /ssd/mysql /var/lib/mysql

Τώρα είστε έτοιμοι να ξεκινήσετε τη MySQL και την υπηρεσία web:

service mysqld start
service httpd start
service nginx start

Σε αυτό το σημείο θα γίνει πρόσβαση στις βάσεις δεδομένων MySQL από τη νέα μονάδα δίσκου.