Временное ведение лога всех запросов к MySQL |
[исправить] |
Использование опций конфигурации log-slow-queries и general_log, позволяющих вести полный лог
медленных или всех запросов, требует перезапуска mysql для включения или выключения ведения логов,
что неудобно в ситуации, когда нужно проанализировать запросы только в текущий момент.
Для анализа запросов (не через локальный сокет) на лету можно воспользоваться сетевым сниффером.
Перехватываем и записываем срез трафика MySQL в файл:
tcpdump -i eth0 port 3306 -s 1500 -w tcpdump.out
Выделяем из дампа SQL запросы, используя утилиту tshark из комплекта сниффера
Wireshark (http://www.wireshark.org/):
tshark -r tcpdump.out -d tcp.port==3306,mysql -T fields -e mysql.query > query_log.out
Удаляем из полученного лога пустые и неинформативные строки:
cat query_log.out | grep -vE "^(commit.*|autocommit.*|rollback.*|)$" | awk '{print $0 ";"}' > query_log_no_blank.out
Полученный лог удобно анализировать утилитой mysqlsla (http://hackmysql.com/mysqlsla)
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / SQL и базы данных / MySQL специфика / Оптимизация и администрирование MySQL |
1.1, XoRe (ok), 10:10, 30/01/2009 [ответить]
| +/– |
Кто подскажет, чем можно помочь в случае соединения к mysql через unix сокет (.../mysql.sock) ?
| |
1.4, Toxa (??), 22:57, 30/01/2009 [ответить]
| +/– |
А зачем на лыжах и в гамаке?
tcpdump -n -i $if -s 0 -w - port 3306 and dst $ip | strings
| |
|
|
3.7, Toxa (??), 02:15, 31/01/2009 [^] [^^] [^^^] [ответить]
| +/– |
А-а-а-а, ну, тоже дело.
Кстати, очень понравилось удаление "неинформативных" commit и rollback, с оставлением begin :-)
| |
|
4.10, zerg (??), 16:54, 03/02/2009 [^] [^^] [^^^] [ответить]
| +/– |
э-э-э... ключик "-v" у грепа -- енто ж с точностью до наоборот, как раз коммиты и роллбэки БУДУТ присутствовать в логе, в отличие от бегинов. ;-)
| |
|
|
|
|
2.9, uldus (ok), 21:33, 02/02/2009 [^] [^^] [^^^] [ответить]
| +/– |
>а чем плохо "log = /var/log/MySQL.log"?
Не подходит для включения лога на время, так как требует перезапуска mysqld, а постоянно держать - лишняя нагрузка, при сотне запросов в секунду лог растет как на дрожжах.
| |
|
|