Hostdog - mysql https://www.hostdog.gr/tags/mysql el Σημαντικές μεταβλητές MySQL server https://www.hostdog.gr/blog/%CF%83%CE%B7%CE%BC%CE%B1%CE%BD%CF%84%CE%B9%CE%BA%CE%AD%CF%82-%CE%BC%CE%B5%CF%84%CE%B1%CE%B2%CE%BB%CE%B7%CF%84%CE%AD%CF%82-mysql-server <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even">Άσχετα αν χρησιμοποιείτε έναν MySQL server ή έναν cluster από πολλούς, ένα πράμα είναι σίγουρο ανάμεσα στους χρήστες. Η βελτιστοποίηση όσο το δυνατόν περισσότερο της MySQL. Κάτι που οι developers της MySQL το γνωρίζουν και μας δίνουν μια σειρά από κατανοητές μεταβλητές που μπορεί κανείς να παρακολουθεί σε πραγματικό χρόνο, για να ελέγχει την κατάσταση και την απόδοση του MySQL server του. Αυτές οι μεταβλητές εμφανίζονται με την SHOW STATUS εντολή. Παρακάτω ακολουθούν 10 σημαντικές μεταβλητές που μας βοηθούν να εξάγουμε συμπεράσματα για την κατάσταση του MySQL server μας. <strong>1. Threads_connected</strong> Μας δείχνει τον συνολικό αριθμό των χρηστών που συνδέονται κι έχουν ανοιχτές συνδέσεις με τον MySQL server. Μας δίνει μία ακριβή μέτρηση για το πόσοι είναι συνδεδεμένοι σε πραγματικό χρόνο και μπορεί να φανεί χρήσιμο αν θέλουμε να προγραμματίσουμε πχ κάποια επανεκίνηση του MySQL server με το μικρότερο δυνατό αντίκτυπο. <strong>2. Created_tmp_disk_tables</strong> Δείχνει τον αριθμό των προσωρινών πινάκων που δημιουργήθηκαν στον δίσκο αντί στην μνήμη (RAM) του server μας. Η πρόσβαση σε πίνακες που έχουν δημιουργηθεί στον δίσκο είναι σε γενικές γραμμές πιο αργή από τους ίδιους πίνακες που θα ήταν φορτωμένοι στην μνήμη RAM. <strong>3. Handler_read_first</strong> Μας λέει πόσες φορές ένας "χειριστής πίνακα" έκανε άιτηση να διαβάσει την πρώτη γραμμή ενός ευρετηρίου πίνακα. Αν η MySQL ζητάει συχνά την πρώτη γραμμή ενός ευρετηρίου πίνακα (table index), σημαίνει συνήθως ότι κάνει διαδοχική ανάγνωση ολόκληρου του ευρετηρίου. Κάτι που υποδηλώνει ότι ο συγκεκριμένος πίνακας δεν είναι σωστά ευρετηριασμένος. <strong>4. Innodb_buffer_pool_wait_free</strong> Αυτή η μεταβλητή δείχνει πόσες φορές η MySQL αναγκάστηκε να περιμένει έως ότου αδειάσουν σελίδες από την μνήμη RAM. Αν αυτή η τιμή είναι υψηλή, σημαίνει ότι το μεμορυ buffer της MySQL δεν είναι σωστά ρυθμισμένο για τον αριθμό των εγγραφών που εκτελούνται εκείνη την στιγμή από τον MySQL server. <strong>5. Key_reads</strong> Δείχνει πόσες φορές η MySQL χρησιμοποίησε το σύστημα των αρχείων (διάβασε από τον δίσκο) για να πάρει ευρετήρια βάσεων δεδομένων. Αυτή η συμπεριφορά κάνει την εκτέλεση των queries πιο αργή. Αν το νούμερο είναι υψηλό δείχνει ότι η key cache της MySQL είναι υπερφορτωμένη και θα πρέπει να ξαναρυθμιστεί. <strong>6. Max_used_connections</strong> Μας δείχνει τον μέγιστο αριθμό συνδέσεων που είχε ταυτόχρονα ο MySQL server από την στιγμή που ξεκίνησε. Αυτή η τιμή αποτελεί ένα μέτρο σύγκρισης για να μας βοηθήσει να αποφασίσουμε τον μέγιστο αριθμό συνδέσεων που θα επιτρέπονται από τον server. Μπορεί να χρησιμοποιηθεί και σε ανάλυση επισκεψιμότητας επίσης. <strong>7. Open_tables</strong> Μας λέει τον αριθμό των πινάκων που είναι εκείνη την στιγμή ανοιχτοί. Αυτή η μεταβλητή καλό είναι να αναλύεται η ερμηνεία της σε συνδιασμό με το μέγεθος της table cache. Αν αυτή η τιμή είναι μικρή και η τιμή table_cache είναι υψηλή, τότε είναι μάλλον ασφαλές να μειώσουμε το μέγεθος της table_cache χωρίς να έχουμε αντίκτυπο στην απόδοση. Από την άλλη αν αυτή η τιμή είναι υψηλή, κοντά στην τιμή της table_cache τότε υπάρχει ώφελος από την αύξηση της table_cache. (Θυμηθείτε: είναι ένα από τους ελέγχους που πραγματοποιεί το <a href="https://www.hostdog.gr/blog/%CE%B2%CE%B5%CE%BB%CF%84%CE%B9%CF%83%CF%84%CE%BF%CF%80%CE%BF%CE%AF%CE%B7%CF%83%CE%B7-%CE%B2%CE%AC%CF%83%CE%B7%CF%82-%CE%B4%CE%B5%CE%B4%CE%BF%CE%BC%CE%AD%CE%BD%CF%89%CE%BD-mysql-%CE%BC%CE%B5-%CF%84%CE%BF-mysqltunerpl" title=" Βελτιστοποίηση βάσης δεδομένων MySQL με το mysqltuner.pl ">mysqltuner script)</a> <strong>8. Select_full_join</strong> Αυτή η μεταβλητή δείχνει τον αριθμό FULL JOINS που έχει πραγματοποιήσει η MySQL για να απαντήσει στα queries των χρηστών. Μια υψηλή τιμή δείχνει ότι η MySQL αναγκάζεται να εκτελεί FULL JOINS σε πίνακες κάτι που επηρρεάζει αρκετά την απόδοση, αντί να χρησιμοποιεί ευρετήρια. Καλό είναι να χρησιμοποιηθούν μεγαλύτερα ευρετήρια για τους συγκεκριμένους πίνακες. <strong>9. Slow_queries</strong> Η μεταβλητή αυτή λέει πόσα queries πήραν παραπάνω χρόνο από το συνηθισμένο για να εκτελεστούν. Μεγάλος αριθμός slow_queries δείχνει ότι τα queries μας δεν είναι εκτελούνται με τον βέλτιστο τρόπο. Ένα αναγκαίο βήμα σε αυτήν την περίπτωση είναι να εξεταστεί το αρχείο καταγραφών των αργών queries (slow log queries) και να προσπαθήσουμε να τα βελτιστοποιήσουμε. <strong>10. Uptime</strong> Μας λέει τον συνολικό χρόνο (σε δευτερόλεπτα) από τότε που ξεκίνησε ο Mysql server. Είναι μια χρήσιμη τιμή που μας δίνει μια γενική εικόνα, επίσης πολύ μικρό νούμερο δείχνει ότι ο MySQL server κάνει συχνά restart κάτι που θα οδηγεί σε διακοπές πρόσβασης στους χρήστες.</div></div></div><div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">Tags: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="https://www.hostdog.gr/tags/monitoring">monitoring</a></li><li class="taxonomy-term-reference-1"><a href="https://www.hostdog.gr/tags/mysql">mysql</a></li></ul></div> Wed, 22 May 2013 10:47:48 +0000 n.stefanis 358 at https://www.hostdog.gr Βελτιστοποίηση βάσης δεδομένων MySQL με το mysqltuner.pl https://www.hostdog.gr/blog/%CE%B2%CE%B5%CE%BB%CF%84%CE%B9%CF%83%CF%84%CE%BF%CF%80%CE%BF%CE%AF%CE%B7%CF%83%CE%B7-%CE%B2%CE%AC%CF%83%CE%B7%CF%82-%CE%B4%CE%B5%CE%B4%CE%BF%CE%BC%CE%AD%CE%BD%CF%89%CE%BD-mysql-%CE%BC%CE%B5-%CF%84%CE%BF-mysqltunerpl <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even">Το MySQLTuner είναι ένα Script γραμμένο στην γλώσσα perl το οποίο με βάση τα στατιστικά που έχουν μαζέψει τα logs της MySQL δίνει κάποιες σχετικά ασφαλείς υποδείξεις για το τι τιμές μπορούν να αλλαχτούν στο αρχείο ρυθμίσεων της MySQL για παραπάνω απόδοση. Αρχικά το κατεβάζουμε και το κάνουμε εκτελέσιμο: <div class="codeblock"><code>wget https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.pl<br />chmod +x mysqltuner.pl </code></div> Έπειτα το τρέχουμε: <div class="codeblock"><code> ./mysqltuner.pl</code></div> Καλό είναι να τρέχει λίγο καιρό η MySQL, όσο περισσότερο, τόσο πιο ακριβείς υποδείξεις θα πάρουμε, αντίθετα αν προσπαθήσουμε να το τρέξουμε μετά από ένα restart της MySQL, θα πάρουμε μήνυμα "MySQL started within last 24 hours – recommendations may be inaccurate." <div class="codeblock"><code> &gt;&gt;  MySQLTuner 1.2.0 - Major Hayden &lt;major@mhtx.net&gt;<br /> &gt;&gt;  Bug reports, feature requests, and downloads at http://mysqltuner.com/<br /> &gt;&gt;  Run with '--help' for additional options and output filtering<br /><br />-------- General Statistics --------------------------------------------------<br />[--] Skipped version check for MySQLTuner script<br />[OK] Currently running supported MySQL version 5.1.68-cll<br />[OK] Operating on 64-bit architecture<br /><br />-------- Storage Engine Statistics -------------------------------------------<br />[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster<br />[--] Data in MyISAM tables: 1G (Tables: 5367)<br />[--] Data in InnoDB tables: 400M (Tables: 4079)<br />[--] Data in MEMORY tables: 0B (Tables: 33)<br />[!!] Total fragmented tables: 4684<br /><br />-------- Security Recommendations  -------------------------------------------<br />[OK] All database users have passwords assigned<br /><br />-------- Performance Metrics -------------------------------------------------<br />[--] Up for: 15d 10h 40m 6s (68M q [51.568 qps], 1M conn, TX: 794B, RX: 12B)<br />[--] Reads / Writes: 77% / 23%<br />[--] Total buffers: 78.0M global + 7.5M per thread (800 max threads)<br />[OK] Maximum possible memory usage: 5.9G (76% of installed RAM)<br />[OK] Slow queries: 0% (1K/68M)<br />[OK] Highest usage of available connections: 8% (66/800)<br />[OK] Key buffer size / total MyISAM indexes: 36.0M/229.4M<br />[OK] Key buffer hit rate: 98.5% (572M cached / 8M reads)<br />[OK] Query cache efficiency: 70.8% (38M cached / 54M selects)<br />[!!] Query cache prunes per day: 723587<br />[OK] Sorts requiring temporary tables: 0% (4K temp sorts / 2M sorts)<br />[!!] Joins performed without indexes: 109545<br />[!!] Temporary tables created on disk: 31% (1M on disk / 4M total)<br />[OK] Thread cache hit rate: 99% (66 created / 1M connections)<br />[!!] Table cache hit rate: 0% (1K open / 83M opened)<br />[OK] Open file limit used: 3% (1K/48K)<br />[OK] Table locks acquired immediately: 99% (26M immediate / 26M locks)<br />[!!] InnoDB data size / buffer pool: 400.4M/8.0M<br /><br />-------- Recommendations -----------------------------------------------------<br />General recommendations:<br />    Run OPTIMIZE TABLE to defragment tables for better performance<br />    Enable the slow query log to troubleshoot bad queries<br />    Adjust your join queries to always utilize indexes<br />    When making adjustments, make tmp_table_size/max_heap_table_size equal<br />    Reduce your SELECT DISTINCT queries without LIMIT clauses<br />    Increase table_cache gradually to avoid file descriptor limits<br />Variables to adjust:<br />    query_cache_size (&gt; 16M)<br />    join_buffer_size (&gt; 2.0M, or always use indexes with joins)<br />    tmp_table_size (&gt; 16M)<br />    max_heap_table_size (&gt; 16M)<br />    table_cache (&gt; 1024)<br />    innodb_buffer_pool_size (&gt;= 400M)</code></div> Θα πρέπει να διαβάσετε προσεκτικά ότι αποτελέσματα εμφανίζει και ειδικά τις προτάσεις στο τέλος που υποδεικνύουν ακριβώς ποιες μεταβλητές στην ενότητα [mysqld] στο αρχείο ρυθμίσεων πρέπει να αλλάξετε (/etc/mysql/my.cnf σε Debian και Ubuntu). Να θυμάστε ότι μετά από αλλαγές στο my.cnf θα πρέπει να κάνετε restart το service της MySQL. Μετά τις αλλαγές μπορείτε να επιστρέψετε μετά από 2 ή 3 μέρες και να ξανατρέξετε το mysqltuner.pl ώστε να δείτε αν υπάρχουν επιπλέον προτάσεις από τις αρχικές, έτσι κάνετε βήμα προς βήμα βελτιστοποίηση των ρυθμίσεων. Δώστε ιδιαίτερη έμφαση στο πεδίο "Query cache efficiency" και σημειώνετε την μεταβολή του ποσοστού. Αυτή η μέθοδος είναι ιδανική για εκμάθηση, στην περίπτωση που βρίσκατε τυχαία στο Internet κάποια configurations με παραπλήσια χαρακτηριστικά hosting με τα δικά σας και είχατε να αλλάξετε ένα κατεβατό από μεταβλητές που θα μπορούσε να σας μπερδέψει ή δεν θα σας άφηνε χρόνο να διαβάσετε το τι ορίζει η κάθε αλλαγή. Σημείωση: Ό,τι αλλαγές κι αν κάνετε στο my.cnf αρχείο ρυθμίσεων της MySQL σας, εμείς δεν φέρουμε καμμιά ευθύνη αφενός κι αφετέρου σας συστήνουμε ακράδαντα να κάνετε backup τόσο του αρχείου ρυθμίσεων πριν τις αλλαγές όσο και ολόκληρης της βάσης.</div></div></div><div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-above clearfix"><h3 class="field-label">Tags: </h3><ul class="links"><li class="taxonomy-term-reference-0"><a href="https://www.hostdog.gr/tags/linux">linux</a></li><li class="taxonomy-term-reference-1"><a href="https://www.hostdog.gr/tags/mysql">mysql</a></li><li class="taxonomy-term-reference-2"><a href="https://www.hostdog.gr/tags/mysql-optimization">mysql optimization</a></li><li class="taxonomy-term-reference-3"><a href="https://www.hostdog.gr/tags/optimization">optimization</a></li><li class="taxonomy-term-reference-4"><a href="https://www.hostdog.gr/tags/database-optimization">database optimization</a></li><li class="taxonomy-term-reference-5"><a href="https://www.hostdog.gr/tags/mysqltuner">mysqltuner</a></li></ul></div> Wed, 01 May 2013 13:21:53 +0000 ploupas 349 at https://www.hostdog.gr