Вопрос: AWS RDS MySQL / медленный журнал запросов


Я пытаюсь проанализировать медленные запросы в своей системе, и я прочитал, что должен включить «Журнал медленных запросов». Мне интересно, как я могу просмотреть этот журнал, когда я использую экземпляр MySQL, размещенный на RDS Amazon Web Service.


7
2017-11-06 20:46


Источник




Ответы:


Знаете ли вы, что есть медленная таблица журналов? Это называется mysql.slow_log:

mysql> show create table mysql.slow_log\G
*************************** 1. row ***************************
       Table: slow_log
Create Table: CREATE TABLE `slow_log` (
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `query_time` time NOT NULL,
  `lock_time` time NOT NULL,
  `rows_sent` int(11) NOT NULL,
  `rows_examined` int(11) NOT NULL,
  `db` varchar(512) NOT NULL,
  `last_insert_id` int(11) NOT NULL,
  `insert_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `sql_text` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.01 sec)

mysql>

Для запуска медленных запросов в mysql.slow_log необходимо активировать две переменные:

Вот ситуация

mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.01 sec)

mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+
1 row in set (0.01 sec)

mysql>

log_output уже по умолчанию TABLE, Вам нужно будет включить slow_query_log, Вот что вы должны сделать:

Если ваш экземпляр RDS не имеет группы параметров DB ...

  1. Выделите экземпляр MySQL AmazonRDS, в котором используется группа параметров базы данных.
  2. Отредактируйте группу параметров базы данных, установив для параметра slow_query_log значение 1
  3. Перезапустить экземпляр БД

Если ваш экземпляр RDS имеет группу параметров DB ...

  1. Отредактируйте группу параметров базы данных, установив для параметра slow_query_log значение 1
  2. Перезапустить экземпляр БД

После перезапуска экземпляра войдите в mysql и запустите этот запрос.

mysql> SELECT SLEEP(15);

Поскольку значение по умолчанию для long_query_time составляет 10 секунд, запрос SELECT SLEEP(15); должны появиться в mysql.slow_log, Прочтите документацию RDS, чтобы узнать, есть ли какие-либо ограничения в таблице.

ПРЕДОСТЕРЕЖЕНИЕ

Вот справедливое предупреждение. уведомление mysql.slow_log является CSV-файлом. В таблице нет ключа. Пока вы можете запросить таблицу, она будет выполнять полное сканирование таблицы. Было бы здорово, если бы вы могли сделать следующее:

ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX (start_time);

Затем вы можете запросить очень быстро для диапазонов даты и времени. Я попытался запустить это, и я понял:

mysql> ALTER TABLE mysql.slow_log ENGINE=MyISAM;
ERROR 1044 (42000): Access denied for user 'lwdba'@'%' to database 'mysql'
mysql>

Проверьте документацию RDS, чтобы узнать, может ли Amazon сделать это для вас.

Попробуйте !!!


10
2017-11-06 22:31



Вы получаете отказ в доступе, поскольку RDS не дает вам привилегий SUPER. - ceejayoz
Вау, большое спасибо, это полностью отвечает на мои вопросы. - Philip Isaacs


Вы также можете скопировать таблицу в новую в другом db и создать новый MyISAM:

create table my_slow_logs as select * from mysql.slow_log;
alter table my_slow_logs engine=MyISAM;

(тогда select from my_slow_logs...)

Amazon RDS позволяет это, если вы делаете это за пределами базы данных MySQL.


1
2018-04-07 18:58



Мне жаль, что я просто замечаю это. Я могу использовать это. - RolandoMySQLDBA