Как изменить движок таблицы amazon rds mysql.slow_log на myisam
У меня есть экземпляр Aurora mysql RDS на AWS. Я включил general_logs на пару дней, чтобы проанализировать некоторые проблемы с помощью общих журналов. Эти журналы огромны для запроса и фильтрации определенных записей. Так как механизмом по умолчанию для таблицы общего журнала является CSV, поиск требуемых данных происходит очень медленно. Я читал, что мы можем изменить движок general_log на MyISAM и проиндексировать столбец event_time. Но я не могу найти вариант для этого на консоли AWS. Кто-нибудь может помочь с этим?
1 ответ
Я не думаю, что вы можете изменить это. Даже если вы, я настоятельно советую против этого. ( Написал об этом в DBA StackExchange кратко) Почему???
AMAZON RDS
Я думаю, что Amazon будет вращать медленный журнал для вас. Это требует, чтобы механизм хранения оставался CSV
, .CSV
Это просто файл CRLF с полями, разделенными запятыми и символьными строками, заключенными в двойные кавычки ( см. мой старый пост в DBA StackExchange, где я создал таблицу CSV, загрузил ее с данными и просмотрел в командной строке Windows).
Вращение медленного журнала как CSV
таблица может быть сделана с файловым усечением .CSV
за пределами mysqld с последующим FLUSH TABLES mysql.slow_log;
# echo -n > slow_log.CSV
# mysql -ANe"SET GLOBAL slow_query_log=0;FLUSH TABLES mysql.slow_log;SET GLOBAL slow_query_log=1;"
или же:
mysql> SET GLOBAL slow_query_log = 0;
mysql> TRUNCATE TABLE mysql.slow_log;
mysql> SET GLOBAL slow_query_log = 1;
или же
mysql> SET GLOBAL slow_query_log = 0;
mysql> CREATE TABLE mysql.slow_log_new LIKE mysql.slow_log;
mysql> RENAME TABLE mysql.slow_log LIKE mysql.slow_log_old;
mysql> RENAME TABLE mysql.slow_log_new LIKE mysql.slow_log;
mysql> SET GLOBAL slow_query_log = 1;
mysql> RENAME TABLE mysql.slow_log_old;
Если Amazon допустит медленный журнал как таблицу MyISAM, вышеуказанные операции будут медленнее или просто невозможны. В любом случае вы не можете сделать это, потому что Amazon не позволяет никому иметь привилегию SUPER.
ЧТО ТЫ МОЖЕШЬ СДЕЛАТЬ
Возможно, вы можете создать копию медленного журнала (если у вас есть место в экземпляре RDS)
Во-первых, отключите медленный журнал в группе параметров БД (я надеюсь, что RDS не сбрасывает медленный журнал при отключении медленного медленного. Будем надеяться, что это не так).
Затем запустите эти:
CREATE DATABASE mylogs;
CREATE TABLE mylogs.my_slow_log LIKE mysql.slow_log;
ALTER TABLE mylogs.my_slow_log ENGINE=MyISAM;
INSERT INTO mylogs.my_slow_log SELECT * FROM mysql.slow_log;
ALTER TABLE mylogs.my_slow_log ADD INDEX (start_time);
Затем снова включите медленный журнал.
Теперь вы можете запросить вашу копию медленного журнала по дате и времени (время начала индексировано), а также по пользователю и хосту.
Как только вы закончите анализ, вы можете оставить свой стол.
Что об общем журнале???
Не беспокойся Вам лучше использовать медленный журнал. Пожалуйста, смотрите мой старый пост о том, почему лучше использовать медленный журнал (с long_query_time, установленным в 0
) чем общий лог.
ПРЕДУПРЕЖДЕНИЕ
Пожалуйста, не делайте свою копию медленного журнала в виде таблицы InnoDB. Вы рискуете большой транзакцией, загружающей журналы отмены. Если вы все еще хотите попробовать это как InnoDB, RDS может ответить GODSPEED, SPIDERMAN!!!