Задавайте вопросы, мы ответим
Вы не зашли.
Поскажите плз хороший аналог профайлера для My Sql
В dbForge Studio for Mysql хорошая отладка скриптов, но это немного не то.
Я хотел бы смотреть и вести весь лог MySql daemon , включая запросы к нему и сообщения от него.
то есть приложение, которое выполняет функции MS SQL profiler.
Заранее спасибо
Неактивен
Профайлер умеет показывать состояние запросов (этапы explain), MySQL эту информацию
отдавать не может. В остальном - логи MySQL умеет писать (в т.ч. и лог запросов); текущие
запросы можно смотреть командой SHOW PROCESSLIST. Бесплатной графической утилиты,
напоминающей MS Profiler, не знаю.
Processlist можно смотреть в MySQL GUI Tools, логи можно собирать и агрегировать какими-то
скриптами.
Неактивен
Я попытался проверить так ли это, что Вы говорите.
Давайте создадим а-ля processlist с добавлением поля типа даты и событие, которое каждую секунду туда пишет содержимое из оригинальной таблицы information_schema.processlist
Далее код (версия MySql 5.1.31) для схемы test:
SET GLOBAL event_scheduler = ON;
USE test;
DROP TABLE IF EXISTS `processlist_log`;
CREATE TABLE `processlist_log`(
`ID` BIGINT (4) NOT NULL DEFAULT 0,
`USER` VARCHAR (16) NOT NULL,
`HOST` VARCHAR (64) NOT NULL,
`DB` VARCHAR (64) DEFAULT NULL,
`COMMAND` VARCHAR (16) NOT NULL,
`TIME` BIGINT (7) NOT NULL DEFAULT 0,
`STATE` VARCHAR (64) DEFAULT NULL,
`INFO` LONGTEXT DEFAULT NULL,
`dtm` DATETIME,
`num` INT PRIMARY KEY AUTO_INCREMENT
)
ENGINE = MYISAM
CHARACTER SET utf8
COLLATE utf8_general_ci;
DROP EVENT IF EXISTS `processlist_log_event`;
DELIMITER @@@
CREATE EVENT IF NOT EXISTS `processlist_log_event`
ON SCHEDULE
EVERY 1 SECOND
COMMENT 'ip'
DO
BEGIN
INSERT INTO `test`.`processlist_log`(`ID`, `USER`, `HOST`, `DB`, `COMMAND`, `TIME`, `STATE`, `INFO`, `dtm`)
SELECT
`ID`, `USER`, `HOST`, `DB`, `COMMAND`, `TIME`, `STATE`, `INFO`,
CAST(CONCAT(CAST(CURDATE() AS char(32)),' ',CAST(CURTIME() AS char(32))) AS datetime)
FROM
`information_schema`.`processlist`;
END;
@@@
DELIMITER ;
Так вот я не вижу, что текущий процесс события видит то, что выполняют другие приложения. Он видит только то, что выполняет сам.
И во вторых он записывает в поле инфо не оператор, который выполняет, а только его первую строку до символа новая строка.
Так ли это? Или я ошибаюсь и делаю нечто неверное?
/*
-- тестируем
USE test;
SELECT
*
FROM
`processlist_log`;
*/
Неактивен
Еще одно обстоятельство, которое не могу разрешить для себя. Если я предоставляю право вести профиль своих запросов нескольким пользователям или приложениям, то как идентифицировать содержимое таблицы profiling к интересующему приложению? видимо гдето существует связь query_id and connection_id()?
SET profiling = 1;
USE information_schema;
SELECT
*
FROM
profiling
order by query_id,seq;
Неактивен
1. Другие потоки видны только, если текущий пользователь обладает привилегией SUPER.
2. Вместо вот той жуткой конструкции с кастами лучше использовать NOW().
3. Profiling работает, насколько я знаю, на текущий поток - профилирование других потоков Вы не увидите.
Неактивен
1. Другие потоки видны только, если текущий пользователь обладает привилегией SUPER.
Это относится к системному пользователю или mysql? Я логинюсь под root, а система windows 2003 server. Разве он не super?
А как его сделать super?
2. Вместо вот той жуткой конструкции с кастами лучше использовать NOW().
Это я согласен.
3. Profiling работает, насколько я знаю, на текущий поток - профилирование других потоков Вы не увидите.
Да нет похоже на то, что я вижу. Дав разрешение профилирования на одной и той же БД разным процессам (разные connection_id()) я вижу
SELECT
*
FROM
`information_schema`.`profiling`
ORDER BY
query_id, seq;
все вместе в одной таблице. И как эту кучу разбирать?
Я пробовал сам настроить лог следующим путем
----------------------------------------------------------
Это я добавил в ini файл
[mysqld]
#
#log = c:/tmp/mysqld.log
log-bin=c:/tmp/binlog_mysqld.bin
binlog-do-db=test
Далее перезапустил демон сервера
Получил бинарный файл лога и конвертировал его
C:\tmp>mysqlbinlog binlog_mysqld.000001 > binlog.txt
Но вот потом никак не могу его импортировать в таблицу
USE test;
DROP TABLE IF EXISTS `logd`;
CREATE TABLE `logd`(
`origin` text NULL
-- ,`num` INT PRIMARY KEY AUTO_INCREMENT
)
ENGINE = MYISAM
CHARACTER SET utf8
COLLATE utf8_general_ci;
LOAD DATA LOCAL INFILE 'c:/tmp/binlog.txt
INTO TABLE `test`.`logd`
FIELDS TERMINATED BY '' ENCLOSED BY ''
LINES TERMINATED BY '\r\n' (`origin`);
На последнем операторе почемуто теряется коннекция с сервером.
Сколько можно ходить одной и той же дорогой? Есть здесь спутники или нет?
Неактивен
Windows Server 2003 у меня, к сожалению, нет, чтобы попробовать
1. В Linux работает нормально под root (показывает все соединения).
3. Обратная ситуация
Подозреваю, что в Windows багов больше, чем на Linux, т.к. основная разработка идет на Solaris
и Linux. Может быть, в этом дело. Советую Вам все-таки написать что-то, что делает старые
команды из 5.0 (SHOW PROCESSLIST) и смотрит их. Так же как и агрегирует логи.
Бинлог Вас, кстати, не устроит, вам же SELECT тоже нужны? Используйте --log.
Неактивен
То есть Вы хотите сказать, что работая под системным рутом линукса все работает строго наоборот?
А при чем тут системный логин? Я же коннекчусь к mysql под его рутом (root). Косвенно вижу для себя предложение вернуться на Unix.
Я в свое время на PDP 11/34 работал. В то время призводители этого продукта утверждали, что С компилятор будет частью операционной системы и абсолютно бесплатным. Так что хрен редьки не слаще.
Да, я научился обрабатывать лог и анализировать его. Единственное, что сами сообщения от mysql server в него не складываются.
Может быть есть такая возможность, чтобы можно было анализировать и сообщения сервера? Что отвечает сервер тоже интересно.
Жаль, что таймстампы без миллисекунд. Это специальное ограничение? Кстати и бинлоги сгодятся для того, чтобы реализовать процесс репликации двух серверов. Надо только уметь сливать два бинлога вместе, разрешая конфликты.
Кстати а как быть с репликацией mysql серверов? Тоже вопрос интересный.
Это уже распарсенный лог:
2009-02-17 15:26:53.000 3 SELECT * FROM `processlist_log` ;
2009-02-17 15:26:55.000 3 SELECT * FROM `information_schema`.`profiling` ORDER BY query_id, seq ;
2009-02-17 15:26:55.000 3 SELECT CONNECTION_ID();
2009-02-17 15:27:54.000 4 select * from `information_schema`.`profiling`;
2009-02-17 15:27:59.000 4 select * from `information_schema`.`profiling`;
2009-02-17 15:28:13.000 4 select * from `dvsys_instances`;
Неактивен
Честно говоря, не понял про репликацию.
По поводу того, как работает под линухом - у меня работает так, как описано в документации и так,
как, я считаю, должно работать
Неактивен
Igor Panshin написал:
Поскажите плз хороший аналог профайлера для My Sql
В dbForge Studio for Mysql хорошая отладка скриптов, но это немного не то.
Я хотел бы смотреть и вести весь лог MySql daemon , включая запросы к нему и сообщения от него.
то есть приложение, которое выполняет функции MS SQL profiler.
Заранее спасибо
Уважаемые пользователи!
MySQL Profiler будет доступен в dbForge Studio for MySQL начиная с версии 4.20.
Более подробно, что будет включено в новую версию, можно ознакомиться на форуме dbForge Studio:
http://www.devart.com/ru/forums/viewtop … mp;start=0
Неактивен
devart написал:
Igor Panshin написал:
Поскажите плз хороший аналог профайлера для My Sql
В dbForge Studio for Mysql хорошая отладка скриптов, но это немного не то.
Я хотел бы смотреть и вести весь лог MySql daemon , включая запросы к нему и сообщения от него.
то есть приложение, которое выполняет функции MS SQL profiler.
Заранее спасибоУважаемые пользователи!
MySQL Profiler будет доступен в dbForge Studio for MySQL начиная с версии 4.20.
Более подробно, что будет включено в новую версию, можно ознакомиться на форуме dbForge Studio:
http://www.devart.com/ru/forums/viewtop … mp;start=0
MySQL Profiler уже доступен в dbForge Studio for MySQL, v4.50!
Неактивен
Попробуйте простой консольный профайлер Neor Profile. Позволяет профилировать запросы от приложения и искать узкие места.
Неактивен
Чайка клевая :-)
Неактивен
это гусик :-)
Неактивен
У гуся крылья меньше и клюв больше: http://img-fotki.yandex.ru/get/4613/349 … 6060d79f_S
Неактивен
Не скажи, твой гусь не правильный
http://img-fotki.yandex.ru/get/4419/101 … b03ade0_XL
Неактивен
Офигеть
Ну, ладно, пусть будет для вас гусь, а для меня — чайка
Неактивен
в новой версии будет настоящая летящая чайка (споров не будет :-)
Неактивен