Шатания вокруг mySql

Боролся с тормозами 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