Боролся с тормозами mySql, записал, что может помочь в будущем.
1
mysqladmin extended
выдаёт всякие разные статы БД. Из них полезные:
- Uptime – сколько живет демон, в секундах
- Questions – сколько было запросов
- Select_scan – сколько запросов вызвали полный скан таблицы
- Slow_queries – сколько было медленных запросов
Мониторить эти параметры можно вот так, например:
watch -n 1 'mysqladmin extended | grep "Uptime\|Questions\|Select_scan\|Slow_queries"'
2
/var/log/mysql/mysql-slow.log
В этот лог пишутся медленные запросы. Чтобы они вообще писались, добавьте или раскомменьте строки в /etc/mysql/my.conf –
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
В реальном времени мониторим так:
tail -f /var/log/mysql/mysql-slow.log
3
Ну и в финале, когда понятно, какие запросы тормозят –
explain select * ....
скажет вам что происходит с запросом. Можно поймать запросы без индекса и т.п.
Я например выяснил, что запрос типа
select * from some_table where flag&4;
игнорит индекс по flag.
Так что, лучше использовать
select * from some_table where flag in (4,5,6,7);
4
Ну и на заметку – посмотреть таблицы в БД, посмотреть описание полей таблицы и типов столбцов, оптимизировать таблицу (если активная работа с ней, особенно много удалений)
show tables;
describe some_table;
optimize some_table;
Если можно как-то еще бороться с mysql – буду рад узнать как.
Comments