Naudojantis
MySQL duomenų bazėmis galite susidurti su įvairiomis vykdomų užklausų problemomis. Kartais jos pasireikšti tik pradėjus darbą su duomenų bazių duomenimis. Daugumoje duomenų bazių sistemų, įtraukiant, bet neapsiribojant MySQL, užklausos formuluotė turi pasibaigti simboliu ";", kaip pavyzdžiui:
mysql> SHOW * FROM lentelės_pavadinimas;
Jeigu nepateiksite ";" simbolio užklausos pabaigoje komandinė eilutė ir toliau leis Jums pildyti užklausos tekstą spaudžiant
ENTER iki tol kol nebus nurodytas pageidaujamas simbolis. Todėl užklausoje gali atsirasti nepageidaujamas tekstas.
Viena iš dažniausiai pasitaikančių problemų susijusių su duomenų bazėmis yra ilgai vykdomos užklausos. Norint sužinoti lėtos užklausos priežastį reikėtų įjungti lėtų užklausų išrašo fiksavimą. Tam atlikti atsidarykite failą
mysqld.cnf, kuris yra skirtas konfigūruoti MySQL nustatymus serveryje. Šis failas standartiškai yra saugomas šioje
/etc/mysql/mysql.conf.d/ direktorijoje. Norint koreguoti šį failą naudokite komandą:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Slinkite per failą kol pamatysite nurodytas eilutes:
. . .
#slow_query_log = 1
#slow_query_log_file = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .
Šios užkomentuotos eilutės suteikia standartinius nustatymus MySQL lėtų užklausų išrašui. Žemiau aprašome kiekvienos eilutės reikšmes:
*
slow-query-log - reikšmė 1 reiškia, kad lėtų užklausų fiksavimas yra įjungtas.
*
slow-query-log-file - šio parametro reikšmėje nurodomas lėtų užklausų saugumo failo kelias. Šiuo atveju jis yra
/var/log/mysql-slow.log faile.
*
long_query_time - nurodant 2 reikšmę yra nustatoma, kad bus fisuojamos visos užklausos, kurios trunka ilgiau nei 2 sekundes.
*
log_queries_not_using_indexes - šis parametras taip pat nurodo, kad būtų saugomos ir visos užklausos, kurios nesiindeksuoja.
Atkomentuokite kiekvieną eilutę pašalindami grotelių simbolį "#". Šis failas turėtų atrodyti taip:
. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .
SVARBU: Jeigu naudojate MySQL 8+ versiją šios eilutės nebus įtrauktos į
mysqld.cnf pagal nutylėjimą. Tokiu atveju šias eilutes galite nurodyti failo apačioje:
. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
Įjungus lėtų užklausų išrašą turite išsaugoti ir uždaryti failą. Tada perkraukite MySQL tarnybą:
sudo systemctl restart mysql
Atlikus šiuos nustatymus Jūs galite peržiūrėti problemines užklausas peržiūrint lėtų užklausų failą. Galite peržiūrėti išrašą po vieną eilutę naudodami
less komandą:
sudo less /var/log/mysql_slow.log
Kai surasite užklausą, kuri sukelia problemų, turėtumėte optimizuoti užklausas bei/arba lenteles.
MySQL papildomai įtraukia EXPLAIN formuluotę, kurioje suteikiama informacija kaip MySQL vykdo užklausas. MySQL
dokumentacijoje rasite paaiškinimą kaip naudoti EXPLAIN nekorektiškų užklausų išskyrimui.